Skip to content

fix(media): drop fade-in lead frames from the README hero GIF (flash-free loop restart) - #29

Merged
HomenShum merged 1 commit into
mainfrom
claude/gif-fade-lead
Oct 18, 2026
Merged

HomenShum merged 1 commit into
mainfrom
claude/gif-fade-lead

Conversation

@HomenShum

@HomenShum HomenShum commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Removes the grey/white fade-in lead frames from the README hero GIF (README.md line 28 embeds it; the site page https://homenshum.github.io/featureclipstudio/ shows it too) so each loop restarts on the real first frame instead of a flash. (Flash-free restart, not a literal seamless join: the last scene still cuts back to the landing page, per Codex review.) Path and name unchanged; README untouched.

before after
k (leading frames with mean L > median(frames 4..end) + 15) 4 0
frame-0 mean luminance 139.17 19.76
last-frame mean luminance 26.94 26.94
frame 0 vs last, abs diff 112.23 7.18
frame count 188 184
total duration 15.66 s 15.33 s (-330 ms: 80+90+80+80)
size / loop 720x405 / forever 720x405 / forever
bytes 2154783 2111742
sha256 ec0addd6a402f60e23c0ad8cf7016d260c46cfe9c81f9f4d8fbf64df580dc244 e974f769bc097f23c901acc91384aa5426115a4472bb584e1d931a7c5147a008

Method: byte-level frame drop (same technique as NodeAgent PR #22). Frames 0..3 are removed. Because the GIF is delta-optimized, original frame 4 only stored a partial rectangle over frame 3's canvas; it is replaced by the full composited canvas of original frame 4, encoded against the ORIGINAL global palette (every pixel maps back to a palette index, no quantization), with its original delay. Frames 5..187 are copied verbatim. compare.py: composited new[i] == before[i+4] pixel-exact for all 184 frames, delays equal, loop flag equal, PASS. ffmpeg -v error -i new.gif -f null - decodes with no errors.

Cause: Defect D2 (probe-opening-frame.mjs lines 1-14). The renderer cross-fades each step in over the previous one; step 0 had nothing to fade from, so it ramped up from the #fff letterbox. The renderer was fixed by 341fd20 (2026-08-13, src/Walkthrough.jsx line 186 opacity: prevImg ? fadeIn : 1), but this GIF was committed 2026-08-04 (45c8d8b) and never re-rendered; PR #25 only re-encoded it. The generator is not re-run here (no new captures, and a re-render would not keep frames 4..187 pixel-identical), so only the shipped asset is trimmed.

Evidence re-pin, same method as PR #25: manifest artifact noderoom-hero-walkthrough sha256/bytes updated (old pin kept in an appended limitation), then projection and receipt regenerated with node scripts/featureclip-evidence.mjs project --write. No change to scripts/, .github/, package.json or any threshold. Local: npm ci && npm run check exit 0.

Evidence dir: D:/ProjectRecovery/chatgpt-consolidation-20260907-01/thread-agnostic-integration-20261003/repository-presentation-20261007/evidence/featureclipstudio-gif-fade-lead-r17-20261018T002405Z/ (frames-before.txt, frames-after-local.txt, compare.py, strip_lead.py, repin.mjs, cause.txt, commands.log).

🤖 Generated with Claude Code

…e loop is seamless

assets/feature-noderoom-hero.gif was rendered before 341fd20 guarded the step-0
cross-fade (Defect D2), so frames 0..3 fade up from the white letterbox
(mean luminance 139/115/79/55 vs about 20) and every loop restarts on a flash.
Frames 0..3 are removed at the byte level; frame 4 becomes a full-canvas frame
in the same global palette; frames 5..187 are untouched. Pixel-exact
new[i] == old[i+4], delays and loop flag preserved. 188 -> 184 frames.

Evidence manifest re-pinned (sha256 + bytes + appended limitation); projection and
receipt regenerated with `node scripts/featureclip-evidence.mjs project --write`.
Gate script, CI and thresholds untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@HomenShum HomenShum changed the title fix(media): drop fade-in lead frames from the README hero GIF (seamless loop) fix(media): drop fade-in lead frames from the README hero GIF (flash-free loop restart) Oct 18, 2026
@HomenShum
HomenShum merged commit 5c0472e into main Oct 18, 2026
2 checks passed
@HomenShum
HomenShum deleted the claude/gif-fade-lead branch October 18, 2026 00:40
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.

1 participant