Skip to main content
asset-strategy is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Route any ‘I need a [thing]’ asset request to the right skill: 2D, 3D, audio, video, VFX or animation.

When your agent uses it

  • Planning asset creation, picking an asset pipeline, or routing an ‘I need a [thing]’ request to the right specialist skill
  • “I need a sword / a forest / a boss theme / an explosion” and it is unclear which pipeline (2D, 3D, audio, video, VFX, animation) fits
  • Deciding what to generate versus import from the library before a big content pass

Install

summer setup installs every skill for your agent. To add only this one:
Swap claude-code for your agent, such as codex or cursor. See Skills for every option.

The skill

Classify the user’s request, ask at most one clarifying question, then dispatch to the right specialist via the Skill tool. Don’t generate anything yourself — every media-type/asset-class combination has a dedicated specialist that owns the prompt patterns, polycount targets, gates, and fallbacks. Your job is the routing decision, not the work.

Step 1 — Classify by media type

If the request spans rows (“a witch with idle and a fire spell”), classify the first asset and dispatch — the specialist hands off when it’s done.

Step 2 — Disambiguate (one question max)

Ask the exact phrase before dispatching. Skipping the question is the most common routing mistake.

Step 3 — Dispatch

Invoke the specialist via the Skill tool. Don’t paraphrase — let it run. Pass the user’s original phrasing through.

Routing tables

2D assets

3D assets

Polycount targets (hero 8k–15k, grunt 3k–6k, mobile 1k–3k, cinematic 20k–40k) live in each specialist.

Audio

Animation

Video

Visual effects

VFX is code, not generative — recipes are shader + GDScript + node setup, not image generation.

How the specialists call Summer

The specialists name Summer’s asset work by operation. A call written area.action({...}) is one operation: use the tool summer_area_action when your client lists it, else summer_call({ op: "area.action", input: {...} }). summer_search finds any operation and its exact input.
  • Find and read: assets.search({ query, scope }) (scope: library (default), mine for their own, all), then assets.get({ assetId }) for the file, downloadUrl and viewerUrl. Reuse before generating.
  • Generate: assets.generate_image, assets.generate_3d, assets.generate_audio, assets.generate_video, assets.generate_motion, assets.generate_sfx_choices (then assets.choices for the person’s picks). They spend the person’s credits; dryRun: true returns the estimate (credits, balance, enough) and makes nothing.
  • Wait: 3D, video and animation answer at once with a job; jobs.wait({ jobId, timeoutSeconds: 50 }) until finished, and the finished job’s result holds the asset ids.
  • Save on this machine: with the local Summer MCP or the CLI, out (a folder or a file path) on a generate call, jobs.wait or assets.get saves the file there, and the answer adds localPath.
  • Edit their assets: assets.remove_background, assets.slice_sheet, assets.update (title, description, tags, private or team), assets.make_public (lists one for everyone in Summer’s asset store), assets.delete (deletes for good; asks the person unless they let their agent delete, and then nothing is deleted until they confirm).
  • Permissions: The person decides once what their agent may do: publishing (including assets.make_public), spending and building run at once by default, and deleting for good asks. An operation whose group they have not granted answers needs_approval with a link: give the link to the person, then jobs.wait on the apr: job.
  • Upload an image from disk: assets.upload_begin, then assets.upload_complete.
  • One-shot makers: makers.<tool> (for example makers.npc_voice, makers.trailer_forge); summer_search lists them.

When NOT to use this skill

  • The user already named the specific skill — go straight there.
  • The user is debugging or running the game — route to debug or play.
  • The asset is an existing Summer asset ID — call assets.get({ assetId }), then summer_import_asset_by_id.
  • The asset is being imported from a non-Summer URL (.glb / .wav from Sketchfab, Quaternius, AmbientCG) — call summer_import_from_url directly.
  • The user wants to plan the whole game’s asset list — brainstorm-game first, then this router on each item.

Anti-patterns

  • Generating yourself instead of dispatching. This file holds zero prompt patterns by design. If you’re writing an assets.generate_image call from here, stop and invoke the specialist.
  • Skipping the disambiguation question. Sends users to the wrong specialist and burns a paid generation. The verbatim phrasing in Step 2 is required.
  • Routing concept-art to character-portrait (or the reverse). Different goals: concept-art produces 4 divergent variants for art direction; character-portrait produces 1 polished bust for dialogue UI.
  • Inventing skill names. Only dispatch to skills listed above. If nothing fits, ask the user to clarify.
  • Routing rigged-humanoid requests to prop-model. Anything that needs animation always goes to character-model.

Without Summer Engine

In a session without Summer Engine tools (the assets profile; the summer-assets skill has the whole loop), the routing tables still pick the skill. Leave out every step that imports (summer_import_asset_by_id, summer_import_from_url): deliver the file with out instead (the summer-assets skill says how).

Fallback (no MCP)

The router still works without MCP — classification is text-only. It hands off to the specialist, which surfaces its own no-MCP fallback (typically: run the same generation in the Summer dashboard, then summer_import_from_url once MCP is back).

From a shell

No Summer MCP tools in this session? Run each one as a command; when summer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
  • summer-assets: Make game assets with Summer, no Summer Engine: find, generate and download 3D models, images, audio and video for any engine or app.
  • character-portrait: Generate one polished character bust for dialogue UI, character select, lore cards or codex entries.
  • concept-art: Explore art direction with 3-4 rough concept variants of a character, environment or prop.
  • pixel-art: Generate pixel-art sprites, items, tiles and portraits at a set resolution with a limited palette.
  • skybox-panorama: Generate a 360-degree sky panorama and wire it as a PanoramaSkyMaterial Sky resource on WorldEnvironment.
  • sprite-sheet: Generate animated 2D character sprite sheets (walk, attack, idle, death) for AnimatedSprite2D.
  • tileable-texture: Generate a seamless tileable texture for walls, floors or terrain, wired as a StandardMaterial3D albedo.
  • ui-graphics: Generate game UI art (icons, buttons, panels, frames, HUD widgets) flat, on a transparent background.
  • character-model: Generate a rigged humanoid (player, NPC, enemy, boss) from a T-pose reference, previewed before rigging.
  • environment-kit: Generate a modular environment kit: walls, floor tiles, pillars, doors, arches in one visual style.
  • organic-model: Generate organic 3D shapes (trees, rocks, mushrooms, plants, crystals) where irregularity looks natural.
  • prop-model: Generate one static 3D prop (sword, barrel, chest, lantern, statue): one object, no rig, a MeshInstance3D.
  • vehicle-model: Generate a hard-surface vehicle (car, spaceship, mech, boat, tank) as a static or VehicleBody3D mesh.
  • animation-tree: Wire AnimationTree state machines and blend trees: locomotion blends, attack interrupts, hit reactions.
  • facial-and-lipsync: Make a character’s mouth move with a voice-over: phonemes, viseme blendshapes, facial expressions.
  • generate-motion: Attach a library animation clip (idle, walk, run, attack) to a rigged character via AnimationPlayer.
  • text-to-motion: Make custom 2-second animation clips from text on the user’s own rigged models: people, animals, props.
  • procedural-animation: Runtime bone changes on top of clips: head look-at, foot IK, hand grabs a prop, lean, recoil.
  • retarget: Apply animation clips from one rigged character to another: one clip library, many models.
  • adaptive-music: Wire music stems to game state: combat, explore, boss and tension crossfades on a shared bus.
  • ambient-bed: Generate a long looping location ambience (forest, dungeon, city, cave) on the Ambient bus.
  • audio-direction: Define the game’s sound (music style, SFX vocabulary, dynamic music) as .summer/audio-bible.md.
  • music-track: Generate a music track: game loops of 30s or more with a loop point, or linear cinematic cues.
  • sound-effect: Make sound effects (swings, hits, whooshes, reloads, UI): three versions to pick from, then wire them.
  • voice-line: Generate voice lines (NPC barks, narrator, dialogue) with a character-to-voice choice and multi-line support.
  • animated-loop: Generate a short seamless video loop: splash background, animated logo backdrop, idle title screen.
  • cinematic-cutscene: Generate a non-interactive cutscene: a reference-locked 5-10s video shot with optional voiced dialogue.
  • trailer-shot: Generate trailer footage: slow-mo combat, establishing shots, hero beats, splash screens, 5-10 seconds.
  • game-feel: Add juice: hit-flash, trauma camera shake and audio ducking, one hit fires all three.
  • vfx-dissolve: Dissolve effect: a mesh burns away with a glowing edge, from a noise-threshold ShaderMaterial.
  • vfx-fire: Fire effect: animated flames from GPUParticles3D, a particle shader and a noise color ramp.
  • vfx-hit-spark: Hit-spark effect: a one-shot burst of additive particles oriented to the surface, fired on impact.
  • vfx-lightning: Lightning bolt effect: a jagged procedural path with a glow shader, end sparks and screen shake.
  • vfx-magic-glow: Magic-glow effect: a pulsing OmniLight3D, drifting additive motes and an optional emission shader.
  • vfx-muzzle-flash: Muzzle-flash effect: a one-shot ~80 ms burst at a gun barrel, from particles or a star-burst quad.
  • vfx-smoke: Smoke effect: a rising column or puff of soft particles with a noise and density falloff shader.
  • vfx-water-ripple: Water-ripple effect: animated normal-distortion ripples on a water plane or Decal, set off by impacts.

Source: library/skills/asset-strategy/SKILL.md, rendered from summer-engine@4.3.0 on npm.