Skip to main content

Unicode Lossful Format (ULF)

A deliberately silly text-based video format. ULF represents video frames using Unicode characters, choosing glyphs that visually resemble parts of the original image.

It supports audio, delta-frame compression, GPU acceleration, and MP4 export.

Comparison

ULF Comparison

Requirements

Python 3.10+.

Install the package (with all optional playback features):

python -m pip install "unicode-lossful-format[all]"

FFmpeg must be installed and available on your system PATH for MP4 export. It is an external system dependency and is not installed by pip or by any ULF extra. Verify it with ffmpeg -version before using ulf convert or ulf.convert().

Encode

ulf-encode input.mp4 output.ulf --size 80x40

Options

  • --size WIDTHxHEIGHT: Character-grid resolution (default: 80x40).
  • --fps N: Output frame rate.
  • --font PATH: Font used for glyph matching.
  • --every N: Encode every Nth source frame.
  • --backend auto|vulkan|cpu: Select processing backend.
  • --keyframe-interval N: Set the interval between full frames.
  • --mute: Disable audio.
  • --audio-waves N: Set audio reconstruction detail.
  • --emojiless: Exclude emoji characters.
  • --hackerman: Use printable keyboard ASCII characters only.
  • --debug: Enable diagnostic output.

Play

ulf-play output.ulf

Options

  • --window WIDTHxHEIGHT: Set playback window size.
  • --font PATH: Select playback font.
  • --backend auto|vulkan|cpu: Select playback backend.
  • --mute: Disable audio.
  • --debug: Enable diagnostic output.

Convert to MP4

ulf convert output.ulf output.mp4 --encoder auto --export-quality high

The legacy equivalent remains ulf-play output.ulf --export output.mp4.

Python API

The same options are available as keyword arguments, using underscores in place of CLI hyphens:

import ulf

ulf.encode("example.mp4", "example.ulf", size="80x40", backend="auto")
ulf.play("example.ulf", window="1280x720", mute=False)
ulf.convert("example.ulf", "example.mp4", encoder="auto", export_quality="high")

encode() derives an .ulf output path when its output argument is omitted. convert() requires FFmpeg on your system PATH, just like the CLI.

File format

ULF files use the .ulf extension and are stored as UTF-8 text.

The format uses the ULF/1.0 signature and supports full-frame and delta-frame video, with optional audio data.

Limitations

  • Video is grayscale.
  • Audio reconstruction is lossy.
  • Visual quality depends on the selected font and renderer.
  • Vulkan requires compatible hardware and drivers.
  • MP4 export requires FFmpeg.
  • Large resolutions can increase processing time and file size.

Have fun

ULF makes video less efficient on purpose.

Now with compression, GPU acceleration, sound, and MP4 export!

Metadata

Release files for ulf 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ulf 0.1.0
File Size Uploaded Provenance Actions
ulf-0.1.0.tar.gz 38.8 kB Without provenance Details for ulf-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for ulf 0.1.0
File Interpreter ABI Platform Actions
ulf-0.1.0-py3-none-any.whl Python 3 none any Details for ulf-0.1.0-py3-none-any.whl

Total release size: 79.0 kB

Release files / ulf-0.1.0.tar.gz

Download URL ulf-0.1.0.tar.gz
Size 38.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a168d065d701f6e485f2138c36da4d1ae3bc06e8b1e2d99b94bf5536d8ae159b
BLAKE2b-256 checksum
How to use checksums
e98015eee7c2017520d53093accadd37e06242bd8bb16b83bc4d074b7e35e273
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / ulf-0.1.0-py3-none-any.whl

Download URL ulf-0.1.0-py3-none-any.whl
Size 40.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f04a3b34fb5f2b51dfb024a12dfc7c185734cd389b9ad7578770d75e478a5e46
BLAKE2b-256 checksum
How to use checksums
73dc0260178bd341d4f6a1c5f22ee74caf2a1cbab0e96ac1ab7653d4617bb74d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Security for ulf 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page