Sandpies Claude Opus 5 commited on
Commit
da94e47
·
1 Parent(s): 4a004a8

Record what four "head swap does not work" reports actually were

Browse files

None of them was broken code. A missing frame sequence, a weak citation, a
self-inflicted contradiction, and a conditioning imbalance -- and three of
the four were legible in the log before anything was changed.

The one that mattered was found by the user, not me: the failed run had a
clip caption and the successful one did not. "A man wearing an orange tank
top" reaches the encoder as what <Video 1> IS, and contradicts a beat asking
for somebody else, additively, at cfg 1.0. SWAP's own Describe button wrote
it because the caption prompt asked for "who is in it".

Also records the finding that is not a bug and outlives the rest:
reference_video_size is an influence dial. Core aligns reference frame N with
output frame N, so a clip competes with the identity stills for the same face
wherever it shows one clearly, and at MAX it wins. That is why the swap
arrived four seconds in -- exactly when steam covered the original face.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RVz8qNGn2NhrP3KG2Lh5yT

Files changed (1) hide show
  1. docs/DEVLOG.md +70 -0
docs/DEVLOG.md CHANGED
@@ -3618,3 +3618,73 @@ The audit's own framing is worth keeping: **a fixture that does not resemble pro
3618
  not a test**, and the resemblance decays silently every time a feature lands next to an
3619
  older checker. Twenty-two green checks were true and four of them were not measuring what
3620
  their names claimed.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3618
  not a test**, and the resemblance decays silently every time a feature lands next to an
3619
  older checker. Twenty-two green checks were true and four of them were not measuring what
3620
  their names claimed.
3621
+
3622
+ ## 69. The caption was describing the person it replaced (2026-09-06)
3623
+
3624
+ SWAP shipped in 2.0.0 as a standalone implant: a fifth tab that writes one hop from a
3625
+ reference clip and an identity still, and never touches `ref_plan`. Stages 1 to 3 passed
3626
+ their GPU gate and merged. This is what stage 4 -- the swap modes -- cost to get right, and
3627
+ none of it was in the code.
3628
+
3629
+ **A `headswap` checkbox cannot work here.** The contributed fork had one, and unticking it
3630
+ only omitted a line from the instruct. That does nothing: sampling runs at cfg 1.0 with no
3631
+ negative branch, the identity photograph is in front of the encoder either way, and silence
3632
+ about identity lets it govern the whole subject. What is excluded has to be SAID.
3633
+
3634
+ The taxonomy came from PromptMasterLD, whose edit laws separate a subject replace from a
3635
+ head swap -- *"THE BODY STAYS WITH THE PLATE"*, then build, hands, posture, every garment --
3636
+ and from a features-only face swap. Four named modes, each stating what STAYS. Technique,
3637
+ not code.
3638
+
3639
+ **Then three renders that all looked like "head swap does not work", and were three
3640
+ different things.**
3641
+
3642
+ The first was a description of a pose. SWAP was sent ONE frame, so a vision model looking at
3643
+ a still of somebody with their hands on a bed wrote exactly that, while the instruct told it
3644
+ "the action, place and motion follow the clip" -- asking it to describe something it had
3645
+ never been shown. Three frames now, evenly spaced across the trimmed window and captioned in
3646
+ time order. That is also what "video vision" is in practice: the VLMs advertising it sample
3647
+ frames and present them ordered. Saying the order out loud is what turns three pictures into
3648
+ a movement. The next caption read *"clenching their fists as white steam begins to rise...
3649
+ posture intensifies... vapor swirls more aggressively"*.
3650
+
3651
+ The second was the beat naming the identity once, in a subordinate clause -- *"the person
3652
+ with the head of @ref_1"* -- against a clip carrying 192 frames of conditioning. One
3653
+ photograph, added rather than weighed. The mode rules now specify the construction: the
3654
+ pack's own idiom first, attached to the subject, then a second sentence saying what stays.
3655
+
3656
+ **The third was the one that mattered, and the user found it, not me.** The failed run had a
3657
+ clip description and the successful one did not:
3658
+
3659
+ successful: a reference clip is wired but has no description
3660
+ failed: <Video 1> is a reference clip: A man wearing an orange tank
3661
+ top stands in a dimly lit room...
3662
+
3663
+ That caption reaches the encoder as what `<Video 1>` IS. "A man wearing an orange tank top"
3664
+ asserts the subject's sex, build and clothing, additively, against a beat asking for
3665
+ somebody else. Not a weak signal losing a contest -- a flat contradiction. And SWAP's own
3666
+ Describe button wrote it, because `_DESCRIBE_SYSTEM` asked for *"who is in it"*.
3667
+
3668
+ The clip is a MOTION AND PLACE plate. Identity comes from the stills. The caption now
3669
+ describes the action, the movement, the setting and the light, and is told not to describe
3670
+ the person at all. Because that is an instruction to an LLM rather than a guarantee, the
3671
+ caption is screened for words that describe a person and the tab says which ones it found --
3672
+ a warning, never a rejection, since "a man" is a fine caption for a crowd.
3673
+
3674
+ **And a fourth thing, which is not a bug and is worth more than the rest.** With all of that
3675
+ fixed the swap still only took hold four seconds into an eight second hop. Core truncates a
3676
+ reference clip to `frames[:frame_count]`, so reference frame N conditions output frame N --
3677
+ the clip is temporally aligned with the output, and wherever it shows a clear face it
3678
+ competes with the identity stills for that same face. Decode area sets token count, token
3679
+ count is how loud the clip is, and at MAX it wins until the clip's own face is obscured. The
3680
+ swap arrived exactly when the steam covered him.
3681
+
3682
+ 0.3 MP fixed it. `reference_video_size` was documented purely as a memory and detail budget,
3683
+ which is true and is not the half a user needs when an identity swap half works. It is an
3684
+ INFLUENCE dial and now says so.
3685
+
3686
+ What this section is really about: four consecutive reports of "head swap does not work"
3687
+ that were a missing frame sequence, a weak citation, a self-inflicted contradiction and a
3688
+ conditioning imbalance. Nothing in the code was broken. Every one of them was legible from
3689
+ the log -- the caption line, the beat, the frame count -- and three of the four were found by
3690
+ reading it rather than by changing anything.