live coding visual synth

コードで描く、
動き続ける映像。

Hydra は、関数をつなぐだけでリアルタイムの映像を合成できるライブコーディング用ビジュアルシンセです。 この背景もすべて、わずか数行の Hydra コードが今この瞬間に GPU で描いています。

osc(6, 0.035, 0.6)
  .rotate(0, 0.04)
  .modulate(noise(2.2, 0.12), 0.22)
  .color(0.62, 0.38, 1.05)
  .saturate(1.25)
  .contrast(1.08)
  .out()
what is hydra

Hydra でできること

アナログのビデオシンセサイザーに着想を得た、関数の連鎖(チェイン)で映像を組み立てる仕組みです。 サーバーも素材も要らず、ブラウザと GPU だけで完結します。

発生源を作る

osc / noise / voronoi / shape / gradient など、波・ノイズ・図形のソースを生成。

変形を重ねる

rotate / kaleid / modulate / pixelate などを . でつなぎ、座標と色を次々に変換。

合成する

blend / diff / add / mult / layer / mask で複数の映像を掛け合わせる。

外部入力で駆動

マイクの FFT や Webカメラ、マウス座標を関数 () => ... に渡して反応させる。

playground

ライブコーディング

コードを書き換えると、500ミリ秒後に自動で映像へ反映されます。osc や rotate の数字を変えるだけでも、別世界の映像が生まれます。

待機中
live inputs

音とカメラに反応する

Hydra は映像を作るだけでなく、外の世界を取り込めます。マイクとカメラの許可が必要です(映像は端末内で処理され、どこにも送信しません)。

マイク入力を FFT で解析し、周波数の強さでオシレータの周波数や万華鏡の枚数を駆動します。音楽を流すと映像が踊ります。

音に反応する

下のバーが各周波数帯(a.fft)の強さ。これが映像のパラメータを動かしています。

a.setBins(6)
a.setSmooth(0.92)
a.setScale(8)

osc(() => 18 + a.fft[0] * 90, 0.08, 0.8)
  .kaleid(() => 3 + a.fft[2] * 6)
  .color(1.4, 0.4, 1.0)
  .rotate(0, 0.1)
  .modulateScale(osc(3), () => a.fft[1] * 0.7)
  .out()

Webカメラ映像をソース s0 として取り込み、万華鏡とフィードバックで加工します。鏡の中で自分が万華鏡になります。

カメラを取り込む

映像は端末内でのみ処理され、外部へ送信しません。

s0.initCam()

src(s0)
  .kaleid(4)
  .modulate(osc(6, 0.1).rotate(0.4), 0.02)
  .color(1.2, 0.9, 1.4)
  .diff(src(o0).scale(1.01).rotate(0.01))
  .out()