mirror of
https://github.com/YusufB5/ASCILINE.git
synced 2026-06-17 22:35:13 +02:00
The binary protocol re-sent the full grid every frame. This adds an opt-in
per-frame codec that picks the smallest of three encodings and tags it in a
1-byte header, without changing the rendered output:
0 RAW framebuffer as-is (legacy)
1 ZLIB zlib(framebuffer)
2 DELTA only the cells changed since the previous frame, patched on top
Clients opt in via /ws?codec=adaptive; omitting it yields the original protocol
byte-for-byte, so existing clients are unaffected. A keyframe is forced
periodically for resync. codec.js is shared by the browser and the Node test,
so the shipped decode path is the tested one.
Optional --quality {lossless,high,balanced,low} enables lossy temporal delta
(conditional replenishment): a colour cell is only re-sent once it drifts past a
tolerance from what the viewer already sees; the character plane stays exact.
Default lossless = bit-exact.
Measured wire savings (mode 5, 200x80): static screen 0.3% of legacy (~375x),
pixel mode 11.6%, high-motion 63% (never worse). Encoder tuned (zlib level 3,
smart candidate selection) to stay well under the frame budget.
Verified bit-exact two independent ways: Python->Node vectors and a live
adaptive-vs-legacy WebSocket diff. (A fuller mutation + Autobahn conformance
harness exists on request.)
34 lines
481 B
Text
34 lines
481 B
Text
# Python cache
|
|
__pycache__/
|
|
*.pyc
|
|
*.pyo
|
|
*.pyd
|
|
|
|
# Video files (too large for GitHub, user provides their own)
|
|
*.mp4
|
|
*.avi
|
|
*.mov
|
|
*.mkv
|
|
*.webm
|
|
|
|
# Environment & IDE
|
|
.env
|
|
.venv/
|
|
.vscode/
|
|
.idea/
|
|
|
|
# Experiment artifacts (scripts are tracked; generated outputs are not)
|
|
experiments/vectors/
|
|
experiments/*.png
|
|
|
|
# Personal notes
|
|
mynotes.txt
|
|
|
|
# Old versions
|
|
*-previous-ver-*
|
|
|
|
# Autobahn conformance reports (regenerated by the test run)
|
|
experiments/autobahn/reports/
|
|
|
|
# stray temp dirs
|
|
tmp*/
|