Skip to content

Grow a loop into a track: continue a pad/freeze into a full SA3 track #57

Description

@brxs

Depends on #54 (init-audio + inpaint-range).

Problem

There is a hard gap between SA3's two roles today: pads are ≤32 s small-DiT loops dropped into slots (M18, ADR-0012), and tracks are minutes-long medium-DiT compositions a deck plays back (M19, ADR-0013) — but you cannot promote one to the other. A loop that is working in the booth cannot become the next track; a captured freeze of a great moment cannot be extended into something you mix into. SA3 can bridge this: with --init-audio (trimmed/zero-padded to --seconds) plus --inpaint-range over the silent tail, the medium DiT can continue a seed clip into a full-length track.

Proposed approach

A "grow into a track" action on a loop slot / freeze / library sample: take its PCM (read_loop_slot / capture_sample, src-tauri/src/commands.rs:565,758), request a medium-DiT render seeded by it (init-audio padded to the target length, inpaint the region beyond the seed so the model composes a continuation that opens from the seed), and file the result into the songs/track flow (ADR-0013) so it loads on a playback deck with beatgrid + cues. A prompt steers where the continuation goes ("build this into a rolling techno track"). Whether this rides the /api/render Magenta-worker path or a track-kind /api/generate is settled in #54's render decision.

Acceptance criteria

  • From a loop/freeze/sample, a user composes a full-length track whose opening audibly continues the seed (not an unrelated track), with a prompt steering the rest.
  • The result enters the track/songs library (ADR-0013) and loads on a playback deck with the normal beatgrid/cue treatment.
  • Length respects the medium-DiT ceiling (TRACK_MAX_SECONDS, sa3.py:26); the long render is deadline-scaled (render_timeout_for) and degrades honestly on failure (ADR-0012/0013).
  • Strings via i18n; house style; npx tsc -p tsconfig.app.json --noEmit clean.

Scope & non-goals

In scope: seed-to-track continuation and filing into the track flow. Non-goals: the plumbing (#54); seamless infinite outpaint chaining (the autopilot issue); transitions between two decks (the transitions issue).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions