generate2dsprite — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited generate2dsprite (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill for self-contained 2D sprite or animation assets.
When a larger game or playable prototype needs sprites, use this skill for the visible sprite assets and keep runtime/game assembly separate. Do not replace requested sprite assets with code-drawn placeholders.
Infer these from the user request:
asset_type: player | npc | creature | character | spell | projectile | impact | prop | summon | fxaction: single | idle | cast | attack | shoot | jump | hurt | combat | walk | run | hover | charge | projectile | impact | explode | deathview: topdown | side | 3/4sheet: auto | 2x2 | 2x3 | 2x4 | 3x3 | 3x4 | 4x4 | 5x5 | custom_grid | strip_1x3 | strip_1x4frames: auto or explicit countbundle: single_asset | unit_bundle | spell_bundle | combat_bundle | line_bundle | hero_action_bundle | engine_atlaseffect_policy: all | largestanchor: center | bottom | feetmargin: tight | normal | safeart_style: pixel_art | clean_hd | pixel_inspired | retro_pixel | map_style | project-nativereference: none | attached_image | generated_image | local_filelayout_guide: none | optional | recommendedprompt: the user's theme or visual directionrole: only when the asset is clearly an NPC rolename: optional output slugRead references/modes.md when the request is ambiguous.
4x4, 5x5, or custom engine atlas. A raw generated sheet should represent one action family, one continuous sequence, one canonical directional locomotion sheet, or one prop/asset pack.fx, projectile, or impact sheets and layer them in the game.image_gen for every raw image.image_gen.view_image first; do not rely on a filesystem path in the prompt as the visual reference.$generate2dmap or when the user/project requests a different style. Match the map or reference style first.1x4, 1x6, 1x8, or 1xN for characters, players, controllable heroes, creatures, NPCs, enemies, summons, animated props, or any asset where a body/subject must stay centered. Single-row raw generation is too likely to drift horizontally and crop inconsistently.2x2, 6 frames -> 2x3, 8 frames -> 2x4, 9 frames -> 3x3, 12 frames -> 3x4 or 4x3, 16 frames -> 4x4.2x2, 3x3, and 4x4 packs are only for compact props. Do not put platforms, floors, bridges, walls, ladders, gates, doors, long hazards, wide/tall props, collision-bearing objects, or tileset/strip pieces into square prop packs; use one-by-one, 1x3/1x4 strips, custom wide cells, or a tileset-like atlas instead.#FF00FF background rule unless the user explicitly wants a different processing workflow.Pick the smallest useful output.
Examples:
player + player_sheetplayer + hero_action_bundle2x2 for 4 frames2x2 or 2x3 depending on needed frame count2x22x2player + hero_action_bundle2x2 or 2x3, body-onlyfx sheet when the attack needs a wide visual effectimpact sheet when hits need feedbacknpc + single_asset or unit_bundlecreature + idle + 3x3spell_bundleline_bundleUse references/prompt-rules.md.
Choose art_style before writing the prompt:
pixel_art or retro_pixel for classic sprites, 16-bit RPG actors, and requests that explicitly ask for pixel art.clean_hd for map props or assets intended to match clean hand-painted HD maps.pixel_inspired only when the user wants a pixel-adjacent look without retro chunkiness.map_style or project-native when an existing map, game, or reference should define the style.If a reference is involved:
view_image; for freshly generated references, rely on the image already shown in context.Keep the strict parts:
#FF00FF backgroundMixed-action atlas guardrail:
image_gen to generate unrelated action rows in one raw sheet, such as row 1 idle, row 2 run, row 3 shoot, row 4 jump, for a controllable hero or main character.image_gen to generate raw single-row action strips such as 1x4 idle, 1x4 run, 1x4 shoot, or 1x4 jump for a controllable hero, character, creature, NPC, enemy, summon, or animated prop.4x4, 5x5, custom atlas, or row-strip delivery format, generate the action grids separately, process and QC them separately, then assemble the delivery atlas deterministically.Animated body grid guardrail:
1x4 and other raw single-row sheets are not valid defaults for animated bodies. This includes players, controllable heroes, creatures, NPCs, enemies, summons, animated props, and body-attached combat actions.2x2 for 4-frame body actions. This is the default for idle, short attack, shoot body, jump, hurt, hover, and compact side-view walk/run actions.2x3 for 6-frame body actions such as cast, attack, summon, run, charge, or transformation.2x4, 3x3, 3x4, or 4x4 for longer body actions. Prefer a compact grid over a long row.4x4 can remain a raw generation shape because it is a canonical directional locomotion sheet, not four unrelated action rows.edge_touch_frames is empty.Map prop pack guardrail:
2x2, 3x3, and 4x4 raw prop packs only for compact props such as rocks, shrubs, barrels, crates, lamps, small signs, pots, debris, and small ornaments.1x3 or 1x4 strips for repeatable platform/floor assets, with left cap, middle repeat, right cap, and optional slope/corner/end variant.If a layout guide is useful, generate one before calling built-in image_gen:
python scripts/make_layout_guide.py \
--rows <rows> \
--cols <cols> \
--cell-width 384 \
--cell-height 384 \
--output <run-dir>/references/<rows>x<cols>-layout-guide.pngThen make the guide visible in the conversation context and tell image_gen to use it only for invisible slot count, spacing, centering, and safe padding. The output must not reproduce guide boxes, safe-area rectangles, center marks, labels, borders, or guide background.
Use layout guides deliberately:
prop_pack_3x3, prop_pack_4x4, tileset-like atlases, fixed multi-row animation grids, and non-directional 16-frame action sequences such as casting, summoning, charging, death, or transformation3x3 large idle and high-value showcase loops when previous generations drift in scale or spacing4x4 four-direction walk sheets, because the guide can make directional poses too conservative; use it only after an unguided run fails layout or edge safetyUse built-in image_gen.
Do not use Three.js, Canvas, SVG, HTML/CSS, PIL drawing, or other code-generated art as the raw sprite source. These are acceptable only for runtime display, debug overlays, deterministic layout guides, or postprocessing already-generated images.
After generation:
$CODEX_HOME/generated_images/...Run scripts/generate2dsprite.py process on the raw image.
The processor is intentionally low-level. The agent chooses:
rows / colsfit_scalealignshared_scalecomponent_modecomponent_paddingedge_touch rejection strategyUse the processor to gather QC metadata, not to make aesthetic decisions for you.
For hero action bundles, process each action grid as its own sheet before any final atlas assembly. Use component_mode=largest for body-only hero grids. Use component_mode=all only for projectile, impact, aura, slash FX, or intentionally detached FX sheets, not for fixed-cell hero body attacks that need stable body scale.
Check:
If not, rerun with different processor settings or regenerate the raw sheet.
For a single sheet, expect:
raw-sheet.pngraw-sheet-clean.pngsheet-transparent.pnganimation.gifprompt-used.txtpipeline-meta.jsonFor player_sheet, expect:
For spell_bundle or unit_bundle, create one folder per asset in the bundle.
For hero_action_bundle, expect:
engine-atlas-transparent.png only after per-action QC passesidle2x23x3cast -> prefer 2x3projectile -> prefer 2x2 for short animated loops; use row strips only when the engine specifically requires a strip, and assemble that strip after QC when practicalimpact / explode -> prefer 2x2walk4x4 for four-direction walk2x2hero_action_bundle1x4 strip2x22x3 for 6-frame actions and 2x4, 3x3, 3x4, or 4x4 for longer actions4x4, 5x5, or custom atlas4x4, 5x5, and custom gridsshared_scale by default for any multi-frame asset where frame-to-frame consistency matterslargest component mode for hero/player body grids; use all for separate FX/projectile/impact sheetsreferences/modes.md: asset, action, bundle, and sheet selectionreferences/prompt-rules.md: manual prompt patterns and containment rulesscripts/generate2dsprite.py: postprocess primitive for cleanup, extraction, alignment, QC, and GIF export~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.