пульт для тижня рендерів: клавіші · аудіо-контракт · рендер · 10 треків · пресети · деплой · граблі
| клавіша | дія |
|---|---|
space | play / pause |
l | loop (грати виділену секцію по колу) |
[ | in — виставити початок виділення по playhead |
] | out — виставити кінець виділення по playhead |
h | сховати/показати панель |
s | save — рендер виділеної секції у файл (SAVE ⤓) |
r | кинути в редактор випадковий Hydra-пресет і одразу запустити |
ArrayBuffer і відкривається в плеєрі (браузер не відкриває його як нову вкладку).RUN, щоб застосувати.r; <select> поруч фільтрує пресети за категорією.Скетч читає живий аналіз треку через два паралельні інтерфейси (обидва живляться тим самим AnalyserBridge):
a.fft[i] — hydra-synth-сумісний shim (a.bins, a.setBins/setSmooth/setScale/setCutoff) — будь-який готовий пресет з інтернету, що читає a.fft[0], працює без змін, але живиться треком, а не мікрофоном.fftLow / fftMid / fftHigh — прості глобали 0..1 (згладжені низи/середина/верхи) для рукописних скетчів.beat — імпульс біта 0..1 (held/decaying envelope зі spectral-flux детектора).fft(index, buckets) — бакет-хелпер, сумісний з mandflok-стилем пресетів (реальна сигнатура з lib/hydra-wrapper.ts у mandflok, звідки й береться спільна бібліотека 0mandrock1/hydra-presets). buckets ≠ поточної кількості бінів міняє кількість через a.setBins(); fft.setSource(...) — no-op (джерело завжди одне — завантажений трек).shape(4, 0.3, 0.02).scale(1, () => 1 + fftLow * 0.5).out()
osc(10, 0.1, () => fftMid * 2).color(1, 0.1, 0.2).out()
osc(10).thresh(0.5 + beat * 0.3).out()
shape(4).scale(1, () => 1 + fft(0, 8)).out()
shape(4, () => 0.2 + fft(0)*0.3, 0.05) .color(1, 0.05, 0.15) .out()
osc(20, 0.05, 1) .kaleid(() => 3 + Math.floor(fft(2)*5)) .rotate(0, 0.1) .out()
fft.setSource('mic')
shape(4, () => 0.2 + fft(0)*0.3, 0.05)
.color(0.1, 1, 0.4)
.out()
s) — рендерить виділений ([/]) шматок у файл, формат виходу — .webm.| № | трек | id | пресет | день (тижневий план) |
|---|---|---|---|---|
| 01 | busifiziren | 01-busifiziren | vein-pulse | 30.08, 21:00 |
| 02 | VLK | 02-vlk | gutter-mosh | 31.08, 18:00 |
| 03 | 5 MINUTES FROM HOME | 03-5-minutes-from-home | static-bloom | 01.09, 18:00 |
| 04 | AVTOBUS BURATIN | 04-avtobus-buratin | kaleido-fever | 06.09, 15:00 |
| 05 | reumatizm | 05-reumatizm | flatline-calm | 02.09, 18:00 |
| 06 | RIOT | 06-riot | strobe-needle | 03.09, 16:00 |
| 07 | Alone in the woods | 07-alone-in-the-woods | bloodmoon-drift | 03.09, 20:00 |
| 08 | Long way home | 08-long-way-home | spiral-wound | 04.09, 18:00 |
| 09 | VESNA | 09-vesna | neon-marrow | 06.09, 18:00 |
| 10 | Aftermath | 10-aftermath | vein-strobe-finale | 05.09, 18:00 * |
Пресети запечені в src/core/presets.snapshot.json і не редагуються вручну (джерело — репо 0mandrock1/hydra-presets).
shape(4, 0.3, 0.02) .repeat(3, 3) .color(0.8, 0, 0.2) .modulateRotate(osc(10), 0.5) .out()
src(o0) .modulate(noise(4, 0.5), 0.05) .layer(shape(4, 0.3, 0.1).color(1, 0, 0.3)) .out()
osc(4, 0.02, 0.8) .diff(noise(1.5, 0.1)) .color(0.6, 0.6, 1) .out()
osc(15, 0.1, 2) .kaleid(8) .color(1, 0.3, 1) .rotate(0, 0.1) .modulateScale(noise(3, 0.2), 0.5) .out()
gradient(0.3) .color(0.05, 0.05, 0.08) .modulate(noise(0.5, 0.05), 0.02) .out()
osc(0.1, 0, 1) .thresh(0.5) .out()
osc(6, 0.05, 0.3) .rotate(0.1, 0.05) .color(1, 0.1, 0.15) .modulate(noise(2, 0.1), 0.1) .out()
osc(20, 0.05, 1) .kaleid(5) .rotate(0, 0.1) .modulateRotate(osc(7, 0, 1), 1) .out()
voronoi(5, 0.3, 0.1) .color(0.9, 0.2, 0.5) .modulateHue(osc(3, 0.1, 1), 1) .out()
shape(3, 0.4, 0.01) .kaleid(6) .color(1, 0, 0.1) .modulate(osc(8, 0, 1).thresh(0.5), 0.3) .out()
noise(50, 0.9) .thresh(0.5, 0.1) .invert() .modulate(osc(20, 0, 1).rotate(0.785), 0.3) .out()
Конфіг альбому — configs/ssch.json (title/subtitle/footer/theme + 10 треків, кожен id/title/url: audio/<id>.mp3/sketch), опційна edition-логіка — src/editions/ssch/.
node build.mjs
esbuild пече dist/ssch.html (та інші відомі конфіги) з одного репо /root/projects/hydra-album.
sh ops/deploy.sh ssch
sh ops/deploy.sh all
Ціль ssch: dist/ssch.html → /var/www/html/tools-landing/ssch-album/index.html (з таймстемп-бекапом попередньої версії), chown www-data, порожня audio/ тека створюється якщо нема. Смоук-курл іде з кредами (basic-auth), бо без них URL віддає 401; вихід ненульовий на будь-якому не-200.
/ssch-album/api/ → 127.0.0.1:3481 (nginx-проксі, той самий basic-auth гейт, бо аудіо лежить поза webroot і віддається бекендом)ssch, /etc/nginx/.htpasswd-ssch; креди — Craft-креди, секція ssch-album (cred ssch-album SSCH_USER / SSCH_PASS)audio/<id>.mp3 — .wav/.flac з тим самим іменем мовчки не грають (немає помилки, просто тиша).ssch) — без кредів curl/браузер отримає 401..wav/.flac досі лежать у веб-корені поруч з перекодованими mp3 — не прибрані.src/core/presets.snapshot.json ← presets.json з репо 0mandrock1/hydra-presets) + node build.mjs.