8 input sources feed 3 timeline controls
In our Python 3.12 checkout, Oil Motion documented 8 input sources and 3 ways to control time. A generated clip moves forward on its own timeline, while a web effect may need scroll position, pointer coordinates, a drag gesture, device orientation, audio, data, or component state to select the visual state. The skill turns approved media into a timeline and chooses continuous scrubbing, segment playback, or autonomous playback. That distinction keeps a scroll-driven page from being mistaken for a video that must always scrub frame by frame.
The repository at commit 7501e64 contained 47 files and about 7,664 lines of source. Its Python scripts cover budgeting, frame cleanup, chroma work, video compilation, and production approval records. TypeScript assets provide browser controllers and a WebGL chroma renderer. The repository contains working media tools, while page-specific assets, input semantics, and fallback behavior remain the adopting team's responsibility.
1 pilot and SHA-256 approvals block a bad batch
The workflow keeps 2 planning files: a concept contract fixes the requested subject, style, motion, background ownership, input, time control, navigation, and continuity, while a motion brief derives key frames and the production plan. Oil Motion assigns semantic changes such as limbs, structure, materials, contact, and occlusion to generation. Translation, scaling, cropping, damping, and time mapping stay in code. A CSS transform cannot convincingly unfold a product into newly visible parts.
Before producing every clip, the skill requires 1 pilot mounted in the actual page. Approval records include SHA-256 hashes for 5 files: the first frame, last frame, video, contract, and page evidence. A changed artifact invalidates the approval. Chained clips receive two checks: the previous accepted tail must be the next generation input, then the decoded output seam is inspected again. This targets a common failure in generated motion, where identity or composition drifts between apparently related clips.
What happened when we ran it
Our sandbox install succeeded in 11 seconds, adding 35 packages and occupying 37 MB on disk. The build completed successfully in 7 seconds. Our measurement setup was an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, no secrets, and commit 7501e64. We measured the checkout at 3.3 MB.
The test step exited 1 after 6 seconds. Pytest reported 35 passed and 3 collection or setup errors out of 38. All three error traces ended at imports of PIL with ModuleNotFoundError: No module named 'PIL', in test_compile_scroll_video.py, test_production_gate.py, and test_skill_regression.py. The log does not show whether the fix belongs in installation metadata, the test command, or the environment, so we will not assign a cause beyond the missing module.
Pip-audit reported 0 known vulnerabilities in the installed packages. The repository had a tests directory, but no CI workflow files and no Dockerfile. Those are useful limits on the result: the 35 passing tests demonstrate working code paths in our fresh container, while the 3 collection errors mean the full suite never reached a clean run there.
3 delivery routes cover scenes, transparency, and long timelines
The 47-file checkout defines 3 media routes and separates each from playback behavior. A scene with camera movement, environmental light, or ground contact can use baked all-keyframe MP4. Transparent motion with random access or a two-dimensional parameter space can use an alpha WebP atlas. A large, long, one-dimensional transparent sequence can use an all-keyframe chroma MP4 that WebGL keys during playback. The budget script selects one primary route instead of asking the developer to build several.
That selection cannot replace browser testing. The open user issue describes a 16-by-14 sprite layout that hit a 4096-pixel texture-width limit. The current workflow can choose video when an atlas exceeds its budget, but the report remains unanswered and shows why dimensions matter early. The QA guide calls for cold-cache tests, slow networks, fast reversals, zoom, rotation, mobile checks, resource-failure behavior, and a static prefers-reduced-motion fallback in the real page.
The English overview leaves 9 operating guides in Chinese
The English README explains the idea, the 3 media routes, installation, deliverables, and the acceptance checklist. The detailed SKILL.md is Chinese, as are the reference files for prompting, runtime behavior, chroma video, optimization, delivery selection, and QA. An open pull request adds English versions of all nine reference guides, with 1,187 added lines, but it has not been merged.
The 9 untranslated guides matter when an agent makes production decisions. An English-only engineer can understand the promise without being able to review the exact instructions for thresholds, continuity checks, or failure handling on the default branch. Code and shell commands remain readable, yet prose carries much of the judgment. Until the translation lands, international teams should involve a Chinese reader or treat the skill as a source of ideas rather than an audited procedure.
2 open items and no release make this an early production bet
Oil Motion was created on August 7, 2026, and the last push was August 21. GitHub showed 2,039 stars, 157 forks, and 2 open issues and pull requests when fetched on August 26. One is the texture-limit question; the other is the English reference translation. The project has an MIT license and no tagged GitHub release. That is active early interest, with too little history to infer stable interfaces or broad device coverage.
The choice is fairly narrow. Try Oil Motion when generated structural change is the main visual idea, the interaction must control it, and someone can review every stage. A conventional hover, layout transition, or vector sequence will be cheaper to author with Motion, Theatre.js, or Lottie. Here, the 35 passing tests and disciplined pilot process justify experimentation, while 3 collection errors, Chinese operating docs, and no release argue for pinning the tested commit and keeping a static fallback.

