Two guitar split

Which songs carry a recoverable second guitarist, measured from the stereo guitar stem. 26 songs, 2026-09-08.

20
Separable
3
Mono
2
Unison
1
Unusable

What the number means

Margin is the whole verdict. It is the share of one channel's attacks that land on an attack in the other channel, minus the identical test with that channel pushed +5 seconds. A raw coverage percentage with no control is what produced the earlier “not separable” reading on a song that separates at 79.6.

Six of these cannot be fixed by any method or any purchase. Three are mono, with the two channels correlating 0.85 to 0.90, so the second part is not in the file. Two are unison, both channels playing the same attacks. One fails its own control. No separator, paid or free, recovers what was never recorded apart.

The corpus

SongAlbumVerdictMargin Control %L/R corrSolo attacksReading
05-With-Twilight-as-My-GuideOctahedronSEPARABLE85.43.30.05597979 attacks played by only one channel
02-Since-We’ve-Been-WrongOctahedronSEPARABLE84.84.70.45285858 attacks played by only one channel
02 Fishing the SkyMare VitalisSEPARABLE82.86.40.0337269269 attacks played by only one channel
09 Kilgore TroutMare VitalisSEPARABLE79.612.10.0054316316 attacks played by only one channel
08. North Star OrdinationIllumination RitualSEPARABLE76.112.60.7199136136 attacks played by only one channel
02. Great Lake DerelictIllumination RitualSEPARABLE75.414.00.79367979 attacks played by only one channel
01 The Immortal Soul of Mundo CaniMare VitalisSEPARABLE70.82.10.0124102102 attacks played by only one channel
06 SecretMare VitalisSEPARABLE61.120.90.1441129129 attacks played by only one channel
07. Barrier Islands (Do We Remain)Illumination RitualSEPARABLE60.95.00.543105105 attacks played by only one channel
07 ...And Nothing LessMare VitalisSEPARABLE60.418.3-0.0228181181 attacks played by only one channel
08 PoseidonMare VitalisSEPARABLE58.527.90.50897979 attacks played by only one channel
03 Forever Longing the Golden SunsetsMare VitalisSEPARABLE54.525.50.0563119119 attacks played by only one channel
06-CotopaxiOctahedronSEPARABLE49.221.8-0.0898229229 attacks played by only one channel
10 StormsMare VitalisSEPARABLE48.725.20.2355197197 attacks played by only one channel
04 Mare MortisMare VitalisSEPARABLE46.636.10.1491273273 attacks played by only one channel
05 Santa MariaMare VitalisSEPARABLE45.941.20.13038888 attacks played by only one channel
09-LuciformsOctahedronSEPARABLE43.917.2-0.0786969 attacks played by only one channel
07-Desperate-GravesOctahedronSEPARABLE39.020.30.172195195 attacks played by only one channel
03-TeflonOctahedronSEPARABLE36.831.3-0.0014228228 attacks played by only one channel
04-Halo-of-NembutalsOctahedronSEPARABLE36.331.70.1865124124 attacks played by only one channel
08-CopernicusOctahedronUNISON84.39.00.6708-both channels play the same attacks; no second part to lift
01-CreditsOctahedronUNISON54.430.00.8052-both channels play the same attacks; no second part to lift
03. Simple FormsIllumination RitualUNUSABLE22.268.10.6115-margin 22.2 is too small; the control nearly matches
01. Adriatic to Black SeaIllumination RitualMONO81.05.50.8514-L and R correlate 0.8514, effectively one channel
06. Branches on the Arrow Peak RevelationIllumination RitualMONO70.623.90.9023-L and R correlate 0.9023, effectively one channel
05. 30 Degrees 3 AmIllumination RitualMONO68.127.00.8956-L and R correlate 0.8956, effectively one channel

Why the existing tabs cannot be split note by note

The obvious move is to take the tab we already have and hand each written note to whichever channel played it. That was tried and it does not survive its own control. Every position on Kilgore Trout's 449-position rhythm staff was scored, with the offset searched over ±3 seconds at 10 ms steps:

Window (ms)Best offset (s)Matched % Shifted control %Margin
30-2.2629.622.76.9
50-2.2843.936.17.8
80-2.8961.057.53.5
120-2.3975.971.04.9
200-2.2590.086.63.4

Loosening the window raises the real score and the control together. A 90% match at 200 ms is density, not alignment. There is no tolerance at which this tab's attack times can say who played what, so the tool refuses instead of writing a confident two-staff file out of noise.

