Turn media into text.
Play videos live or export colored, edge-aware Mojify output as a video, animated, still-image, or text file.
brew install jassuwu/tap/mojifyHomebrew installs a Mojify bottle when one is available for your host, builds from the tagged source archive otherwise, and installs the formula-declared runtime dependencies.
You can also download a macOS or Linux tarball from GitHub Releases and place mojify on your PATH.
Check runtime tools:
mojify doctorWindows support is WSL-only for now.
Play a local video:
mojify play ./demo.mp4Play a yt-dlp-compatible URL:
mojify play "https://www.youtube.com/watch?v=<id>"Export Mojify output as video, animation, still image, or text:
mojify export --overwrite --width 320 ./demo.mp4 ./dist/demo-mojify.mp4
mojify export --overwrite --width 320 --at 10s --duration 3s ./demo.mp4 ./dist/demo-mojify.gif
mojify export --overwrite --width 320 --at 10s ./demo.mp4 ./dist/demo-frame.png
mojify export --overwrite --width 80 --at 10s ./demo.mp4 ./dist/demo-frame.ansiExport a local still image as Mojify image or text output:
mojify export --overwrite --width 320 ./poster.png ./dist/poster-mojify.png
mojify export --overwrite --width 80 ./poster.png ./dist/poster-mojify.ansiChoose a built-in recipe preset:
mojify export --overwrite --recipe blocks --width 320 ./poster.png ./dist/poster-blocks.pngInspect what Mojify will derive from a source:
mojify probe ./demo.mp4Mojify accepts local video files, local still images, and yt-dlp-compatible platform URLs as source media. It turns those sources into colored character frames that can be played live or exported through a curated set of media, image, and text formats.
Current capabilities:
- Local video playback
- Local PNG and JPEG still-image input for
probeand single-frameexport - yt-dlp-compatible URL input
- Live terminal audio playback
- Curated export formats: MP4, WebM, MOV, GIF, APNG, PNG, JPEG, plain text, and ANSI text
- Source audio preservation for supported video exports when audio is available
- Truecolor ANSI output
- Edge-aware character rendering
- Built-in recipe presets:
default,mono,ascii, andblocks - Runtime dependency check with
mojify doctor play,probe,export, anddoctorcommands
Most media-to-ASCII experiments stop at the renderer. Mojify is an attempt to make that idea complete: playable, exportable, installable, and extensible, while leaning on FFmpeg and yt-dlp for the media plumbing they already do well.
The default renderer is built around a practical media-to-text recipe:
- luminance and intensity mapping choose the base character
- source color becomes terminal or exported frame color
- edge detection can override density characters with directional glyphs
- frame timing favors smooth playback over showing every decoded frame
Future renderer recipes may swap the character set, color strategy, or conversion rules entirely. Emoji output and custom character recipes are intentionally left as future product surface, not current README promises.
See Recipes for built-in preset behavior and the future custom recipe direction.
Mojify shells out to battle-tested media tools instead of reimplementing their jobs:
ffmpegandffprobefor media decoding, probing, and media/image exportffplayfor live playback audioyt-dlpfor platform URL inputs
Homebrew installs declare ffmpeg and yt-dlp. Tarball installs require the runtime tools to be installed separately. Run mojify doctor to check the tools visible to the installed binary.
Planned or likely follow-up work:
- custom renderer recipes
- native Windows support beyond WSL
- a desktop app?
- a landing site?
WebP export remains deferred: .webp can mean either still or animated output, and WebP encoding is not guaranteed by Mojify's current FFmpeg dependency. Export PNG, GIF, APNG, or MP4 and convert externally when WebP is needed.
Requirements:
- Go 1.23+
- Bun 1.3+
Build from source:
bun install
bun run build
./bin/mojify --helpRun tests:
bun run test
bun run fmt:checkPlayback QA:
bun run qa:clips
bun run build
./bin/mojify play --stats dist/qa/low-motion-bars.mp4Export QA:
bun run qa:clips
bun run build
bun run qa:exportThe repeatable QA checklists live in:
Mojify uses calendar + build tags in the shape vYYYY.MM.DD.BUILD.
See the release runbook for snapshot QA, stable tag releases, and Homebrew tap publishing.