Generate waveform from audio file, export as a video. SRT and effects support.
  • TypeScript 79.7%
  • CSS 14.6%
  • JavaScript 5.4%
  • HTML 0.3%
Find a file
Sid ed22b1679e v1.5.3: per-frame streaming fix, dev mode fork cwd, canvas module for dev worker
- Per-frame worker messaging: workers stream frames individually via
  postMessage({index, data}) with ArrayBuffer transfer instead of
  batch-collecting all PNGs (fixes OOM on long renders)
- Ordered frame pipe: ffmpeg spawned before workers; frameQueue +
  tryFlushPipe() streams frames in sequence as they arrive
- framesReceived progress counter (every 30 frames)
- getWorkerPath(): resolves render-worker.js in both dev (server-dist/)
  and production (resources/server-dist/)
- fork() cwd fix: set child process CWD to server/ so --import tsx/esm
  finds tsx in server/node_modules/
- build-server.mjs: copy server/node_modules/ to server-dist/node_modules/
  so dev mode workers can resolve the canvas native module
2026-06-17 11:29:01 +02:00
.opencode/plans v1.1.0: worker_threads parallel rendering + image2pipe 2026-06-16 14:30:21 +02:00
docs/plans v1.2.0: UI overhaul — preview left, 4 panels right, full-res canvas, font selector, render estimation 2026-06-16 14:47:52 +02:00
electron v1.5.3: per-frame streaming fix, dev mode fork cwd, canvas module for dev worker 2026-06-17 11:29:01 +02:00
fonts v1.5.0: bundled Roboto fonts, font selector with 9 variants, README updates 2026-06-16 18:22:10 +02:00
packages/shared v1.5.2: streaming pipe (fix OOM for long videos), quoted font family, 4GB heap 2026-06-16 19:03:55 +02:00
public Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00
scripts v1.5.3: per-frame streaming fix, dev mode fork cwd, canvas module for dev worker 2026-06-17 11:29:01 +02:00
server v1.5.3: per-frame streaming fix, dev mode fork cwd, canvas module for dev worker 2026-06-17 11:29:01 +02:00
src v1.5.0: bundled Roboto fonts, font selector with 9 variants, README updates 2026-06-16 18:22:10 +02:00
.gitignore v1.5.0: bundled Roboto fonts, font selector with 9 variants, README updates 2026-06-16 18:22:10 +02:00
electron-builder.yml v1.5.0: bundled Roboto fonts, font selector with 9 variants, README updates 2026-06-16 18:22:10 +02:00
electron.vite.config.ts v1.1.0: worker_threads parallel rendering + image2pipe 2026-06-16 14:30:21 +02:00
eslint.config.js Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00
index.html Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00
package-lock.json v1.5.3: per-frame streaming fix, dev mode fork cwd, canvas module for dev worker 2026-06-17 11:29:01 +02:00
package.json v1.5.3: per-frame streaming fix, dev mode fork cwd, canvas module for dev worker 2026-06-17 11:29:01 +02:00
README.md Install in README 2026-06-16 18:25:13 +02:00
screenshot.png v1.5.0: bundled Roboto fonts, font selector with 9 variants, README updates 2026-06-16 18:22:10 +02:00
screenshot2.png README and screenshots 2026-06-16 18:06:38 +02:00
tsconfig.app.json Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00
tsconfig.json Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00
tsconfig.node.json Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00
vite.config.ts Initial commit: waveforms-gen Electron + React desktop app 2026-06-16 10:52:44 +02:00

Reelmaker

Create reels from audio. Generate an audio waveform video by dropping in an audio file, configure waveform style, and render a video visualization. Add subtitles as a .SRT file to burn them into the rendered media.

Install

See the releases page to download latest Windows .exe file.

Screenshots

Welcome screen Preview

Dev

Run the frontend + server separately:

# Terminal 1 — Electron + frontend (with HMR)
npm run dev

# Terminal 2 — Express server (API)
npm run dev:server

The Vite dev server proxies /encode requests to the Express server, so the frontend uses relative URLs.

Build

npm run build

Compiles: server → server-dist/ (esbuild), Electron → out/ (electron-vite).

Package (Windows .exe)

Run from Windows

npm install --legacy-peer-deps
npm run package

This will:

  1. Download ffmpeg.exe / ffprobe.exe to resources/ffmpeg/
  2. Build the server bundle (server-dist/)
  3. Build the Electron app (out/)
  4. Rebuild native addons for Electron's Node version
  5. Produce a standalone installer in dist-electron/

Requires:

  • Visual Studio Build Tools (for canvas native addon via node-gyp)
  • Internet connection on first build (downloads ~50MB ffmpeg)

Project structure

├── packages/shared/       # Shared types + utils (@waveforms-gen/shared)
├── server/                # Express API server (canvas + ffmpeg)
├── server-dist/           # Compiled server bundle (esbuild output)
├── src/                   # React frontend (renderer)
├── electron/
│   ├── main/index.ts      # Electron main process
│   └── preload/index.ts   # Preload script
├── fonts/                 # Bundled Roboto variable TTF files (Light → Black, incl. Italic)
├── resources/ffmpeg/      # Bundled ffmpeg.exe / ffprobe.exe
├── scripts/
│   ├── build-server.mjs   # Server esbuild bundler
│   ├── download-ffmpeg.mjs
│   └── generate-font-css.mjs  # Inline fonts as base64 @font-face CSS
├── electron.vite.config.ts
├── electron-builder.yml
├── out/                   # electron-vite build output
└── dist-electron/         # electron-builder installer output