The route that works is to split the audio, not the tab. Both channels share one clock, which is exactly what the tab lacks. Write L and R as separate mono files, transcribe each on its own, then put the two results on two staves. Two transcriptions of two channels are two guitar parts by construction, with no ownership call left to get wrong.
python3 ~/.claude/skills/two-guitar-split/split_stem_channels.py \
    --stem "<song>/guitar.mp3" --out-dir <work>/split

The gate runs first and refuses anything that is not SEPARABLE. Verified both ways: Kilgore Trout writes its two channels, Adriatic to Black Sea is refused as mono.

First song through the whole chain

The Immortal Soul of Mundo Cani, margin 70.8. Stem split, each channel transcribed on its own, both written onto two staves against the existing tab as the template.

StageLeft / Gtr 1Right / Gtr 2Reading
Separability gatemargin 70.8102 attacks on one channel only
Transcribed notes610691basic_pitch, ONNX, per channel
Attacks unique to that channel358446the two parts are genuinely different
Pitch-class agreement where they coincide52.0% vs 25.4% controlmargin +26.6, two correlated parts
Written to staff5296330 unvoiceable, 18 and 4 out of range dropped
Playability gateREVIEW, 0 hard failures0 collisions, 0 tie breaks, 0 wide spans, 0 octave artifacts, 0 rapid shifts
Drums and Vocals35222preserved exactly from the template

For scale, the inherited AI tab carried 128 and 237 guitar note positions. This one carries 529 and 633, and every one of them came from the recording.

Four things this does not yet establish. The pitches are a detector's reading of each channel, so this is detector output and not verified pitch accuracy. The grid is 16ths with no ties or note lengths, so it is rhythmically blunt. The notation runs 123.4 s against the recording's 128.4 s, so late notes clamp into the last bar. Hand-skip sits at 27% and 31%, against 9% on the hand-repaired Kilgore staff. Nothing has been uploaded.

The audio accuracy audit, and what it can actually judge

Playability is the second question. The first is whether the notes are right, so the artifact went through audio_accuracy_audit.py and through a per-staff channel-ownership measure with wrong-song stems as controls.

MeasureResultReading
DTW map26.7% vs 8.1% random, gain +18.6map ACCEPTED
Attack recall24.4% (284 of 1162)low
Attack precision91.7% (122 of 133 onsets)1162 attacks against 133 onsets is 8.7 to 1, so this is density
Timing, pre-warpmedian 104.8 ms, p90 220.6 mspost-warp median is 0.0 ms and circular
Pitch agreement50.9% vs 47.0% controlNO DISCRIMINATING POWER, the control nearly matches
Ownership, canonical tool+0.2651 vs +0.2766INVALID: that tool's corpus is Shiner's The Ship, so these are another song's numbers

Channel ownership, measured directly, against a human tab of the same song

