asset-pipeline
Skill2 starsChanged 53 days agoMITView on GitHub
Atelier's native asset tools — image→webp compression, video→webp frame sequences, scrollytelling scaffolding, and AI video generation (Gemini Omni Flash / Veo 3.1) with a graceful no-credentials fallback. Load when handling images, video, storytelling sections, or media generation.
- Reads credentials
- Installs packages
6 other projects use a version of this.
Adopted by
Most recently taken up by
- Arnie016/universal-modder-mactheir own version, first seen Nov 1, 2026
- google/capsemtheir own version, first seen Oct 30, 2026
- AhmedTahaAtiya/universal-modder-unrestrictedtheir own version, first seen Oct 11, 2026
- Fixed-Seed/game-changertheir own version, first seen Oct 11, 2026
- levy-street/world-of-claudecrafttheir own version, first seen Oct 8, 2026
- rehan-remade/universal-moddertheir own version, first seen Sep 30, 2026
Used with
Projects with it also use game-automation, game-recon and 7 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
rehan-remadeSkillgame-automation
Launch, see and drive a real game so an agent can test its own mods. Covers launching via Steam or the exe, windowed mode at a fixed size, screenshots of the game window (GPU-safe capture), clicking and typing into menus, holding keys, relative mouse, crash-reporter cleanup, killing by PID, reading logs, scripted test scenes, and an in-game JSON bridge that lets an agent observe and act. Windows-first (also from WSL), with notes for Linux and macOS. Use when a mod must be verified in game, when navigating menus automatically, or when building a repeatable test or demo scene.
Also in 4 projects that use this
rehan-remadeSkillgame-recon
Figure out how a specific installed game can be modded, before writing any mod code. Covers where it's installed, the engine and version, managed vs native code, anti-cheat, loaders already present, save and config folders, and the community's modding route. Also whether this machine can run it (a Windows game on macOS or Linux, x64 on ARM). Use when the user asks "can I mod <game>?", "what engine is <game>", "how do people mod <game>", or at the start of any modding task. Produces MODDING_PLAN.md.
Also in 4 projects that use this
SamuelFerfortSkillshowcase-video
Make polished motion-design product videos (launch, promo, showcase, teaser, demo reel) entirely in code. Scenes are frame-exact HTML rendered with headless Chromium and ffmpeg, with an original synthesized soundtrack and SFX synced to one timeline. It researches reference launch videos and the real product's UI and brand, then proposes distinct concepts rooted in that product. The user approves one plan (storyboard and assets). After that it produces autonomously in a build → review → fix loop, with an independent reviewer and automated QA, until the video passes. Use it whenever someone asks for a promo, launch, showcase, explainer or motion-design video, an animated demo of their app or SaaS, "un vídeo promocional / de lanzamiento", or to fix or iterate on one of these videos, even if they never say "motion design".
Also in 4 projects that use this
QiuChenlySkillreverse-engineering
专业二进制逆向工程分析技能。使用IDA Pro MCP工具分析二进制文件、反编译代码、识别漏洞、理解程序逻辑。当用户要求分析可执行文件、反汇编、逆向工程、漏洞挖掘、恶意软件分析时使用此技能。
Also in 4 projects that use this
- +5 more from rehan-remade
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- rehan-remade/universal-modder★ 9.5ksame name
- levy-street/world-of-claudecraft★ 2.3ksame name
- google/capsem★ 179same name
- AhmedTahaAtiya/universal-modder-unrestricted★ 23same name
- Fixed-Seed/game-changer★ 8same name
- Arnie016/universal-modder-mac★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository28 other files it gives its agents.
- anime-jsSkill
- apple-designSkill
- atelier-bootstrapSkill
- atelier-buildSkill
- atelier-clarifySkill
- atelier-doctorSkill
- atelier-learnSkill
- atelier-planSkill
- atelier-promoteSkill
- atelier-reviewSkill
- atelier-shipSkill
- atelier-statusSkill
- atelier-updateSkill
- auth-lawSkill
- clean-code-lawSkill
- deploy-advisorSkill
- design-lawSkill
- docs-siteSkill
- gatewaySkill
- living-graphicsSkill
- loop-engineSkill
- mcp-makerSkill
- principal-mindSkill
- security-lawSkill
- stack-guidesSkill
- structure-lawSkill
- web-3dSkill
- web-qualitySkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 3 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
All record asset_manifest rows.
- Very specific: line 21
NO image model (Gemini, Imagen, DALL·E) outputs a real alpha channel.
- Distinctive: line 43
Keep headings, copy, links, and calls to action outside canvas/WebGL so they remain selectable, accessible, indexable, and stable before …
- Distinctive: line 110
Never store keys in the SQLite store or any committed file.
- Very specific: line 167
No native alpha/transparency on this route — pipe the decoded output through the same assets.py cut step as Gemini output.
- Very specific: line 195
When a project needs a logo/mark: rung 1–2 call the Gemini image models above with the same credentials (GOOGLE_API_KEY, or Vertex with …
- Distinctive: line 217
If the output has clutter, append: "absolutely no background texture, no reflections — mark and wordmark only," and retry once.
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Asset Pipeline
Tools
python <plugin>/mcp/assets/assets.py webp <image> [quality]— any raster → webp beside it (Pillow). Run on EVERY raster an agent adds topublic/.python <plugin>/mcp/assets/assets.py frames <video> [fps]— mp4 → webp frame sequence (needs ffmpeg; missing → tell the user the one-line install, continue with other work).python <plugin>/mcp/assets/assets.py cut <image> [tol=32]— flat background → transparent webp (samples the corner color; raise tol for gradients/noise).- All record
asset_manifestrows. Serve only webp to browsers.
Transparency & icons (no model can do this — we do)
NO image model (Gemini, Imagen, DALL·E) outputs a real alpha channel. The
recipe: generate the mark on a FLAT background (the logo prompt below already
forces this), then assets.py cut strips it locally — free, offline, zero
credentials. Photos / complex subjects: pip install rembg, then
rembg i in.png out.png (local U2Net model, also key-free).
Scrollytelling recipe (the storytelling primitive)
- Storyboard scroll beats first: entry, 2–4 transitions, resolution, and the content pinned beside each beat. Motion supports the story; it is not a decorative loop.
- Get one continuous 5–8 second source clip (user-provided in
workspace/references/video/, or generate below). Locked camera direction, constant motion, and no cuts produce clean bidirectional scrubbing. assets.py frames video.mp4 24→video_frames/frame_0001.webp …. Produce desktop and mobile crops when composition cannot safely center-crop.- Copy frames to
public/frames/<name>/; usetemplates/ScrollScrub.tsx. It loads a small window around scroll position, favors scroll direction, evicts distant frames, caps DPR, and draws cover-fit through one canvas. - Ship a meaningful poster. Reduced-motion, save-data, low-memory devices, failed decoding, and no JavaScript receive that poster and the complete narrative as ordinary semantic HTML.
- Keep headings, copy, links, and calls to action outside canvas/WebGL so they remain selectable, accessible, indexable, and stable before frames arrive.
- Design-law still applies: one cinematic sequence per page. Run web-quality checks for overflow, reduced motion, accessibility, metadata, and SEO.
Frame delivery is progressive. Load frame zero immediately, then a bounded
forward/backward chunk near the target. Never create every Image at mount for
a long sequence. Use immutable, content-hashed frame URLs with long cache
headers; do not lazy-load the poster or first frame. Decode before draw, render
at most once per animation frame, and recalculate canvas size through
ResizeObserver, not layout reads on every scroll event.
AI video generation — the ladder (never exit on missing credentials)
Omni = gemini-omni-flash-preview, Google's text→video model (Veo 3.1 is the
fallback family). Don't hand-roll the REST calls — the ladder is implemented:
python <plugin>/mcp/assets/video.py "a slow orbit around a matte black cube"
# or: from video import generate; rung, detail = generate(subject, out="hero.mp4")Verify every generation — measure, don't eyeball
python <plugin>/mcp/assets/verify.py hero.mp4 "#10B981" --audioPrints accent coverage % and mean audio dB, exits nonzero on failure. Run it on every generated video before showing the user. Two real defects shipped because nobody measured: a file with a valid AAC stream that was silent (mean −91 dB — "has audio" is not "is audible"), and a Veo clip whose prompt demanded one accent while the frame read 90% emerald against the ≤10% budget. Rewriting the colour rule three ways brought it to 1.8%, then 0.7% — but only measuring proved it. Report the number, never an adjective.
Audio — silence is a choice, not a default to inherit
Veo 3+ generates synced audio natively (its headline feature over Veo 2). Two things must agree or you get silence:
generate("a machine room", audio="low industrial hum, distant servos")This sets generateAudio: true in the request and writes the soundscape into
the prompt. Setting only the prompt does nothing — the API param governs.
audio=False (the default) is correct only for scroll-scrubbed
scrollytelling, where the browser never plays the file. For a hero, demo, or
social video, ask the user — do not inherit silence from the scrollytelling
recipe below. That inheritance shipped silent Veo 3 output for exactly this reason.
generate() returns (rung, detail). Rungs 1–2 wrote the mp4 and detail is the
model that served it. Rung 3 means detail IS the paste-prompt — that is a
success path, not a failure: show it to the user and keep working. An expired key
falls through to the next rung instead of raising.
| Rung | Needs | Model |
| 1. Public Gemini API | GOOGLE_API_KEY | gemini-omni-flash-preview (live since 2026-06-30); Veo 3.1 fallback |
| 2. Vertex AI | GOOGLE_APPLICATION_CREDENTIALS (service-account JSON path) + GOOGLE_CLOUD_PROJECT + GOOGLE_CLOUD_LOCATION | veo-3.1-generate-001 (GA) is the correct primary target. veo-3.1-generate-**preview** is a different, experimental id that 404s on most projects — mistaking it for "3.1 unavailable" is why builds silently fell back. veo-3.0-generate-001 was slated for discontinuation 2026-06-30: last resort only. Omni is tried first only when audio=False — it is silent-only and speaks the v1beta1 interactions API, not predictLongRunning; probing it the Veo way 404s and misreads as "model missing". Always report which model served. |
| 3. No credentials | nothing | Emit the paste-prompt below for the user's Gemini app (Omni Flash powers it for subscribers). NOT an error — say "no token, continuing" and proceed. |
| 4. Nothing works | — | Ask the user to drop any mp4 into workspace/references/video/. |
Credentials live in the project .env (gitignored — verify), written at
bootstrap. Standard var names above (they match gcloud/Vertex conventions).
Never store keys in the SQLite store or any committed file.
The paste-prompt (rung 3 — write it FOR the user, filled in)
Generate a short video for a website scroll animation. Audio: none — silent scroll-scrubbed footage. (For a hero/social video instead, replace this line with the soundscape you want.) Subject: <one concrete scene — object, environment, mood>. Style: premium industrial minimalism; near-monochrome palette on a dark
#0A0A0Bbackground with a single<accent color>accent; soft studio lighting; no on-screen text, no logos, no people (unless specified). Camera: one continuous slow <push-in | orbit | pan>, locked horizon, absolutely no cuts. Motion: smooth, constant speed throughout — this will be scrubbed by scroll, so no speed ramps, no flicker. Specs: 5–8 seconds, 16:9, highest detail.
Tell the user: paste into the Gemini app, download the mp4, drop it in
workspace/references/video/, then run Atelier build to continue — the
pipeline handles frames automatically. If Gemini refuses, simplify the Subject
line (concrete object, neutral scene) and retry once.
Image generation — pick the model by job (same credential ladder)
| Model ID | Speed / cost | Use for |
gemini-3.1-flash-lite-image (Nano Banana 2 Lite) | sub-2s, cheapest, 1K max | bulk + drafts: storyboard frames, icon/variant batches, layout comps, anything iterated fast; supports multi-turn local edits |
gemini-3.1-flash-image | fast, up to 4K, strong text rendering | default for final site imagery and logos |
gemini-3-pro-image | slow, premium | complex hero compositions only |
gemini-2.5-flash-image is legacy — never use it in new work. For
storytelling, offer the user the Lite option explicitly: a 20–30 frame
storyboard costs ~$1 and lands in under a minute, then regenerate only the
keeper frames on the default model.
Cloudflare Workers AI — sibling image route (verified, not a replacement)
Third image-gen option alongside the Gemini ladder above, when the project has
Cloudflare credentials (CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID — same
rule as Gemini: project .env, gitignored, never in the SQLite store or a
commit). Two distinct routes live under the SAME endpoint family — verify
which one before promising "free":
- Native Workers AI models (
@cf/...) — free, runs on Cloudflare's own compute.POST /client/v4/accounts/{account}/ai/run/{model}— these models takemultipart/form-data, even for a text-only prompt (a JSON body 400s with a genericAiError: Invalid input, no matter how correct the JSON looks — this is the one gotcha that burns an agent's first two attempts). Verified working:@cf/black-forest-labs/flux-2-klein-9breturns a base64 JPEG synchronously, no billing required.
No native alpha/transparency on this route — pipe the decoded output through the samecurl --request POST \ --url "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run/@cf/black-forest-labs/flux-2-klein-9b" \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --form "prompt=<subject>" --form "width=1024" --form "height=1024" # response: {"result":{"image":"<base64 JPEG>"}}assets.py cutstep as Gemini output. - BYOK-proxied models (
openai/gpt-image-2, etc.) — billed, NOT free.POST /client/v4/accounts/{account}/ai/run(model in the JSON body, not the URL) with{"model":"openai/gpt-image-2","input":{...}}. This one DOES supportbackground:"transparent"+output_format:"webp"natively (skips the cut step entirely) — but it 402s with"Insufficient balance; add money to your gateway or use BYOK"(code 2021) on an unfunded account. Only use it once the user confirms the AI Gateway has credit or an OpenAI key is linked — never assume it's free because it lives under/ai/runnext to the native models. Fullinputparams:prompt(required),size(1024x1024/1024x1536/1536x1024/auto),quality(low/medium/high/auto),background(transparent/opaque/auto),output_format(png/webp/jpeg),images(array of base64/data-URI inputs, 1-16, for edits/composites). - No Cloudflare credentials, or user prefers the ChatGPT UI directly — same underlying model as route 2, so the same params apply as plain English in the prompt: state the size, "transparent background", and "export as PNG" explicitly; ChatGPT's UI has no size/quality controls, the model reads them from prose.
Route 1 is the default recommendation (free, no gate) for icon/tile-scale
batches; keep Gemini as the default for finals needing 4K or heavy text
rendering, since Cloudflare's native catalog doesn't match gemini-3.1-flash-image's
resolution ceiling.
Logo & brand-mark generation (same ladder, image models)
When a project needs a logo/mark: rung 1–2 call the Gemini image models
above with the same credentials (GOOGLE_API_KEY, or Vertex with
service-account creds); rung 3 emit the universal prompt below for ANY
platform (Gemini app, ChatGPT/DALL·E, Midjourney). Always generate light + dark variants, convert to webp, and
check crispness at 16px. The mark must obey design-law: flat vector look,
hairline geometry, near-monochrome + the project's ONE accent — never
gradients, 3D, or mascots.
Universal logo prompt (fill the brackets, works on every platform):
Minimal geometric logo mark for "
<NAME>", a premium<what it does>company. Concept: <one visual idea tied to what the company means — e.g. "a loop whose final segment resolves into a filled square: iteration reaching done">. Style: Swiss / International Typographic Style, flat vector, thin hairline strokes of consistent 1.5px optical weight like an architectural schematic, generous negative space; no gradients, no 3D, no shadows, no mascots, no extra glyphs. Colors: ink-black strokes on off-white #FAFAF8 with exactly ONE small filled element in<ACCENT HEX>. Must stay crisp at 16px favicon size. Second variant: dark mode — off-white #F5F5F3 strokes on near-black #0A0A0B, same accent element. Optional lockup: wordmark "<NAME>" in a grotesk sans, weight 500–600, all caps, +6–8% letter-spacing.
If the output has clutter, append: "absolutely no background texture, no reflections — mark and wordmark only," and retry once. Host integration: read the runtime contract for plugin/project paths, host command names and capabilities. Explicit user instructions and repository conventions take precedence over these defaults.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

