3.8 KiB
Generated art (2D only)
AGENTS.md § "Skills" states the availability rule: only call imagine_* tools
when they appear in your available tools list, and ship CSS / SVG / emoji /
canvas / geometric-WebGL art when they don't. This file is the pipeline detail
for when they are listed.
Illustration
When the product needs illustration (heroes, empty states, textures, icons),
generate 2D assets via the image tools — follow the imagine skill
(imagine_text_to_image / imagine_image_to_image / imagine_text_to_video /
imagine_image_to_video path-based stack; show results with render_file).
Image tools do not create 3D models; use geometry/glTF for interactive 3D
(building-games).
Game art
- Doctrine, not the pipeline: for any game sprites, sheets, animations,
tiles, or UI art, load
game-asset-coreplus the matching specialist —game-animation-frames(motion / loop laws),game-tilesets(seamless tiles / transitions),game-character-consistency(turnarounds / variants),game-ui-icons(HUD / buttons / icon sets). These cover engine-ready defaults, blind verify, and retry discipline — not a substitute for the pipeline skills below, and not a substitute for implementing the app. - 2D sprites / animation sheets (characters, walk cycles, attacks,
projectiles, FX, props): run
generate2dsprite— solid#FF00FFmagenta sheets + local chroma postprocess scripts. That magenta key is required by the processor; do not invent a different "keyable" color on this path. Layergame-asset-core(+game-animation-frames/game-character-consistency) for QC. - Exception — abstract/geometric games (tetris, snake, pong, breakout, and the like) are correctly rendered procedurally. Generated sprite sheets there are a quality regression: do not invoke image generation for them even when gen tools are listed.
- 2D maps / levels / prop packs (top-down RPG, side-scroller stages, layered
maps, collision zones): follow
generate2dmap. Default engine target is browser (raw_canvas/ Phaser), not Godot/Unity. Tileable ground/walls → alsogame-tilesetsfor seamlessness checks. - Denser motion from video (optional, Grok-only):
video2dsprite—imagine_image_to_video→ ffmpeg → magenta chroma scripts. Prefergenerate2dspritefor crisp production sheets, and usevideo2dspriterather than ad-hoc ffmpeg for the sandbox execution path.
Share card / app identity
A custom share card is the default: open the og skill and produce a custom
public/og.jpg from the app's own art before you finish.
- It covers games of every kind and rendering tech (a DOM tic-tac-toe is
still a game), whimsical apps, creative tools, and brand-forward pages. Only
plain utilities (converters, CRUD trackers, admin dashboards) keep the
og.grok.meplaceholder, and the favicon alone never satisfies this. - Custom art is
public/og.jpgand"card": "custom"insrc/lib/og/site.json. Bake infers custom from the file when the flag is missing, butbrand-checkstill requires the field. - Games also set
"type": "x:game"(X presents the unfurl as a game card) and shippublic/x-banner.jpg(50:11, 1200×264).twitter:card=summary_large_imageis layout, not the game signal. - Title defaults to the host slug;
src/lib/og/site.jsonis only needed when the display name is not the slug, or the app is a game. - The tags come from the PWA injector (
scripts/grok-pwa-shared.mjs), which overwrites anything in__root.tsx. Live preview emits the same tags (viaX-Forwarded-Host), and identity is baked atvite buildso published Nitro can inject without reading the workspace filesystem. - Applies at build time, publish or not.