What our pipeline, Songsterr, and the Moises app can each actually do with a track that has two or three guitars and only slight panning. Measured findings are labelled with their source. Proposals are labelled untested. Revised 2026-08-17 after Brandon corrected the Moises product and the panning claim.
No single tool does this job, and the separation stage is a cascade rather than a choice. Demucs strips the band, the Moises app splits the guitars by role, Songsterr transcribes the rhythm, ours fixes ownership and playability, and a hand-built tracker handles the fast lead. Each tool is the best available at exactly one stage and demonstrably wrong at another.
The panning in these mixes is slight and real. It carries usable information on one staff at 72.1% and none on the other at 53.5%, so it earns a vote rather than an assignment. Reverb and delay returns are panned separately from the dry signal, which puts a measurement bug inside every pan number here.
| Stage | Winner | Margin, measured | Source |
|---|---|---|---|
| Isolate guitar from the band | Demucs, ours | Free, local, and it feeds the next row | htdemucs_6s |
| Split 2-3 guitars by player | Moises, song by song | 1 of 3 songs passed the attribution control, gain +0.4128. One failed at -0.0076, one could not be aligned | Measured 2026-08-17 |
| Low register, below 130 Hz | No stem | Use the full mix. Guitar stem keeps 1.32% at 60-90 Hz | Sean song, 2026-08-13 |
| Count how many guitarists played | Ours | Pan bimodality 0.79 two-source vs 0.22-0.51 one-source | The Ship, 10 songs |
| Read slight panning safely | Open problem | 2.30 dB carries real information at 72.1% on one staff, 53.5% on the other | Kilgore Trout |
| Transcribe a rhythm part | Songsterr | 41.1% pitch support vs our 24.7%; 73.7% ownership vs our 66.6% | Kilgore Trout |
| Transcribe a fast, high lead solo | Nobody, unaided | Songsterr writes it an octave low. Ours: pyin and crepe agree on 58% | The Ship 03 Gene |
| Guitar ownership, which player | Ours | Restaffing moved staff agreement 74% → 98.5% | Kilgore Trout |
| Playability of the written tab | Ours | 1,111 unreachable chords → 0, keeping 94.4% of notes | Appleseed, 8 songs |
| Verifying any of the above | Ours, only with controls | 5 of 6 detectors built in one session were wrong | The Ship, 2026-08-15 |
Demucs separates by instrument, so two guitars come back as one file. Every Radiohead song in the library shows it: a single -guitar.wav per song folder. Six-stem separation collapses both players into one mono stem at that step.
Pan-based masking is the usual workaround and it is disqualified by the premise here. On 3 Gene it worked well, dropping the two-guitar correlation from 0.66 to 0.15 on the solo region, because those guitars were panned apart. A track with weak panning gives that method almost nothing to mask on.
Stage 1, Demucs, strips the band. Free, local, and it produces a guitar-only file that no longer has to be defended against drums, bass, and vocals.
Stage 2, the Moises app, splits the guitars by role. Given guitar-only input, its Lead and Rhythm model spends all of its capacity on the one distinction that matters here. Role is a completely different axis from position, which is why it survives a mix with no useful panning.
Proof on disk at /Volumes/T7 Shield/Moises_Stems/, six songs: BELIEVEYOUME 03, 04, 05, 08, 09 and Goldfrapp Clowns, carrying Rhythm Guitars, Solo Guitars and Other Guitar. Three older app exports (The Alligator, Endless Summer, Lazarus) carry a lead and rhythm pair.
| Product | Guitar role split | Cost | State here |
|---|---|---|---|
| Moises Free tier | No. Vocals, drums, bass only | $0, 5 separations a month | Cannot do this job |
| Moises Premium app | Yes. Lead and Rhythm, plus Acoustic and Electric | $3.99/mo, unlimited separation | This is the lane. Disk evidence says an account at this level was used on 2026-05-10 |
| Moises Pro app | Yes, plus Hi-Fi models and drum parts | $9.99/mo, 180 min per upload | Upgrade if the Hi-Fi model measures better |
| Moises developer API | Yes, via a wired workflow | Metered, roughly $3 a song | Reads 400 Insufficient credits since 2026-05-24 |
Correction to an earlier verdict on this page and in memory. The blocker previously recorded as "Moises credits are out" is an API blocker. It has no bearing on the app, where Premium runs unlimited separations for the price of two coffees a month. The 2026-05-25 ruling against paying for Moises is likewise about the API and is argued entirely from drum quality, where Moises measures equivalent to htdemucs_ft. Neither statement decides the guitar role split, and the free stack has no equivalent to compare against.
The naming on disk tells you which product made a file. Rhythm Guitars and Solo Guitars come from the API workflow modules. A plain lead and rhythm pair comes from the app.
Evidence that a Premium-capable account has already been used here. Three songs on the T7 drive carry app-style exports with a lead and a rhythm file: The Alligator, Endless Summer, and Lazarus, in the <song>-<stem>-<key>-<bpm>-<hz>.wav app naming, dated 2026-05-10. Lead and rhythm guitar separation is a Premium feature, so those files could not have come out of a Free account.
What that does not prove: whether the subscription is live today. Chrome on this machine is signed out of Moises (studio.moises.ai/auth/login as of 2026-08-17), so the current billing state is unverified from here. One sign-in settles it.
Demucs throws away the guitar's low register before Moises ever sees it. Measured on the Sean song from htdemucs_6s: the guitar stem retains 1.32% of the mix's energy at 60-90 Hz and 9.82% at 90-130 Hz. It is effectively high-passed, because the separator has to put the shared low band somewhere and sends it to bass.
In a cascade that loss is permanent and inherited by both output parts. A chord transcribed downstream comes back missing its lowest note, every time. A matcher validated at 87% root recovery on a synthetic render scored 29% on the real stem, and in every disagreement the detected set was the tab's chord with the bottom pitch class removed.
htdemucs_6s is also the weakest Demucs model on transients and the most prone to spectral smearing, so stage 2 inherits stage 1's artifacts as well.
Three ways to keep the cascade and pay less for it. All three are untested and each is a one-song experiment.
A. Feed Moises guitar plus bass summed rather than the guitar stem alone. The guitar's low notes ended up in the bass stem, so summing them back puts the evidence in front of Moises while still removing drums and vocals. Moises then decides what is guitar, which is the job it is trained for.
B. Feed a mix minus drums and vocals. Same idea with a wider net, removing only the two sources that are loudest and least guitar-like. Least lossy input, most work left for Moises.
C. Take the low register from the full mix in parallel and reconcile it against whatever the cascade returns. This is a standing hard gate and it works regardless of which input wins.
The control that settles A against B against the plain guitar stem: run all three on one song and measure 60-130 Hz energy retention plus the written-against-deliberately-wrong pitch separation on each output.
An earlier version of this page said the panning was not there to be read. That overstates it and the numbers below say so. A 2.30 dB margin is slight panning that genuinely exists. Read as a hard left and right split it produces chance. Read as one weak vote among several it is worth having. Appleseed Cast, Kilgore Trout, against a synthetic control rendered with the Lead hard left and the Rhythm hard right so the answer is known:
| Lead | Rhythm | |
|---|---|---|
| Cross-stem median margin, real audio | 2.30 dB | 2.96 dB |
| Ownership agreement, real audio | 53.5%, chance | 72.1% |
| Cross-stem margin, synthetic control | 21.8 dB | 19.3 dB |
| Ownership agreement, synthetic control | 88.0% | 83.7% |
The detector was fine. The panning present was roughly a tenth of what the method assumed. That distinction took 57 chain builds to establish, and the synthetic control settled it in one run.
Read the two real-audio rows carefully, because they do not say the same thing. Rhythm at 72.1% is well above chance and is usable evidence. Lead at 53.5% is a coin flip. One signal, two very different qualities on the two staves, from the same recording. Any rule that treats pan as uniformly good or uniformly worthless gets one of these two wrong.
The practical shape this argues for, and it is untested. Stop assigning every note from pan. Take only the notes whose pan margin clears a real threshold as seeds, then propagate ownership from those seeds by register and phrase continuity. A 2.30 dB median means about half the notes sit below any usable margin, which is exactly the arithmetic that drags an aggregate down to 53.5%. The skill carries a 3 dB doubling threshold as an initial cut, so the seed set exists and is simply not being used as a seed set.
This is a measurement bug hiding inside every pan number on this page. The current method reads the L/R energy balance over the 80 ms following each transient, and the ownership harmonic measurement reads 80 to 150 ms after the attack. A dry electric guitar attack is roughly 5 to 20 ms. Everything after that window is increasingly early reflections, delay repeats, and reverb, and those returns are routed and panned independently of the dry signal. A player panned slightly left with a wide stereo return can measure as centred, or as right of centre.
The corpus contains the proof, and we interpreted it differently at the time. A single guitar through a Haas delay produced an L/R correlation of 0.049, the lowest of anything measured, real tracks included. A ping-pong delay produced the highest onset independence at 59.1%. Both are one player. Both were logged as evidence that those metrics measure mix width. They also measure the wet return, which is the more actionable reading.
Three fixes, all untested, all cheap to try.
A. Move the pan window onto the dry attack. Measure roughly the first 10 to 20 ms rather than 80 ms, so the estimate is taken before the return arrives.
B. Make window drift a rejection criterion. Compute the pan estimate at 15 ms and again at 80 ms. Agreement means the note's position is a dry position and the note votes. Disagreement means the tail is panned differently from the source, so discard that note rather than letting it vote wrong. This turns Brandon's observation into a gate that can abort, which is the one thing that separates a real detector from a confident one here.
C. Detect the delay before counting attacks. A panned repeat is a copy of an earlier attack at a fixed lag. Autocorrelate the onset train per channel; a strong peak at a constant lag is a delay line, and those onsets are echoes rather than notes. Run this before the bimodality count, since a ping-pong repeat manufactures a second pan cluster out of one player.
Because the guitars are not hard panned, a per-channel transcription writes the same note into both parts. Notes appearing in both channels at the same instant and pitch:
| Song | Shared notes |
|---|---|
| A Tree For Trials | 56% |
| Blind Man's Arrow | 46% |
| Rooms and Gardens | 37% |
| On Reflection | 35% |
| Rest of the catalogue | 19% to 36% |
Every one of those was written into both staves. A chord built from one note the left guitarist played and one the right guitarist played is what forces the unplayable stretch and the skipped middle string. Per-note depanning on A Tree For Trials moved skip rates from 75% and 82% down to 38% and 33% with the pitches preserved.
The one metric that survived its controls: per-attack pan bimodality. L/R correlation, side energy, and onset independence were each beaten by a synthetic one-guitar case. A single guitar through a Haas delay produced the lowest correlation of anything measured, real tracks included, at 0.049. Bimodality reads 0.79 for two synthetic guitars at both wide and subtle pan, against 0.22 to 0.51 for real single-source stems.
State its limit every time: it counts pan positions rather than people. One guitarist overdubbing a second part to the same position scores as ONE. Pair it with cross-staff duplication. On The Ship that separated 11 Ambulance, 60% duplication and a real defect, from 08 JGBFTL, 0.7% and a correct overdub.
On Kilgore Trout, Songsterr's own file measured 73.7% Rhythm ownership, the best of any file tested, and its Rhythm pitch support beat our stem-derived source 41.1% against 24.7%. Our best register-based ownership reached 66.6% on both staves against measured ceilings of 84.0% and 77.5%. Being stem-derived is a statement about production. It carries no information about accuracy.
This is documented with numbers, and it has a specific shape. Songsterr returns a solo transcribed an octave low, or a lead track collapsed into the bottom of the neck. An empty track would be obvious. These two shapes pass for a finished tab under any check that counts notes.
| Song | Track | Songsterr live | From the isolated stem | Reading |
|---|---|---|---|---|
| 03 Gene | Lead | 563 notes, A2 to E5, frets 4-12 | 724 built, 581 shipped, up to B5, frets 4-19 | Solo written an octave low. Real part is up near the 12th position. |
| 04 Six Feet Under | Lead | 247 notes, frets 0 to 5 | 1,315 notes | Live lead is near-empty. Biggest available win on the album. |
| 05 Sleep Vs Death | Rhythm | 644 | 1,321 | Real upgrade |
| 02 Flake | Rhythm | 2,948 | 4,570 | Real upgrade |
| 08 JGBFTL | Both | 148 / 1,812 | 56 / 1,075 | Songsterr is better. Leave it alone. |
| 10 Trapped | Lead | 280 notes, frets 7-22, to A5 | 229 notes, frets 0-15 | Songsterr is better. Leave it alone. |
More notes is not automatically better, and 08 and 10 are the proof. Two of eight songs came back worse from our own pipeline. Any rule of the form "replace Songsterr's lead" would have damaged those two files. Measure per song before swapping.
The reason Songsterr's octave-low solo survived so long is that the alternatives measured worse. On The Ship "Gene", pyin and torchcrepe agreed on only 58% of the solo notes and disagreed on 42%, and both missed the F#5 Brandon corrected by ear. Hand-rolled pitch detection fails on fast, dense, distorted guitar because each note rings through the next attack and every tracker locks onto the ringing note.
The method that does work on a stem holding more than one guitar is a Viterbi melody tracker, taking the top N autocorrelation peaks per frame and running dynamic programming for the smoothest path that rewards salience and height, then position-based DP fretting over the note sequence rather than lowest-fret-per-note. That combination brought the average fret jump to about 1.5 and kept the hand in position.
Neither Songsterr nor Moises has anything at this stage. Songsterr's own Kilgore tab posted 60% and 53% skip rates. Our gate is five tiers deep with twelve mandatory controls and a regression suite.
| Repair | Before | After | Cost |
|---|---|---|---|
| Depan, A Tree For Trials | 75% / 82% skip | 38% / 33% | Pitches preserved |
| Unison dedupe, Flake of the Year | 449 wide-span beats | 0 | Zero notes removed, zero relocated |
| Restaffing, Kilgore Trout | 265 of 1,022 notes on the wrong staff | Staff agreement 74% → 98.5% | Refused ties 78 → 4 |
| Force-playable refret, 8 Appleseed songs | 1,111 unreachable chords, worst reach 22 frets | 0 unreachable, worst reach 4 | 94.4% of notes kept |
The unison-merge artifact is the single highest-yield repair. Across three staged Ship upgrades, 491 wide-span beats, of which 475 (97%) contain a duplicated pitch and 468 (95%) become playable by dropping the redundant string with no pitch change at all. Flake went from 0 of 926 chords carrying a duplicated pitch to 433 of 923 after the merge pass, which is the control proving the artifact came from the merge.
You asked for this part. Every item is a real failure that shipped or nearly shipped.
| What happened | The measurement that looked fine | Date |
|---|---|---|
| Four guitar staves invented from a two-guitar record | Shipped to six live Songsterr tabs before Brandon caught it | 2026-08-11 |
Processing order ran apply_setup after the swap | All 32 notes at pitch 38 disappeared silently. Every ergonomic score still looked fine | 2026-08-12 |
| Blanket refret used as a repair | 76% of Lead notes walked toward the nut. Same pitches, zero skips, every gate green, a performance nobody gave | 2026-08-12 |
| Doubled chord tones deleted to satisfy the span rule | Hand-skip went to 48% against 13% on the live tab | 2026-08-12 |
| Six audio detectors built in one session | Five were wrong. A rigid time decoy outscored the real tab. A mean-gap criterion printed PASSED at AUC 0.522 | 2026-08-15 |
| Nine pitch tests run on Demucs stems | All died on their controls. The Demucs split is saturated: +0.0 separation, 100% for written and deliberately wrong pitches alike. HPSS on the full mix gives +4.7 rising to +20.4 | 2026-08-16 |
| A DTW beat map beat its random control by 39.2 points | Still seven bars wrong. It made 1.3 s bars in a song whose bar is 2.958 s, deleting two bars the guitar was playing | 2026-08-16 |
| CapoFret 2 written against capo-0 stored MIDI | All 891 notes read two semitones sharp. Pitch support 24.7%, and the capo fix alone moved it to 63.4% | 2026-08-13 |
| Ties read beat by beat instead of per string | 245 phantom failures invented | 2026-08-12 |
| Multi-firing a paid action to be safe | Burned 3 Songsterr credits on one song | - |
| Moises API jobs run against a blank workflow shell | Returned SUCCEEDED with empty results in 0 ms. Credits spent, no stems produced, then reported as "lost forever" | 2026-05-24 |
The pattern behind almost all of it: a confident number computed off evidence that was thrown away earlier in the chain. The Demucs stem discards the low register and then reports the chord as wrong. The panning axis carries 2 dB and then reports ownership at chance. A saturated stem scores a real pitch and a deliberately wrong pitch identically and reports 100%. In each case the fix was the same, which is running a control that can fail before quoting the number.
Step 0. Stereo pass on the raw mix, before any separation. Costs nothing, no model weights. Detect panned delay repeats first, then compute per-attack pan bimodality on a dry-attack window to decide one guitar or two. Pair it with cross-staff duplication so an overdub to the same position is not miscounted as a single player.
Step 1. Demucs strips the band. htdemucs_6s, free and local, producing a guitar-only file. Keep the bass stem beside it, because the guitar's low notes are inside it.
Step 2. The Moises Premium app splits the guitars by role. Lead and Rhythm, from guitar-only input so the model spends everything on that one distinction. This is the step Demucs cannot perform, and it is the reason to spend the $3.99. Until the input experiment is run, feed it guitar plus bass summed rather than the guitar stem alone, so the low register is still in front of it. If a returned stem is stereo, an ffmpeg channelsplit recovers a further L and R pair from it.
Step 3. Take the low register from the full mix in parallel. Below 130 Hz the Demucs guitar stem holds 1.32% of the energy, so anything downstream of it is guessing about the bottom of every chord.
Step 4. Songsterr transcribes each role stem separately. The rhythm stem into Songsterr is the strongest single link in the whole chain. Prefer the AI-generated tab where both exist.
Step 5. Do not accept Songsterr's first pass on the solo. Check the lead track's top note and fret range. A lead capping near E5 with frets under 12, on audio that clearly has content an octave up, is the octave-low failure. Rebuild that part with the Viterbi tracker plus position DP fretting, then Brandon's ear decides.
Step 6. Our gate runs last. Use pan as a seed rather than as an assignment, discarding any note whose 15 ms and 80 ms pan estimates disagree. Restaff as a whole-part operation, dedupe the unison, repair only the beats that fail. Never a blanket refret. Verify the pitches on an HPSS harmonic separation of the full mix with a written-against-deliberately-wrong control.
Step 7. Ship through /songsterr-upload with preflight_import.py and the upload lease, so nothing waits on Brandon and no two sessions drive the same browser tab.
An earlier version of this page put Moises in the scorecard without checking whether anything else could do the job. Here is that check, run properly.
Audio that separates the two guitars by PLAYER rather than by register. That is the whole list. Everything else in the chain has a free route that is already measured and working.
| Route | Result | How we know |
|---|---|---|
Demucs htdemucs_6s | Structurally incapable. One mono guitar.wav | Read off the stem library on disk |
UVR / audio-separator | No lead-versus-rhythm model exists. Same Demucs plus MDX and Roformer families | Model catalogue, 2026 survey |
| MVSEP, 30+ models | Has a dedicated guitar model. It is guitar against everything else, a binary split. No multi-part guitar output anywhere in the catalogue | MVSEP's own algorithms page |
| Panning, L/R channel split | Chance. 53.5% on Lead at a 2.30 dB margin, against 88.0% for the same detector on a synthetic control | Kilgore Trout, 2026-08-13 |
Our own album_guitar_split.py, harmonic salience plus NMF component clustering | Failed its control. Lead-staff notes +0.0952, Rhythm-staff notes -0.1699, separation +0.2651. The SAME notes at a shifted time separated by +0.2766, higher. It sorts by register, which the tab already encodes. ownership_audit.py REFUSES to emit per-note verdicts | Measured 2026-08-16, kept as the regression fixture ownership-refusal |
The regression fixture states it plainly: "no ownership measurement on this album separates the two guitars, the one panning cue measured at chance." Three of those routes were measured and failed. Two cannot do it by construction.
The plugin world is a genuinely different approach, so it earned its own pass. Read from this Mac's actual plug-in folders rather than assumed.
| Plugin | Installed here | Verdict on the one job |
|---|---|---|
| zplane PEEL-STEMS 1.0.2, AU and VST3 | Yes, since 2024-08-19 | Dead. Its stem labels are Vocals, Drums, Bass, Other. No guitar output at all, so it is weaker than Demucs here |
| Waves ARA shells 16.7 and 16.8 | Yes | Dead. ARA is the host protocol. The Waves ARA plugins are vocal tools |
| Celemony Melodyne (DNA polyphonic) | No | Ruled out by the vendor's own manual. DNA separates by pitch, never by instrument, so two guitars at one pitch stay one note. See the comparison below |
| Hit'n'Mix RipX | No | The one worth trialling. Per-note editing plus its own instrument-separation stage. 21-day free trial |
| Steinberg SpectraLayers | No | Manual spectral painting, human-guided rather than model-guided |
| iZotope RX Music Rebalance | No | Four-source rebalance. No guitar roles |
What the plugin world offers that the model world does not: human-guided, note-level separation. Melodyne DNA and RipX hand back individual note objects you can audition and reassign by ear, rather than a stem you have to re-transcribe. Our problem is note-level ownership, so that shape fits the problem better than any stem splitter does.
Celemony documents the kill themselves. From the Melodyne 5 manual: "DNA is intended for polyphonic instruments recorded singly, as it separates notes by pitch, not by instrument," and "if two or more instruments play a note of the same pitch on the same beat, one note only, representing the combined sound of the instruments in question, is available for editing (no separation of instruments)."
That is the same failure our own album_guitar_split.py had, which sorted by register rather than by player. And it applies to exactly the notes that matter here: the cross-channel duplicates run 19% to 56% of the transcription, which is the unison case Melodyne says it cannot split. Buying Melodyne to solve two-guitar ownership buys a tool the vendor says does not do it.
| Melodyne 5 | RipX | |
|---|---|---|
| Entry price for the feature | $399 (Editor). Essential $99 and Assistant $249 have no DNA at all. Studio $699 | £99 RipX DAW, £198 RipX DAW PRO. Perpetual |
| Free trial | 30 days, full Studio, once per computer | 21 days |
| Two instruments at the same pitch | Cannot separate. Vendor-documented | Same architectural limit expected. Not vendor-confirmed, so this is inference |
| Instrument separation stage | None by design. Melodyne splits notes, never sources | Yes. Its own unmix and instrument-separation stage on top of note editing |
| Note data out toward our pipeline | Note edits, MIDI export | Rip Audio treats audio and MIDI as one object |
| Ableton Live 11 integration | No ARA. Ableton has never implemented it, so this is the transfer workflow | Standalone DAW, so ARA is moot |
| This Mac (i5-7500, 4 cores, 40 GB, macOS 13.7.8) | Supported | Supported. Meets the recommended 4-core and 16 GB bar |
Verdict: RipX, and the correct spend today is $0. It is half the price, it carries an instrument-separation stage that Melodyne lacks entirely, its note data moves toward MIDI which is what our pipeline eats, and it has a 21-day trial. Melodyne's own manual rules it out on our worst case before any money changes hands.
Both trials are free, so no purchase decision is needed to answer the question. Run the same shifted-time control on a RipX split that killed our own splitter. A tool that cannot beat a time-shifted decoy is sorting by register, whatever it costs.
Seven routes checked in total. Four are measured or structurally dead. Two credible plugin routes are not installed. Moises is the one route that is both capable and already available, which is what makes it the next test rather than the answer.
This was the open question on this page for one day. It is now run, on three songs, with both control poles.
The discriminator. For each frequency bin, track the share of energy going to one stem across time. A frequency filter sets the share by frequency alone, so at a fixed frequency it never moves and its time-variance is zero. Real sources trade the same frequency back and forth, so the share moves.
The controls. Negative pole is the two guitar stems summed and re-split with a real crossover, which is a filter by construction. Positive pole is that song's own bass stem against its vocal stem, two genuinely unrelated sources.
| Song | Negative pole, a crossover | Moises Solo vs Rhythm | Positive pole, bass vs vocals | Where Moises sits |
|---|---|---|---|---|
| 09 Broken Satellites | 0.0000 | 0.3233 | 0.1713 | 188.7% |
| 05 My Mirror Hates Me | 0.0000 | 0.1283 | 0.1394 | 92.0% |
| 08 Not Too Much | 0.0000 | 0.2267 | 0.1325 | 171.0% |
The negative control read exactly 0.0000 on all three songs, which is what licenses the rest of the table: the measure detects a filter when one is there. Moises never comes close to that pole. On two of three songs it exceeds the bass-against-vocals pole. That is the expected signature of two players sharing a register, where the share at any one frequency swings as each takes a turn.
Corroborated by a second, independent signal. The band-share curve: Moises gives the Solo stem between 0.02 and 0.30 of the energy in every one of twelve log-spaced bands, with no monotonic march. The crossover control marches 0.998 down to 0.000 across the same bands. Two different measurements agreeing that this is not a frequency split.
State the limit, because this proves less than it looks like. The test rules OUT the register-filter hypothesis. It does not prove Moises attributes notes to the correct player. That needs a labelled two-staff reference, which is the next section.
Scored against real Songsterr notation for three Shiner songs, using the same design as ownership_audit.py: each written note gets (E_solo - E_rhythm) / (E_solo + E_rhythm) at its own pitch and its own attack, and Lead-staff notes should sit closer to the Solo stem than Rhythm-staff notes do. The notation and the stems are independent, since Songsterr never saw the stems and Moises never saw the tab.
Two gates run before any number is reported. Alignment comes from the drum staff, which exists in both the tab and the kit stems with neither derived from the other, and the winning offset must stand at least three sigma above the whole offset field. Then the shifted-time control re-scores the same notes at five wrong times. A separation that survives being moved to the wrong moments is sorting by register or timbre, which the tab already encodes.
| Song | Alignment | Lead notes | Rhythm notes | Real separation | Shifted decoy | Gain | Verdict |
|---|---|---|---|---|---|---|---|
| 08 Not Too Much | z +3.45, +0.400s | -0.1243, n=811 | -0.7521, n=3333 | +0.6278 | +0.2150 | +0.4128 | PASSED |
| 09 Broken Satellites | z +3.82, +0.420s | -0.6903, n=924 | -0.8368, n=2671 | +0.1465 | +0.1541 | -0.0076 | REFUSED |
| 05 My Mirror Hates Me | z +2.29, failed | 342 written | 1270 written | not reported | not reported | - | UNDECIDABLE |
Correction to what this page said earlier today. The filter result was read as promising and that was too generous. On Broken Satellites the shifted decoy scored HIGHER than the real notes, +0.1541 against +0.1465. That is the identical shape that killed our own album_guitar_split.py, where the decoy scored +0.2766 against +0.2651. On that song the Moises split carries no information about which guitar played a note.
The obvious confound was checked and does not explain it. The Solo stem is not near-empty there: it holds 20.6% of the guitar energy and is active in 61.8% of frames. There was signal to work with and the test still failed.
What DID pass, and it passed hard. On 08 Not Too Much the real separation is +0.6278 against a +0.2150 decoy, a gain of +0.4128. That is not a marginal effect. On that song the Moises split genuinely knows which guitar played which note.
The usable conclusion: run the control per song, never once for the album. One song passed decisively, one failed outright, and one could not be aligned well enough to ask. Moises is a tool that sometimes carries ownership and sometimes does not, so the control belongs in the pipeline as a gate rather than as a one-time qualification.
Energy share does not predict which way it goes on this sample. Broken Satellites sits at 0.21 solo share and failed, Not Too Much at 0.32 and passed, My Mirror at 0.43 and could not be tested. Two data points support no rule, so that is an observation rather than a finding.
The third song refused at the alignment stage rather than the ownership stage, which is the gate doing its job. A per-note table built on a 2.29-sigma alignment would have looked exactly as confident as the other two and meant nothing.
| Job | Free tool | Measured result |
|---|---|---|
| Count the guitarists | Pan bimodality on the raw mix | 0.79 two-source against 0.22-0.51 one-source, validated with synthetic positives |
| Isolate guitar from the band | Demucs htdemucs_6s | Works, at the cost of the low register |
| Transcribe notes | Songsterr | 41.1% pitch support against our 24.7% |
| Recover the low register | The full mix | Stem holds 1.32% at 60-90 Hz, the mix holds all of it |
| Verify a tab's pitches | HPSS harmonic of the full mix | +4.7 at x2 rising to +20.4 at x12, 120 of 120 seeds positive |
| Fix playability | impossible_gate.py plus targeted repair | Flake 449 wide spans to 0 with zero notes removed. Appleseed 1,111 unreachable chords to 0, keeping 94.4% |
| Decide whether a doubled note is real | Notation-side continuity audit | 34 duplicated Lead notes examined, zero candidates for removal |
Everything on this page that concerns the cascade is an argument rather than a measurement. Four tests turn it into evidence, and every one of them runs on material that is on the T7 drive now.
| # | Test | What it settles | Cost |
|---|---|---|---|
| 1 | Moises Solo Guitars stem into Songsterr | Whether the octave-low solo failure is caused by the lead being buried under a rhythm part in the same stem. If it is, better input replaces the whole hand-built tracker | One transcription, zero credits |
| 2 | Three Moises inputs on one song: guitar stem alone, guitar plus bass summed, mix minus drums and vocals | How much of the 60-130 Hz loss the cascade has to accept, and which input keeps the most of it | Three separations on a Premium sub |
| 3 | Pan estimate at 15 ms against the same estimate at 80 ms, per note | How many notes have wet-contaminated pan, which is the size of the reverb-trail problem | Pure numpy, no model |
| 4 | Seeded ownership: assign only above the 3 dB margin, propagate the rest by register and phrase | Whether the 53.5% Lead figure is a bad signal or a badly used one | Rerun of an existing script |
Test 3 is the one to run first, because it costs nothing, needs no subscription, and its result changes how every other pan number on this page should be read. It is also the only one of the four that can invalidate work we have shipped.
For a two or three guitar track with slight panning, right now: a good rhythm tab and a contested lead. The rhythm side is production-ready through Demucs into Moises Premium into Songsterr into our gate. The lead side depends on a hand-built tracker and Brandon's ear on every fast passage, and that is where the whole gap is. Test 1 is the one that could close it.