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
  • tools
  • foundry
  • engine
  • separate.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(foundry): merge-of-stems multimodel — Roformer vocals + demucs rest (#9) · 14e69fe5
    PLN's "merge of stems": the best vocal isolation cascaded into the best 4-way split.
    There is no 4-stem Roformer, so MultiModelBackend orchestrates a cascade —
      1. Roformer (audio-separator, py3.12 venv) isolates vocals + instrumental;
      2. demucs runs on the INSTRUMENTAL (vocals already gone → cleaner) for drums/bass/other;
      3. merge = Roformer vocals ⊕ demucs drums/bass/other in the standard 4-stem contract.
    
    Refactored separate.py for composite backends: a backend declares what it `produces`
    and (for composites) a `run_composite` hook; the subprocess runner is factored into
    _run_cmd so the cascade can drive several sub-separations. RoformerBackend is now wired
    (was a stub): audio-separator CLI, 2-stem (vocals/instrumental), normalize() globs the
    "(Vocals)"/"(Instrumental)" output names. The default normalizer maps by produces[].
    
    Verified end to end on the Loituma source: merge → vocals (Roformer) + drums/bass/other
    (demucs-on-instrumental), 4 clean PCM_16/44.1k stems. All three backends report
    available on this box. GUI renders whatever stems a backend emits (demucs/merge 4,
    roformer 2 incl. instrumental), canonical roles first. 53 tests (added: registry has the
    three engines, roformer produces 2 + builds its cmd, merge is composite/4-stem).
    
    Keeps the 2-stem Roformer door open as its own backend (vocal isolation), and the merge
    as the flagship. Foundry's engine registry now showcases the pluggable design PLN wants
    to grow into a product/API/service.
    PLN (Algolia) authored Jun 25, 2026
    14e69fe5
separate.py 10.6 KB
EditWeb IDE
×

Replace separate.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.