Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • armada
  • tide-table
  • render_release_videos.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(release): Slopmotion renders the release videos, not a still I found lying around · e794a441
    I had `master yt render` wrap each track in a still image, and picked that still
    from `output/*.jpg`. PLN: "i dont like these covers, wait where are tehse genai
    images from? these are not great sources! we wanna use slopmotion for videos
    remember?" Both objections land, and the first is the one worth recording:
    
      * Those nine illustrations are UNTRACKED and have no recorded provenance.
        `6c3272c9 refactor: Remove covers from git` had deliberately taken covers out
        of this repo, so "sitting in output/" was evidence against using them, not
        for it. I built a per-bank rights ledger for the audio this same session —
        one that refuses a sample bank precisely because its origin is unrecorded —
        and then reached for pictures off the floor. The discipline has to apply to
        every asset in a release or it is not a discipline.
      * Slopmotion already does this properly, already supports `--shape landscape`
        at 1920x1080 explicitly "for YouTube", and has already produced a real
        7m26s landscape render. Nothing needed inventing.
    
    So this bridges the release plan to `visuals/slop/render_slop_clip.mjs`, naming
    its output exactly what `tidal_ears.yt.video_path` produces — imported from the
    adapter rather than reimplemented, because two copies of a filename rule is how
    a renderer and an uploader come to disagree about which file is track 7.
    
    ## Realtime is the whole scheduling story
    
    Slopmotion captures in realtime by design: Hydra's clock is wall time, so
    frame-stepping runs motion ~3x fast and drifts off the audio it reacts to. A
    full-length render therefore costs the track's own duration. OPAL-26 measures
    **2h25m** of headless Chromium for the landscape shape — 1h12m of continuous mix
    plus 1h13m of tracks. Too long for a shell job that dies with its terminal, so
    `--unit` writes a `systemd --user` service with `TimeoutStartSec=0`. Renders are
    resumable, so an interruption costs one clip.
    
    Preflight refuses before spending any of that: node >= 22 (system node is 16 and
    fails), the dev server actually answering on :5173, every audio file present,
    the playset known to the 24-pack catalog.
    
    ## The join that had to stay explicit
    
    `clip_ideas.json` agrees with the release plan on neither axis. Its titles are
    shorter or French ("Sunshine", "La Revolution Sera Samplee") and its
    `setlist_pos` follows an EARLIER running order — its 4 is Take five Drops where
    the plan's performance 4 is Am i Doing it Right. So position is not a join and
    title equality only catches 4 of 6 live ideas. Fuzzy matching would be worse
    than nothing: it puts a look on the wrong track silently. A two-entry alias
    table takes it to 6 of 15; the other 9 report no playset and the tool refuses to
    guess, because which visual goes with which track is PLN's call.
    PLN (Algolia) authored Aug 17, 2026
    e794a441
render_release_videos.py 12.6 KB
EditWeb IDE
×

Replace render_release_videos.py

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.