Browser-based image and video creation for dithering, palette reduction, glitch art, print simulation, temporal effects, and filter-chain experimentation.
Audio-reactive too: drive visuals with live microphone or tab audio through per-filter, chain-wide, and screensaver patch panels.
Also useful for lightweight VJing and live visuals too: swap sources, keep output framing stable, and drive filters from live audio.
![]() |
![]() |
![]() |
![]() |
- Build filter chains in the browser and reorder them with drag and drop
- Process still images or video clips with realtime preview
- Route live audio metrics into filter parameters with per-filter, chain-wide, or screensaver patch panels
- Share looks through URL state or exported JSON
- Export processed output as images, GIFs, or video
- Explore a large built-in library of filters, palettes, and curated presets
- 200+ registered filter entries spanning dithering, color, stylize, distort, glitch, blur, temporal, simulation, and analysis workflows
- 129 curated chain presets for looks like VHS pause, cyberpunk, lo-fi webcam, CRT, print, anime, and glitch-art variants
- Temporal pipeline with previous-frame input/output buffers, EMA history, and frame index injection for motion- and persistence-based effects
- Worker offload for non-temporal chains so the UI stays responsive
- Gamma-correct pipeline with optional linear-light processing
- Palette tooling including built-in retro/art palettes plus adaptive and extracted palettes
- Audio-reactive modulation with microphone or tab audio input, auto-generated mappings, and draggable patch panels
- WASM acceleration for performance-critical color distance work with JS fallback
- Rich export flows for PNG, JPEG, WebP, GIF, frame sequences, WebM, and browser-dependent MP4 recording paths
- Static gallery generation from the live filter/preset registries
Ditherer can drive filter parameters from live audio analysis. You can patch metrics like level, bass, beat, spectral flux, or tempo phase into numeric filter controls either per filter, across the whole chain, or in screensaver mode.
- Use microphone or tab/system audio as the source
- Auto-generate musical mappings with
Auto VizandReroll - Reuse modulation at the chain level or target a single filter for more surgical control
- Let screensaver mode auto-refresh its routing as the active chain changes
Representative animated previews from the generated gallery:
- Browse the generated gallery in docs/gallery/GALLERY.md
- Regenerate gallery previews with
npm run gallery
npm install
npm run dev
npm run build
npm run preview
npm run lint
npm run typecheck
npm run testExtra repo utilities:
npm run benchto run performance benchesnpm run bench:compareto compare benchmark runsnpm run report:presetsto find duplicate or highly similar presetsnpm run galleryto regeneratedocs/gallery/GALLERY.mdand preview assets
npm run build writes a static build to build/. The app uses base: "./" in Vite, so the output can be hosted from a subdirectory or copied to a static host without extra routing setup.
- AGENTS.md covers architecture, filter registration, the temporal pipeline, and contribution expectations
src/filters/index.tsis the registry for filter metadata and worker-visible entriessrc/context/FilterContext.tsxowns chain execution, temporal state, sharing, and worker orchestration- docs/plan/ contains numbered implementation plans





