Skip to content

RFC-021: Granular frame processing — Aetherizer for video (speculative) #112

Description

@chipi

Summary

Temporal-domain analogue of RFC-012's Aetherizer audio bus. Operates between renderer output and encoder input, providing two orthogonal granular controls — `frame_hold` (Ikeda stroboscopic cadence) and `interp_factor` (Viola time dilation via optical-flow interpolation). The most speculative RFC of the arc — ships with honest retirement contingency if no recipe adopts it within six months.

RFC

RFC-021 — Granular frame processing

Scope

  • New top-level `granular:` block
  • `frame_hold: 0..3` — Ikeda primitive. Each rendered frame held N+1 times in output. `frame_hold: 2` produces ~15 visible transitions per second at 30fps export — the Ikeda cadence.
  • `interp_factor: 1..40×` — Viola primitive. M-1 intermediate frames synthesised between each rendered pair. `interp_factor: 20` produces continuous Viola-style time-dilation.
  • `interp_engine: classical | rife`
    • `classical` (default, ships): OpenCV Farnebäck dense optical flow. Self-hostable, deterministic, no model weights.
    • `rife` (opt-in extension): Real-time Intermediate Flow Estimation neural interpolation. Requires separate model install at `~/.config/oceancanvas/models/rife/`. Higher quality at cost of self-host friction.
  • `audio_sync: real_time | stretch | hold` with explicit semantics:
    • `real_time` (default) — audio plays at recipe fps; granular only affects visual
    • `stretch` — pitch-preserving audio time-stretch to match visual; expensive
    • `hold` — audio holds in sync with `frame_hold` steps; novelty
  • Speculative effects schema reservation: `datamosh` / `pixel_sort` / `slit_scan` declared in schema as opt-in, not implemented at v1. Reserves naming for future RFC revision.
  • Cross-validated TS ↔ Py at perceptual tolerance (matches RFC-019). Classical optical flow is OpenCV-version-deterministic; CI pins version.

Dependencies

  • RFC-019 + RFC-020 must be in place — granular operations sit between renderer output (which is layered + post-FX'd) and encoder input

Closure conditions (more conservative than other RFCs)

Closes only when at least one `minimalist`-identity recipe demonstrably uses `frame_hold ≥ 1` AND at least one `meditative`-identity recipe demonstrably uses `interp_factor ≥ 4` with the classical engine. If neither condition is met within six months of landing, the RFC retires honestly — the schema reservation is removed and the `granular:` block is dropped from the parser.

Closes into

  • ADR-048 — Granular frame primitive: `frame_hold` + `interp_factor` + temporal operations

Notable design calls

  • Classical optical flow at v1, neural opt-in — preserves self-hostable constraint as default; users wanting RIFE quality install separately
  • Real-time audio sync as default — cheapest, most intuitive; stretch / hold modes opt-in for specific aesthetics
  • Honest retirement — the most candidly speculative RFC of the arc explicitly carries a retirement clause if unused. The aesthetic payoff is potentially large but unproven for ocean data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions