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 2.0.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 2.0.0
File Size Uploaded Provenance Actions
ulf-2.0.0.tar.gz 39.9 kB Without provenance Details for ulf-2.0.0.tar.gz

Built distribution (wheel)

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

Total release size: 81.3 kB

Release files / ulf-2.0.0.tar.gz

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

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

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

Security for ulf 2.0.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

2.0.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