{"adoption": {"forks": 157, "observed_at": "2026-08-28T04:06:08.401593+00:00", "stars": 2041}, "canonical_url": "https://ross.abutalabs.com/products/oil-motion", "card": {"archived": false, "artifact_type": "plugin", "description": "Create smooth, responsive interactive web animations.", "domain": ["web-development", "frontend", "artificial-intelligence", "graphics"], "enriched": true, "function": ["animation", "agent-framework", "prompt-engineering", "video-processing", "image-processing"], "health_score": 79, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["oil-oil/oil-motion"], "name": "oil-oil/oil-motion", "platform": ["python", "cross-platform"], "pushed_at": "2026-08-21T06:34:03+00:00", "repo": "oil-oil/oil-motion", "stars": 2041, "tags": ["agent-skill", "interactive-animation", "scroll-animation", "ai-video-generation", "sprite-atlas", "web-animation", "motion-design", "web-development", "ai-agents", "web-server"], "topics": [], "urls": [], "use_cases": ["create scroll-driven product reveal animations for a landing page", "make a character follow the mouse with smooth orientation changes", "turn two product images into a step-by-step unfolding animation", "build touch or device-orientation controlled animations on mobile", "generate hover and click state animations for components", "compress AI-generated video into web-ready sprite atlases or MP4s"], "what_it_is": "Oil Motion is an agent-agnostic Skill that designs, generates, and integrates interactive web animations from AI-generated video. It handles keyframe confirmation, continuous motion generation, frame cleanup, compression, and wiring animations to scroll, mouse, drag, touch, or device-orientation input.", "when_to_avoid": ["you only need simple CSS or JS transitions without AI-generated video", "you need real-time generative animation rather than pre-baked frame sequences", "your project has no access to AI video generation services", "you need fully deterministic animation authored by hand rather than model-generated frames"], "when_to_choose": ["you want AI-generated continuous motion (rotation, deformation, material change) that CSS transforms can't fake", "you need animations wired to scroll, pointer, drag, touch, or device orientation", "you want an agent to handle the full pipeline from keyframes to compressed, responsive web assets", "you need transparent, reusable animation assets with controlled file size for desktop and mobile"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/oil-motion", "repo": "oil-oil/oil-motion", "role": "main", "score": 57}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:08.401593+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:58:20.725073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "601688982997d5b8d88c41a271fd811e4ef5989c233a3ffefc504a036ba0899e", "fetched_at": "2026-08-28T04:06:08.401593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/oil-oil/oil-motion"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 1, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 26, "days_push": 12, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 57, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}