Weft is a Rust video codec built around ASCII symbols. The encoder fits source frames into colored glyph compositions, stores them in a seekable .sci archive, and the decoder reconstructs the picture from those compositions. Opus audio lives in the same archive.
Use the CLI to prepare video, the Rust library to work with frames and archives, or the WebAssembly decoder to build browser playback. Video timing, seek points and synchronized sound live in one file.
| Output | Details |
|---|---|
![]() | Source 1920×1080 |
![]() | Weft 1080p |
- ASCII encoder and decoder. Fixed printable glyphs, RGB attributes, reflections and layered spatial groups. Every rendered frame comes from that representation.
.sciarchives. Explicit presentation times, independent seek chunks, checksums, prepared renditions and synchronized audio.- Rust libraries and CLI. The portable codec works without FFmpeg or a web server. Media ingestion is a separate crate.
- Browser playback. The same Rust decoder runs in workers through WebAssembly, with Canvas or equivalent WebGL2 glyph reconstruction.
Rendered resolution targets are 360p, 480p, 720p and 1080p. Ingestion preserves source timing up to 60 FPS. The local SCI player supports seeking, quality selection, playback speed and synchronized audio.
Install Rust 1.89 or newer. Encoding also needs FFmpeg and FFprobe on PATH, with libopus support.
cargo build --release --locked
cargo run -p weft-cli --release -- encode videos/input.mp4 videos/output.sci
cargo run -p weft-cli --release -- inspect videos/output.sci
cargo run -p weft-cli --release -- decode videos/output.sci 30 frame.ppmdecode writes an RGB PPM reconstructed from a zero-based presentation frame. Existing output archives are never overwritten. Encoding options cover resolution selection, timing and fitting options.
To build the website (Node.js 22 or newer):
npm ci --prefix website
npm run build --prefix websitewebsite/dist/ is the GitHub Pages artifact for weft.ecnivs.com. It contains the product website, image previews and hosted documentation. The local SCI player, ingestion server, tests and benchmarks live separately under player/. Original footage stays in the ignored videos/ directory. Deployment uses a manually triggered workflow. Website development covers local preview and hosting.
- Introduction: the representation and project goals.
- Encoding: source preparation and CLI options.
- Integration: using the Rust codec and archive reader.
- Architecture: ingestion, decoding and playback boundaries.
- Website: static build, local server and GitHub Pages.
- Benchmarks: reproducible comparisons and validation.
- SCI specification: the binary format and reconstruction rules.
- Full index.
Weft’s longer-term goal is faithful video with lower bandwidth and playback cost. Recorded comparisons favor the tested conventional codecs in archive size, and fitting remains lossy. Sustained 2x playback across every resolution is not yet established. Research status separates implemented features from measured results and future targets.
Fork, make a focused change, and open a pull request against master. Codec changes need format and decoder agreement tests. Performance changes need controlled measurements. Read CONTRIBUTING.md before starting.
Weft Noncommercial License 1.0. Noncommercial use is free. Commercial use requires a separate paid license from the applicable copyright holders, including use by solo developers.
Media and fonts have separate terms. See asset notices and the notices under shared/web/fonts.


