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
Metadata
Release files for cvf 1.0.2
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.2.tar.gz | 12.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cvf-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.1 kB
Release files / cvf-1.0.2.tar.gz
| Download URL | cvf-1.0.2.tar.gz |
|---|---|
| Size | 12.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2cb766dcaf2330f0a51224025d95c04c7bac20dc2729e4bf9535902ee20185c3
|
|
BLAKE2b-256 checksum How to use checksums |
9f7d9de64def22eb9bb1692898fd5cb3f436667ed5ca17f223894620a096e47a
|
| 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.2-py3-none-any.whl
| Download URL | cvf-1.0.2-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ce3cef0d1d5a637f69efbfe3a5c178d6f818c94a035f5b7d51791a3b809ddfb3
|
|
BLAKE2b-256 checksum How to use checksums |
45e28dbef4ba61013511d5afc8f8465b0c03862c5b6522531dfc51536216acba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|