cvf
Console Video File — ASCII video format for the terminal.
Stores ASCII frames in a ZIP container with JSON metadata and LZMA-compressed frames. Playback uses CuiFW to render frames in the terminal.
Features
- JSON metadata
- LZMA-compressed frames
- ZIP container
- No ffmpeg for playback
- Stdlib only
- Windows, Linux, macOS, Termux
Install
pip install cvf
Optional, for playback:
pip install cuifw
API
import cvf
cvf.CreateVideo(path, frames, width, height, fps=15, chars=..., metadata=None, compress_level=6)
cvf.PlayVideo(path, color=None, bg=None, show_status=True, loop=False)
cvf.VideoData(path, load_frames=True)
CreateVideo
Write a .cvf file.
import cvf
frames = [...] # list of bytes, each width*height
cvf.CreateVideo("out.cvf", frames, width=80, height=24, fps=15)
Returns the output path.
PlayVideo
Play a .cvf file using CuiFW. Requires CuiFW installed.
import cvf
cvf.PlayVideo("out.cvf")
Returns the player object.
VideoData
Read a .cvf file.
import cvf
data = cvf.VideoData("out.cvf")
print(data["meta"]["fps"])
print(data["frame_count"])
for frame in data["frames"]:
pass
Metadata only:
data = cvf.VideoData("out.cvf", load_frames=False)
File format
A .cvf file is a standard ZIP archive:
file.cvf
├── meta.json
├── chars.txt
└── frames.lzma
meta.json
{
"format": "CVF",
"version": "1.0",
"width": 80,
"height": 24,
"fps": 15,
"frame_count": 450,
"chars": " .:-=+*#%@",
"compression": "lzma-xz",
"raw_size": 864000,
"compressed_size": 312450,
"created": "2026-10-07T12:34:56"
}
chars.txt
Character palette. Each byte in the frame data is an index into this string.
Default:
.:-=+*#%@
frames.lzma
All frames concatenated, then compressed with LZMA (XZ).
Frame size = width * height bytes. Total raw size = width * height * frame_count bytes.
Size
80x24, 15 FPS, 10s raw 288 KB cvf ~110 KB
80x24, 15 FPS, 60s raw 1.7 MB cvf ~600 KB
120x40, 15 FPS, 60s raw 4.3 MB cvf ~1.4 MB
Requirements
- Python 3.7+
- Stdlib only
- Optional: CuiFW for playback
Limitations
- ASCII only
- Fixed frame size
- No audio
- Fixed FPS
- No seek during playback
License
MIT — see LICENSE.
Author
Suleiman
Changelog
1.0.0
- Initial release
- CreateVideo, PlayVideo, VideoData
- JSON metadata
- LZMA-compressed frames
- ZIP container
Metadata
Release files for cvf 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cvf-1.0.0.tar.gz | 5.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cvf-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.8 kB
Release files / cvf-1.0.0.tar.gz
| Download URL | cvf-1.0.0.tar.gz |
|---|---|
| Size | 5.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cde34aa1d40def32ef3b5674b76a90aa3b05e201e7f37bd854d4f3be2fe80288
|
|
BLAKE2b-256 checksum How to use checksums |
419108b1a6de1479ae9d49a1952b1c08cf9b3e80c7e74a5febbc76d57216749f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|
Release files / cvf-1.0.0-py3-none-any.whl
| Download URL | cvf-1.0.0-py3-none-any.whl |
|---|---|
| Size | 6.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e3fab2d3b3d9a8306085aad36b94189a06d647c3c194a86b81c69fc3fb7118bf
|
|
BLAKE2b-256 checksum How to use checksums |
7e341638203f4078003b78ac69ca999464f2be7a534bbe22a5c4dfe0c4373df6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|