What's New
Proven Recovery Results
- 30 fps: 14/14 chunks PASS, SHA256-verified, ~140 MB real archive
- 60 fps: 14/14 chunks PASS, SHA256-verified, same archive
- BCH ECC with t=16 corrects all errors introduced by YouTube VP9 transcoding
- End-to-end fidelity at 4K (3840×2160), 1 bit per pixel
Critical Bug Fixes
AAC edit list DTS offset (bundle concat)
The AAC encoder delay introduces an elst atom that offsets video DTS by ~0.021 s. When using ffmpeg -f concat -c copy, the concat demuxer duplicates frame 0 and shifts every subsequent frame by +1, corrupting all inter-frame references. Fixed by stripping audio (-an -c:v copy -video_track_timescale <fps>) from every clip before concat.
ECC header corruption recovery
The unprotected 25-byte global header can be corrupted by VP9 transcoding. BCHPayloadCodec.decode() now recovers silently from header bit-flips using self.config + expected_size_bytes when the AGB1 magic is intact.
Production Config Updates
PipelineConfig.ecc_t: 8 → 16 (30 bytes overhead/block, corrects more errors)PipelineConfig.max_fps: 6 → 60- CLI
--max-fpsdefault: 6 → 30 (bothpipeline encodeandproduction receive)
Web Control Plane
- FPS selector on upload form: 30 fps default, 60 fps as opt-in advanced option
- FPS stored per-upload in the web DB and displayed in gallery and detail view
--max-fpspassed automatically toagatha production receive
VP9 Format Codes
- ≤30 fps: format 313 (VP9 2160p 30fps)
- 60 fps: format 315 (VP9 2160p 60fps)
Known Limitations
- Frame extraction buffers entire video in RAM (
subprocess.runwithcapture_output=True) — ~2 GB at 60fps 4K. Needs streaming replacement for very large archives. - Packed bundle format (zero inter-chunk white padding) reduces file size 24× but VP9 bit-amplification effect is lost — error rate rises above t=16 threshold. Not usable until a low-entropy bitmap format is designed.
production receiveCLI defaults to--max-fps 30. 60fps must be specified explicitly from CLI (the web sends it automatically).
Next Steps
See Active Goals in CLAUDE.md.