Skip to content

fix: read the full mix from the reserved full stem, not original_audio#39

Merged
topkoa merged 2 commits into
mainfrom
fix/full-mix-is-a-stem
Jul 13, 2026
Merged

fix: read the full mix from the reserved full stem, not original_audio#39
topkoa merged 2 commits into
mainfrom
fix/full-mix-is-a-stem

Conversation

@byrongamatos

@byrongamatos byrongamatos commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Part of got-feedBack/feedBack#933. Do not merge before got-feedBack/feedBack#933 and got-feedBack/feedpak-spec#53 — though this is safe to merge in any order in practice, because it falls back to the old field names.

What

The pristine mixdown this plugin plays while every fader sits at unity now arrives on song_info as full_mix_url / has_full_mix. It used to arrive as original_audio_url / has_original_audio — named after a manifest key core invented (feedback#583) and the feedpak spec never had.

The mixdown is a stem. feedpak 1.15.0 RESERVES the id full for it (got-feedBack/feedpak-spec#53), and core now reads it from there.

Why this plugin stays correct

Core lifts full out of info.stems before sending the frame. That is what makes retaining the mixdown safe, and this plugin is the reason it matters: full already contains every instrument, so if it ever appeared among the tracks we sum, unity playback would double the whole song — and muting "guitar" would still leave guitar audible inside the mix. (That exact hazard is why the packer originally put the mixdown outside stems and invented a key to point at it. The bug was in the reader; core fixes the reader.)

Compatibility

Reads the new fields and falls back to the deprecated aliases, so the plugin still works against a core that predates the rename — a real case, since a user can have a newer bundled plugin than server. The fallback goes when the aliases do (got-feedBack/feedBack#945).

Verification

  • npm test — 47/47 pass.
  • Local Codex review of the branch diff: NO ISSUES.
  • Not yet exercised on-device: needs a desktop build to hear the unity↔stems crossover against a migrated pack.

Summary by CodeRabbit

  • New Features

    • Added support for identifying and loading the dedicated full-mix stem using the updated song metadata fields.
    • Maintained compatibility with legacy full-mix metadata during the transition.
  • Bug Fixes

    • Improved full-mix handling to prevent duplicate audio during playback and ensure muting behaves correctly.
    • Updated full-mix validation warnings for clearer diagnostics.
  • Documentation

    • Documented the dedicated full-mix stem and related metadata changes.
  • Chores

    • Bumped the plugin version to 0.8.2.

…udio` (feedback#933)

The pristine mixdown we play at unity used to arrive on song_info as
`original_audio_url` — named after a manifest key core invented and the feedpak
spec never had. The mixdown is a stem: feedpak 1.15.0 RESERVES the id `full` for
it, and core now surfaces it as `full_mix_url` / `has_full_mix`.

Core still lifts it OUT of `info.stems` before sending, which is what keeps this
plugin correct: `full` already contains every instrument, so if it ever appeared
among the tracks we sum, unity playback would double the whole song and muting
"guitar" would leave guitar audible inside the mix.

Reads the new fields, falling back to the deprecated aliases so the plugin still
works against a core that predates the rename (a user can have a newer bundled
plugin than server). The fallback goes when the aliases do (feedback#945).
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The plugin now detects full mixes through full_mix_url and has_full_mix, while retaining deprecated alias fallback. Related comments, diagnostics, changelog documentation, and the manifest version were updated.

Changes

Full mix metadata compatibility

Layer / File(s) Summary
Full mix detection and loading
src/main.js
onSongReady combines current and legacy metadata fields to determine full mix availability and configure worklet loading; related comments and warnings use the new terminology.
Full mix diagnostics and release support
src/streaming.js, CHANGELOG.md, plugin.json
iOS streaming warnings, changelog details, and the plugin version are updated for the full mix behavior.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: switching full-mix handling from original_audio to the reserved full stem.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/full-mix-is-a-stem

Warning

Tools execution failed with the following error:

Failed to run tools: 13 INTERNAL: Received RST_STREAM with code 2 (Internal server error)


Comment @coderabbitai help to get the list of available commands.

@topkoa topkoa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

Ship the full-mix-is-a-stem change (read full_mix_url with an original_audio_url
fallback) under a bumped plugin version. Compatible internal change, so patch.
The CHANGELOG [Unreleased] entry is left unstamped — it accumulates other
merged-but-unreleased changes and is stamped at release time.

Signed-off-by: Kris Anderson <topkoa@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/main.js (1)

806-819: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add regression coverage for both loading paths.

The new URL feeds setupStreaming for WAV and loadFullMix for decode. Add current-only, legacy-only, absent-URL/false-flag, and non-worklet cases to protect this compatibility branch.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/main.js` around lines 806 - 819, Add regression tests covering both
full-mix loading paths: verify full_mix_url is used by setupStreaming for WAV
and by loadFullMix for decode, including current-only, legacy-only,
absent-URL/false-flag, and non-worklet cases. Anchor the tests to the
hasFullMix/fullMixUrl/fullUrl compatibility logic and confirm invalid or
disabled configurations do not load a full mix.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/main.js`:
- Around line 806-819: Add regression tests covering both full-mix loading
paths: verify full_mix_url is used by setupStreaming for WAV and by loadFullMix
for decode, including current-only, legacy-only, absent-URL/false-flag, and
non-worklet cases. Anchor the tests to the hasFullMix/fullMixUrl/fullUrl
compatibility logic and confirm invalid or disabled configurations do not load a
full mix.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ecead97-532f-486f-8d6c-a9b70f250080

📥 Commits

Reviewing files that changed from the base of the PR and between 36293d6 and 7515cb5.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • plugin.json
  • src/main.js
  • src/streaming.js

@topkoa
topkoa merged commit 1a1fc6e into main Jul 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants