Motion graphics,
drawn in code.
Launch films, product explainers, and social cuts from a single timeline. One render function draws every frame, and the soundtrack is synthesised from the same cues, so picture and sound cannot drift.
Four steps
before a frame renders.
L-evate merges the RISE method with a motion engine built on pure functions of time.
- R
References
Real brand tokens, real logo files, and real screenshots of the product. Nothing is drawn from memory, and every number shown is measured.
- I
Idea
One arc with one change per beat, written as a beat table before any code. Every line of text is held long enough to read.
- S
Style
One ground, one ink, one accent. Spring motion, seeded film grain, and light fall-off instead of flat fills.
- E
Examine
Stills at every quarter of the film, in every format, checked against ten tells before a single frame is rendered.
Brief to MP4.
In one repo.
Because the film is text, a change is an edit rather than a re-export. Move one time in the timeline and the picture, the sound, and every format follow it.
- SKILL.md
A brief in plain language
Ask Claude Code for a launch film, explainer, or social cut. The skill walks the RISE method and writes a beat table before any code.
- build.py
One page, every format
The scene builds into one self-contained page with a scrubber and sound. The same page opens as 16:9, 9:16, 1:1, or 4:5, recomposed rather than cropped.
- stills.js
Problems caught before rendering
Stills at every quarter of the film, in every format, checked against ten tells. A fix costs an edit, not a re-render.
- audio.py
A score without a session
Every sound is synthesised from the cue list, levelled per voice, and mastered to −16 LUFS. No stock music to license and nothing to sync by hand.
- render.js
Motion blur, in parallel
Four sub-frames per frame are blended into motion blur, and each format renders to MP4 side by side.
- LEARNINGS.md
Every film improves the next
Notes from each project are appended to the skill, and Claude reads them before starting the next one.
One timeline.
Every format.
- One render(t) function draws every frame
- Recomposes to 16:9, 9:16, 1:1, and 4:5 instead of cropping
- Closed-form springs, with four sub-frames of motion blur per frame
- Every sound cue lives next to the picture that triggers it
- Soundtrack levelled per voice and mastered to −16 LUFS
- Seeded film grain and vignette, regenerated through the film
- Preview page with a scrubber and sound before rendering
- Formats render to MP4 in parallel
The same springs,
in your browser.
Every headline, card, and panel on salesmansolutions.net moves on L-evate’s spring constants, converted into native CSS easing.
What it runs on.
- Node 18 or later, with Playwright and Chromium
- Python 3 with NumPy
- ffmpeg with libx264 and AAC
Built on motion-broll by Bart (MIT), used unchanged. The References, Idea, Style, Examine structure follows the RISE method by Jack Roberts, “Motion, drawn in code”. Geist, Geist Mono, and DM Sans are licensed under the SIL Open Font License. L-evate’s own additions are MIT.