vork by Voyager
An agent writes a scene as code, renders it on the GPU, looks at the result and revises the code. Source-available and free during the research preview.
翻訳待ち
Real-time character-grid image renderer for macOS — GUI + CLI + MCP server. p5.js + Tauri 2 + Rust.
翻訳待ち
Loading the full README.
Read the full README ↗A real-time character-grid image renderer for macOS. Drop in any image and convert it to a tunable mosaic of typeset Unicode glyphs — ASCII, block elements, octants, sextants, braille — with live OKLab-palette interpolation, spatiotemporal blue-noise dithering, and a Lottes-style CRT-beam postprocess.
Free · open source · macOS 11+ (Intel + Apple Silicon)
🌐 Website & download: https://lovespark.love/glyph-grid-studio/
.dmg), open it, drag Glyph Grid Studio into Applications.xattr -dr com.apple.quarantine "/Applications/Glyph Grid Studio.app"
Requirements: macOS 11 (Big Sur) or later. Universal binary — runs natively on both Apple Silicon and Intel Macs.
Prefer to build it yourself? See Build from source below.
Headless renders ~1.8× faster and byte-reproducible, default MP4s 4× smaller, a schema-validated CLI/MCP surface, terminal export (--format txt|ansi|cast|html), a keyframe timeline (--timeline), kinetic typography (--text, --srt) and video sources. Full before/after numbers: docs/V0.2-REPORT.md.
The pipeline samples a source raster image into an M × N cell grid. For each cell, the renderer either:
The selected glyph is typeset into the cell, in a chosen palette and color mode. The output is a fully-composed character-grid — every pixel on the canvas is part of a typeset Unicode character.
gifski (high-quality palette GIF encoding, adaptive Twitter-fit shrink ladder), openh264 + mp4 (native MP4/H.264 export), image, base64, tauri-plugin-dialog, tauri-plugin-fs| Axis | Options |
|---|---|
| Palettes (11) | monochrome, phosphor, bauhaus, lovespark, mono-amber, cyber-phosphor, amber-phosphor, bone-charcoal, cream-paper, silver-charcoal, spice |
| Color modes (4) | preserve, monochrome, duotone, gradient |
| Ramps (9) | classic, dense, sparse, unicode-block, gradient, gradientNoSpace, blockShaded, blockAscend, radial |
| Dithering (9) | none, bayer4, bayer8, blueNoise, STBN (NVIDIA EGSR 2022), temporal, floydSteinberg, atkinson, jarvisJudiceNinke |
| Selection (4) | brightness, shape, shape-edge-aware, edge-directional |
| Glyph sets (7) | ASCII, asciiDense, blockElements, braille, sextant, octant, ramp-only |
| Postprocess (8) | vignette, bloom, halation, scanlines, chromaticAberration, phosphorDecay, depthFog, CRT-beam (Lottes / Blur Busters 2024) |
| Animation | breathing-cell EMA, per-frame gain pulse, per-cell jitter — runtime-tunable · keyframe timeline on any CONFIG path (OKLab palette morphs) |
| Video source | MP4 / MOV / M4V / WebM as the input. H.264 decodes frame-exactly in Rust (openh264), so headless renders of a clip are deterministic. HEVC, VP9 and other codecs go through the WebView <video> with a seek per frame. Webcam source in the GUI (beta) |
| Text source | kinetic typography (typewriter / rise / fade / scale) and .srt / .lrc lyric cues rendered as the source, alone or composited onto the image (multiply / screen / mask) |
| Export | PNG snapshot · animated GIF89a · MP4 (H.264) · preset JSON · share URL |
Nothing leaves your machine: no telemetry, no network calls, no accounts. The webcam source (GUI › Video › camera (beta)) is runtime-only state. It is not part of the config, it is never saved in a preset or share URL, and video.camera is stripped from every preset, share link, batch job, MCP config and --set on the way in. A file someone sends you cannot switch your camera on; only that toggle can, and the headless CLI never opens a camera. Headless text exports (--format txt|ansi|cast|html) can only write the output path the job declared.
This is the beginning of the README. Read the rest at the original. Read the full README ↗