Chance-normalised, because the wrong-stem controls differ wildly in onset density (1012 against this song's 96). The normalisation is validated by the +5 s shift control landing at −0.1 and +0.3 gain, which is zero.

NumberThis artifactHuman Songsterr tab, same song
Gtr1 separation over best wrong stem+0.4+0.4
Gtr2 separation over best wrong stem−3.2−16.3
Gtr1 own channel minus other channel−2.8−5.4
Gtr2 own channel minus other channel+2.0−1.2
The measure has no power on this song, so the audio verdict is UNDETERMINED rather than refuted. The human tab fails the same controls as badly or worse, and on one staff its +5 s shifted control scored +12.0 while its real channel scored −1.1. An instrument that cannot tell a human tab of this song from a wrong recording cannot judge this one either. What can be said is narrow and true: on every one of the four numbers this artifact matches or beats the human tab of the same song.

Pitch evidence that alignment cannot break

Every alignment-based pitch measure on this catalogue fails its own control, because a tab whose attacks sit 105 ms off cannot be scored note against note. Pitch-CLASS content needs no alignment at all. What a staff plays across the whole song either matches what that channel plays across the whole song, or it does not. Reported as cosine similarity between the staff's pitch-class histogram and the channel's mean chroma.

Scored againstGtr 1 cosineGtr 2 cosine
its OWN channel0.91390.9047
WRONG: Kilgore Trout (same album, same tuning)0.65140.6491
WRONG: The Mars Volta, Octahedron0.69040.6549
WRONG: Simple Forms0.56150.6197
WRONG: Branches on the Arrow Peak0.45250.4608
SEPARATION over best wrong stem+0.2235+0.2498

The same measure on the human Songsterr tab of this song

NumberThis artifactHuman tab
Gtr1 cosine to its own channel0.91390.6703
Gtr2 cosine to its own channel0.90470.8009
Gtr1 separation over best wrong stem+0.2235+0.2130
Gtr2 separation over best wrong stem+0.2498+0.0416
Pitch content is confirmed, and it beats the human tab. The measure has power, because it separates on the human tab too. Both staves match this recording at 0.90 and above while every wrong stem sits between 0.45 and 0.69, and that holds against a same-band, same-album, same-tuning control. The human tab of the same song reaches 0.67 and 0.80.
What it still does not settle: which channel. The two channels have nearly identical pitch-class content, 0.9139 against 0.8957 on one staff and 0.9047 against 0.9313 on the other. The two guitarists play the same harmony and differ in their attacks, so a chroma measure cannot assign a staff to a side. Timing is likewise not established: attack recall 24.4%, pre-warp median 104.8 ms. No ties or note lengths are written, so duration agreement has nothing to compare.

Provenance

Zero note ids and zero beat ids in either guitar staff exist in the Songsterr AI tab. Of 529 and 633 written events, 25 and 13 happen to coincide with the AI tab on bar, position, fret, string and pitch, which is 4.7% and 2.1%, and they share no elements. No note content is inherited.

Timing, measured against the human tab

Timing was the open question, so it was diagnosed rather than restated. Every written attack was paired with the nearest onset in the stem, and the residual regressed against position to separate a wrong tempo from a coarse grid.

BuildMedian residualp90PairedNotation spanDrift R²
This artifact, 16th grid118.9 ms289.0 ms244 / 461123.2 s0.002
32nd grid, REJECTED112.3 ms289.0 ms374 / 675123.3 s0.012
Human Songsterr tab, same song95.1 ms262.1 ms100 / 197116.6 s0.001

It is scatter, not drift. The slope is +0.0002 s per second at R² 0.002, and a full 5% tempo search buys 6 ms. So the tempo is right and no re-tempo can fix this.

My grid hypothesis was wrong. At 70 bpm a 16th slot is 214 ms and the residual was half of one, which is the quantisation signature. Re-writing at a 32nd grid moved it only 118.9 to 112.3 ms, and it cost 17 rapid-shift violations plus one severe jump where the 16th build had zero. That is 6.6 ms bought with a playability regression, so the 32nd build is rejected and kept beside the artifact rather than deleted.

The human tab sets the floor at 95.1 ms. Only 131 onsets are detectable across 129 s of this stem, roughly one a second, so the reference itself is sparse and no tab can score tightly against it. A published, playable, human-made tab of this song sits at 95.1 ms on the identical measure. This artifact is 17 ms above that floor, and it tracks the record's length better: 4.65% short against the human tab's 9.87%.

Ties and note lengths, and the axis they unlocked

The first build wrote every note as one 16th slot, so it asserted no duration at all and duration agreement had nothing to compare. The writer now carries the audio-derived length of each note and ties it across the note values needed to express it. The result is the promoted artifact, s6285808-TWOGTR-WITH-TIES.gp, hash a5a4847130f540f9cf54ac782f79b826.

MeasureNo tiesWith ties
Ties written084
Attacks11621162
DTW map gain+18.6+21.2
Attack recall24.4%30.8%
Attack precision91.7% (122/133)98.5% (131/133)
Chroma separation, Gtr1 / Gtr2+0.2235 / +0.2498+0.2311 / +0.2536
Duration error vs shuffled control76 vs 76 ms, gain +073 vs 117 and 68 vs 88 ms, gain +44 / +20
Notes within 25% of the source length35.3% / 38.0%43.5% / 46.8%
Hard failures00
The duration control validates itself. On the no-ties build every note claims the same length, and the measure correctly reports a gain of exactly zero over its shuffled control. On the ties build the same measure reports +44 ms and +20 ms, so each note is matching its own source length rather than the duration distribution merely being similar.

Every axis the validator scores

AxisGtr 1Gtr 2
Capo, and capo vs Midi mismatch0 / 00 / 0
Ties written5628
Tie collision / inconsistent / unmatched / gap / dropped0 / 0 / 0 / 0 / 00 / 0 / 0 / 0 / 0
Same-string collisions00
Worst hand span44
Rapid fret position changes00
Open strings, and share141 (24.1%)194 (29.3%)
Interior string gaps, hand-skip share46 (27.4%)51 (30.9%)
Octave shapes, recurring vs isolated17: 13 / 422: 22 / 0
Repeated voicing inconsistency00
Hard failures00
The canonical ownership line is scoring a different band. audio_accuracy_audit.py reports OWNERSHIP REFUSED at +0.2651 against +0.2766, and its own JSON names the file it scored: 10 Trapped in Wonderland.gp, a Shiner song, with 152 and 689 notes that belong to neither staff here. Its corpus holds no Appleseed material, so that line has never measured any tab on this record. Channel ownership stays unestablished, and it is the tool that is missing, not the evidence.

Chord contiguity and pseudo-fingerpicking, answered with the audio

The validator raises two findings that ask a question rather than assert a fault. INTERIOR_GAP is the chord-contiguity check and says "N attacked notes with M unexplained interior string(s); needs positive audio evidence". OWNERSHIP_SUSPECT is the pseudo-fingerpicking check and says "outer-string pseudo-chord across strings A and B; test whether one note belongs to the other guitar". Both were tested at their own instant against the two channels, with the same lookup at +5 s as the control.

FindingCountBoth channels fire+5 s controlGain
INTERIOR_GAP (chord contiguity)4913 (26.5%)5 (10.2%)+16.3
OWNERSHIP_SUSPECT (pseudo-chord)110 (0.0%)2 (18.2%)−18.2
No cross-guitar reassignment is warranted, and the audio says so. Not one of the 11 outer-string pseudo-chords has both channels firing, and the control scores higher, so those shapes are one player's octaves rather than two players written on one staff. The 13 interior gaps that do show both channels beat their control by 16.3 points, and that only means the other guitarist was also playing at that instant.
These two checks were built for a different file than this one. They exist to catch two guitarists written onto a single staff. Here each staff IS one channel by construction, so a gap inside Gtr 1 is the left channel's own transcription, never a note belonging to Gtr 2. The remaining explanation for those gaps is the detector hearing partials, not a split player. The measure is inconclusive on 31 of the 60 findings, because the onset reference carries only 131 events across 129 s and no attack is detectable at those instants.

Channel ownership per note

The canonical tool cannot do this, so it was measured directly: every attacked note on each staff matched by pitch and onset against BOTH channel transcriptions, within 60 ms.

StaffNotesOwn channelOther channelGap+5 s control
Gtr 1 (from LEFT)52962.6%33.5%+29.111.2%
Gtr 2 (from RIGHT)63361.8%29.5%+32.212.0%

The per-note breakdown, which is the part that answers ownership

StaffExclusive to its own channelPresent in both channelsMatched neither within 60 ms
Gtr 1196 (37.1%)135 (25.5%)198 (37.4%)
Gtr 2249 (39.3%)142 (22.4%)242 (38.2%)
Ownership is established for the 37 to 39% that are exclusive. Those notes exist in one guitarist's channel and not the other, which is the whole claim. For the 22 to 25% present in both, ownership is genuinely ambiguous because both players struck them, and no measure can or should assign those to one guitar.
Read the own-channel percentage as writer fidelity, not as proof. Each staff was written FROM its channel, so a high own-channel rate is partly built in. It reads 62.6% and 61.8% rather than 100% because the writer quantises to a 16th grid, caps polyphony at four voices, and this test uses a 60 ms window. That shortfall is the writer's, and it is the same quantisation that leaves 37 to 38% of notes matching neither channel inside the window.

Song 2: Secret, s6388915

Same chain, no changes. Artifact s6388915-TWOGTR-WITH-TIES.gp, hash 26a826fe6f686139. 95 bars, standard E, 75 bpm, 274 s.

AxisGtr 1Gtr 2Human tab, same song
Separability margin61.1129 attacks on one channel only
Transcribed / written2052 / 18842998 / 24940 unvoiceable
Timing, median residual106.8 ms117.2 ms
Notation span vs record1.39% shortMundo Cani was 4.73%
Pitch, chroma separation+0.0438+0.0550+0.0553 / +0.0725
Ownership gap+38.1+45.4Mundo Cani +29.1 / +32.2
Notes exclusive to their own channel847 (45.3%)1229 (49.9%)Mundo Cani 37.1% / 39.3%
Duration gain over shuffled control+5 ms+9 mswithin 25%: 57.3% / 51.3%
Hard failures00hand-skip 45% and 19%
On Secret the build beats the human tab on timing, 106.8 ms against 117.2, and it tracks the record's length to within 1.39%. Ownership is stronger than on Mundo Cani too: half the notes on Gtr 2 exist in one guitarist's channel and not the other.
Its pitch separation is low, and the control says that is the song rather than the build. +0.0438 and +0.0550 against the human tab's +0.0553 and +0.0725, because Great Lake Derelict sits at 0.82 chroma similarity to this song and swallows the margin. Running the human tab is what keeps a low number from being read as a defect. Gtr 1's 45% hand-skip is the real concern here, against 19% on Gtr 2 and 27% on Mundo Cani.

Standing rule

Two guitars, never four. A third staff is never the answer, and the split is decided by who played the note, never by panning or by stem loudness.