Skip to content

RFC-019 + RFC-020: Visual identity + post-FX bus + multi-source layer compositing (paired) #111

Description

@chipi

Summary

Paired RFCs that bring the seven-RFC audio arc's depth to the visual side. RFC-019 introduces a visual identity switch and a post-FX bus (the visual analogue of RFC-012); RFC-020 introduces multi-source layer compositing with the feedback layer as the keystone primitive. Ships paired — post-FX operates over composited output, the identity switch broadcasts coherent layer defaults.

The primitives are grounded in three reference aesthetics surfaced by a parallel aesthetic research pass: Ryoji Ikeda (stroboscopic minimalism), Bill Viola (slow cinematic meditation), Memo Akten (accumulated trails + flow). The single most important architectural insight: a parameterised feedback buffer serves all three aesthetics from one primitive (fade = 0.0 / 0.96-0.98 / 0.99+ for Ikeda / Akten / Viola respectively).

RFCs

Scope — RFC-019

  • Visual identity switch: `cinematic` (Akten) / `minimalist` (Ikeda) / `meditative` (Viola) / `painterly` / `technical`
  • Post-FX chain primitive — ordered effects pipeline, every param polymorphic per RFC-014
  • Effect catalogue: bloom (threshold range matters: Viola high / Akten low), glow, chromatic aberration (centre / velocity-source), grain (per-frame regen default), vignette, color_grade (LUT), two_tone_grade (Viola submerged palette), threshold_binarize (Ikeda), nearest_scale (Ikeda pixel-grid integrity), blur_radial, scanline, displacement
  • LUT bank in `visual/luts//metadata.yaml` with license gate (CC0 / CC-BY / open) — mirrors RFC-012's vocal sample bank discipline
  • Always-on subtle drift — Cloud Filter analogue, low-depth low-frequency displacement
  • Camera as envelope-able layer (pan / zoom / rotation / orbit) with built-in motion presets (static / slow_pan_right / slow_orbit / push_in / breathe)
  • Pipeline ffmpeg `filter_complex` canonical for export; browser WebGL shaders for preview at perceptual tolerance (SSIM ≥ 0.98)

Scope — RFC-020

  • Top-level `layers:` block — ordered list of layers
  • Four layer types: `sketch` (wraps existing p5/canvas), `feedback` (the keystone), `texture` (medium overlay), `motion_graphics` (annotations / titles / markers)
  • Feedback layer keystone primitive: `buffer[t] = fade * transform(buffer[t-1]) + source[t]`
    • `fade: 0.0` → Ikeda hard cuts
    • `fade: 0.95-0.98` → Akten accumulated trails
    • `fade: 0.99+` → Viola long temporal smear
  • Per-layer envelopes / clocks / macros via RFC-014/016/017 polymorphism
  • Blend modes: normal / multiply / screen / add / overlay / soft_light
  • Texture bank in `visual/textures//` with same license + provenance discipline as LUTs
  • Motion graphics templates: `data_label` / `title_card` / `progress_bar` / `marker` — triggerable on RFC-007 detected key moments
  • Backward-compatible — legacy single-sketch recipes render unchanged via implicit `__legacy` layer

Dependencies

  • RFC-014 (envelope primitive — drives post-FX and layer params)
  • RFC-016 (clocks — per-layer rhythmic motion)
  • RFC-017 (macros — cross-modal coordination between audio + visual)

Closes into

  • ADR-044 — Visual identity + post-FX chain
  • ADR-045 — LUT bank + provenance
  • ADR-046 — Layer compositing primitive
  • ADR-047 — Feedback layer + accumulator semantics

Notable design calls

  • Identities grounded in artists, not generic moods — each identity composes coherent defaults from a real reference aesthetic rather than averaging into a generic look
  • Single feedback primitive for three aesthetics — parameterising one number serves Ikeda / Akten / Viola without bespoke implementations
  • Pipeline-canonical / browser-preview architecture — bit-identical export at the cost of preview-mode perceptual tolerance; the right trade for distribution

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