The project's README from github.com/feitangyuan/onetake. As one markdown file: README.md.
Motion films that never cut to the next slide. A Claude Agent Skill that makes product launch films, teasers and feature demos where every beat grows out of the one before — one continuous take, not a stack of scenes. 一镜到底的连贯动效。 做产品发布片、预告片、功能演示:每一个画面都从上一个画面里长出来,是一整条连续的镜头,而不是一张张轮流出场的"PPT"。

From onetake's own launch film. A prompt bar opens into the ad it asked for; the next prompt collapses into a line that shoots across the desk and opens into a festival screen. No cut. Full film with sound →
Most motion videos an AI makes today — and most template tools — come out loose. Title card, fade, UI shot, fade, feature card, fade, logo. Each shot can look fine and the whole still reads like a slideshow, because nothing connects one beat to the next: scenes replace each other.
onetake treats the boundary between two beats as the thing to design. At every boundary, something on screen survives and visibly becomes the next beat:
And one camera holds it all together. It never cuts: it follows the subject a beat ahead, whips to where the next thing will land, floats like a hand-held operator and shakes when something hits — then holds dead still, because rests are what make the moves land.
Every film is checked by an oracle before a human watches it. probe.py records what is on screen in every frame, finds
each boundary, and asks what carried across it. A film whose beats replace each other fails.
| film | verdict | continuity (carry score) |
|---|---|---|
| an earlier launch film, v1 — perfect rhythm, still a slideshow | rejected | 0.00 |
| the same film, v2 | rejected | 0.40 |
| the same film, v3 — every beat grows out of the last | accepted | 0.75 |
| onetake launch film | accepted | 0.83 |
The same oracle fails uniform cadence (shots all the same length), no stillness, clipped audio, fast moves without motion blur, and a subject that leaves the frame.
Every case ships the finished film and a breakdown (concept, beat sheet, numbers, what was rejected and why). The films' source code is not included.
onetake launch![]() Three prompts, three films, one take — each prompt visibly becomes its film ▶ Film | 📖 Breakdown |
one-dot![]() One dot is the whole film: caret → menu → loading ring → spring curve → the dot on the i ▶ Film | 📖 Breakdown |
knockon![]() A chain reaction: every beat is the collision that starts the next ▶ Film | 📖 Breakdown |
clearing![]() One zoom from a year to a free half hour — 1× to 300× and back, never a cut ▶ Film | 📖 Breakdown |
pith![]() The window grows out of one phosphor pixel: 440× → 0.52× in one move ▶ Film | 📖 Breakdown |
ebb![]() A field of light carries the take through five places; each flood drains onto the next ▶ Film | 📖 Breakdown |
overlap![]() Two print passes slide into register — and an & appears that was hidden in both ▶ Film | 📖 Breakdown |
unbroken![]() One ink stroke that is never lifted: procedural brush, no textures ▶ Film | 📖 Breakdown |
motion-web![]() Where the rhythm rules came from: small UI, big ground, rests, then a burst ▶ Film | 📖 Breakdown |
skill-demo![]() An operation demo from nothing: the chosen menu row flies into the input as a chip, and on from there ▶ Film | 📖 Breakdown |
one-dot and skill-demo were made when the skill was still called ohmymotion; the films show that name.
# Claude Code
git clone https://github.com/feitangyuan/onetake.git ~/.claude/skills/onetake
# Codex / other agents that read skills
git clone https://github.com/feitangyuan/onetake.git ~/.agents/skills/onetake
Then ask: "Make a 15 s launch video for my app", "a feature demo rebuilt from these screenshots, no screen recording", "my motion video feels like a slideshow — fix it".
Requires python3 with playwright (chromium), numpy, scipy, Pillow, matplotlib (opencv-python for
reference analysis), ffmpeg, node. Narration adds faster-whisper and Kokoro TTS. Music is royalty-free by default.
SKILL.md |
the protocol and the hard rules each rejected cut taught |
lib/motion.js · lib/ui_kit.js |
the move library; the UI-rebuild kit |
scripts/ |
render (motion blur, 4K60), verify (the oracle), probe, stills, reference analysis, footage, narration, sound |
gallery/ |
one live demo and one six-frame sheet per move |
references/ |
rhythm, carry, composition, camera, sound, product demos — the method with its numbers |
PolyForm Noncommercial 1.0.0: free for personal, educational, research and other noncommercial use. Commercial use is not permitted.
现在大多数 AI 做出来的动效视频,还有大多数模板工具做出来的,都是散的。 标题卡、淡出、界面镜头、淡出、功能卡片、淡出、Logo。每一镜单看也许都不错,合起来还是像在翻 PPT。 原因是画面和画面之间没有任何联系,后一个场景只是把前一个替换掉了。
onetake 把两个画面之间的交接处当成设计的重点。每一个交接处,都有一个东西活下来,并且看得见地变成下一个画面:
把这一切串起来的是同一个镜头。 它从不剪断:提前半拍跟着主体走,抢在下一个东西落地前甩过去,像手持一样轻微浮动,东西撞上来时跟着一震; 该停的时候又能完全静止,因为有停顿,动作才落得下来。
每条片子给人看之前,先过一遍自动验收。probe.py 记录每一帧画面上有什么,找出每一个交接处,再判断有没有东西从这边带到那边。
画面互相替换的片子,直接判不合格。
| 片子 | 结果 | 连贯度(carry score) |
|---|---|---|
| 更早的一条发布片 v1:节奏完美,仍然像 PPT | 被否 | 0.00 |
| the same film, v2 | 被否 | 0.40 |
| 同一条片子 v3:每个画面从上一个里长出来 | 通过 | 0.75 |
| onetake 发布片 | 通过 | 0.83 |
同一套验收还会判掉这些问题:镜头长度全都一样、没有静止段落、音频爆音、快动作没有运动模糊、主体出画。
上面的表格里有 10 条用它做的片子,每条都附成片和拆解文档(概念、节拍表、数据、被否掉的版本和原因)。不包含片子的源代码。 其中 one-dot 和 skill-demo 做的时候 skill 还叫 ohmymotion,画面里是旧名字。
# Claude Code
git clone https://github.com/feitangyuan/onetake.git ~/.claude/skills/onetake
# Codex 等读取 skills 的 Agent
git clone https://github.com/feitangyuan/onetake.git ~/.agents/skills/onetake
然后直接说:「给我的 App 做个 15 秒发布视频」「按这几张截图复刻界面做功能演示,不录屏」「我的动效视频像 PPT,帮我改」。
依赖:python3(playwright + chromium、numpy、scipy、Pillow、matplotlib,分析参考片需要 opencv-python)、ffmpeg、node。
配音需要 faster-whisper 和 Kokoro TTS。音乐默认用免版权曲库。
PolyForm Noncommercial 1.0.0:个人、学习、研究等非商业用途免费使用,不允许商用。