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.5
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.5.tar.gz | 10.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cvf-1.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.9 kB
Release files / cvf-1.0.5.tar.gz
| Download URL | cvf-1.0.5.tar.gz |
|---|---|
| Size | 10.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
03c5b82c71667dcb1c7b65795e351cc6ac4218363ed25f453877220293cc8ad7
|
|
BLAKE2b-256 checksum How to use checksums |
48da4e41c866323df5fcb9f6eb7840ee57f23bdfae82bb60cb1a183ccf48023d
|
| 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.5-py3-none-any.whl
| Download URL | cvf-1.0.5-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb36b9535a21d81e07c3ba4b052434ea9eae6f289cbaad58c7e657dcab429a89
|
|
BLAKE2b-256 checksum How to use checksums |
105e9abfd6085eb577cfa305abee6f285445a86e6433578a817f0c002568bd91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|