Repository navigation
Add a walkthrough video and Korea-themed sample photos - #14
Merged
Merged
Conversation
A silent 1920x1080 video under video/ that walks through install, chained operations, the 14 blend modes, per-channel curves and three looks (one loaded from a JSON preset), styled after the docs site with DM Mono for the wordmark and code. The logo vector is animated: its three layers draw in fanned out and settle into place. Every edit shown is rendered by layeris itself: scripts/build_assets.py writes the results and a manifest holding the exact code that ran. The source photos were generated with gpt-image-2.5-flare at low quality by scripts/generate_photos.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
The caret appeared beside the logo while it was still moving up, so typing now starts once the move ends, and the intro holds a little longer. Rendering with the BT.709 color space gives a standard limited-range yuv420p file instead of full-range yuvj420p. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 76.4 seconds, H.264 in BT.709, no audio track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
The logo assembles at twice the speed and the wordmark types at two frames per letter, so the intro takes 5 seconds instead of 8. The install scene shows only pip install, and the outro drops the version and uses a smaller wordmark to leave more space below. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 71.9 seconds, H.264 in BT.709, no audio track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
Shorter holds, faster typing and wipes, and quicker scene exits bring the video from 71.9 to 51.3 seconds. Looks now follow each other directly: the code swaps and the next photo fades in over the previous result, instead of each look fading out to a blank page first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 51.3 seconds, H.264 in BT.709, no audio track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
Regenerates all 13 sample photos with gpt-image-2.5-flare at low quality: a palace pond at sunrise, a portrait in hanbok and gat, a Seoul alley at night, bibimbap, lotus lanterns, palace eaves, the Jeju coast, a bamboo forest, a celadon tea set in a hanok, Gamcheon Culture Village, a fishing harbor, a hanbok silhouette and a snowy hanok. Each keeps the qualities its recipes rely on (a hazy harbor, a night street, a silhouette against white sky and so on). Recipe photos, alt text and the few descriptions that named what was in a photo are updated to match. The flat-photo Levels points now fit the new harbor's tonal range, the red-filter recipe moves to the Jeju coast so its sky and clouds carry the effect, and the README's operation gallery now uses the Gamcheon Culture Village photo instead of test-images/piano-man-01.jpg. Every page and image is rebuilt with scripts/build_docs.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
The install scene now shows pip's Collecting and Downloading lines with a quick progress bar before the success line, using the real wheel name and size for 0.4.0. The video's own photo set and generator are gone: build_assets.py now renders from docs/photos/, using six of the new Korea-themed photos (the hanbok portrait, Jeju coast, bamboo forest, Gamcheon Culture Village, palace pond and palace eaves). The chain scene's code is a size smaller to fit the longer file name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 52.1 seconds, H.264 in BT.709, no audio track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
A Korean traditional instrumental in the manner of gayageum ensemble arrangements of Pachelbel's Canon: gayageums entering in canon over the Canon's ground bass in D, with janggu, geomungo, daegeum and haegeum. scripts/generate_music.py generates it with the ElevenLabs Music API (music_v2_5) at the video's exact length; the prompt describes the music rather than naming the piece, which the API rejects. The track builds through the middle and resolves as the outro plays. src/Video.tsx mixes it in at 85% volume (about -14.7 LUFS). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 52.1 seconds, H.264 in BT.709 with AAC audio at about -14.8 LUFS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
The gugak track didn't work out, so this is a general instrumental instead: felt piano over a light beat and plucked synth arpeggios at about 99 BPM, on a four-chord loop that changes once per bar. It builds around the blend-modes scene and rings out under the outro. generate_music.py now holds three prompt styles (piano, marimba, lofi) sharing one brief. Of four takes, this one had the steadiest tempo, the clearest chord movement and a clean ending; it's mixed at 80% (about -14.6 LUFS). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 52.1 seconds, H.264 in BT.709 with AAC audio at about -14.6 LUFS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
Swaps in the lo-fi take (Rhodes chords over a laid-back beat, about 86 BPM). It now starts as the logo fades out at the end of the intro instead of on the first frame, and fades over the last second, by which point the take is already winding down. The intro instead gets a short shimmer as the logo's outlines start to draw, from the new scripts/generate_sound_effect.py (ElevenLabs Sound Effects API). generate_music.py now defaults to the lofi style and sizes new takes to the 47.8 seconds the music plays for. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 52.1 seconds, H.264 in BT.709 with AAC audio at about -15.9 LUFS. The music starts at 4.3 s, as the logo fades out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
One soft keystroke from the ElevenLabs Sound Effects API, trimmed to start at the click and normalized to a -6 dBFS peak, plays on the frame each letter of "layeris" appears, at slightly varied levels. generate_sound_effect.py now takes the effects to generate by name (logo, key) and does the trimming and normalizing itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
1920x1080, 30 fps, 52.1 seconds, H.264 in BT.709 with AAC audio. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR does three things:
video/, a Remotion project that renders a walkthrough video with music and sound effects.Docs sample photos
scripts/generate_photos.pynow generates 13 minimal photos of Korean subjects withgpt-image-2.5-flareatquality: low: a palace pond at sunrise, a portrait in hanbok and gat, a Seoul alley at night, bibimbap, lotus lanterns, palace eaves, the Jeju coast, a bamboo forest, a celadon tea set in a hanok, Gamcheon Culture Village, a fishing harbor, a hanbok silhouette and a snowy hanok. Each keeps what its recipes rely on, such as a hazy harbor, a night street, or a silhouette against a white sky.scripts/docs_examples.pyhas the new slugs and alt text. The few recipe descriptions that named something in a photo are updated, for example "the beard and the woven gat hat" and "the turquoise houses violet".docs/previews/) is now generated from the Gamcheon Culture Village photo instead oftest-images/piano-man-01.jpg. The README markdown is unchanged and still matchesgenerate_previews.py --markdown.scripts/build_docs.pyrebuilt every page and image. The old photos and their renders are removed.Video on the docs site
index.html) has a new Video section after the interactive looks. It's a plain<video controls>showingdocs/video/layeris.mp4, withdocs/video/poster.jpg(the intro's logo and wordmark) as its poster..videorule indocs/assets/site.css, matching the page's other images.docs/video/(npm run render,npm run poster), so there's a single copy of the MP4.Video
The video is 1920×1080, 30 fps, 52.1 s, H.264 in BT.709, with AAC audio. It walks through the package rather than selling it, styled like the docs site: white page, the docs' fonts and syntax colors, and section headings with a rule above. The
layeriswordmark is typed in DM Mono, as on the docs home page.pip install layeris, with pip'sCollectingandDownloadinglines and a quick progress bar before the success line. The wheel name and size matchpip wheel .for 0.4.0.randbcontrol points easing into place on the bamboo forest.apply_from_json(palace eaves).video/scripts/build_assets.pyrenders every edited image in the video fromdocs/photos/with layeris. It records the exact code that ran invideo/src/data/assets.json, and the video reads its code snippets from that file. Fonts are bundled through@fontsource, and all npm versions are pinned.Sound
video/scripts/generate_sound_effect.py, using the ElevenLabs Sound Effects API.video/public/logo.mp3) plays as the logo's outlines start to draw.video/public/key.mp3) plays on the exact frame each letter of the wordmark appears.video/public/music.mp3, generated byvideo/scripts/generate_music.pywith the ElevenLabs Music API (music_v2_5,lofistyle).Checks
pytest: 313 passed.docs/*.htmland the README reference exists.npx tsc --noEmitpasses for the video.🤖 Generated with Claude Code
https://claude.ai/code/session_01Lpfz52CucHEw9WyhgzPjmj