Concept logo

Concept

Organization
with-pebbly
concept

Before drawing a new character, prop, scene or animation, write an art spec, turn it into a ready-to-paste prompt for an image-generation model, and offer the user a choice — generate a concept sheet or storyboard with it and send it back, or continue without one. When reference art arrives (from that prompt or from the user), read it into a PixelSpec and import it panel by panel, so the pixel work reproduces a decided design instead of improvising one. Use after the brief for anything drawn from scratch, and whenever the user supplies reference art; skip for edits to existing art.

Overview

Publisherwith-pebbly
Repositoryaseprite-ai-artist
Skill nameconcept
Stars
456
Forks
28
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by with-pebbly on GitHub. Read the source before you install it.

Installation

Install the Concept AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/with-pebbly/aseprite-ai-artist/tree/main/skills/concept
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/with-pebbly/aseprite-ai-artist.git /tmp/aseprite-ai-artist
mkdir -p .claude/skills
cp -r /tmp/aseprite-ai-artist/skills/concept .claude/skills/concept
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Concept in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Concept on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Concept is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Design it first — concept sheet and storyboard

Drawing from nothing asks one model to invent a character, a pose, a camera, a palette and the placement of every pixel, all at once. It is the step where generated pixel art falls apart. Split the job:

  • An image model owns the design — the look of the character, the key poses, the storyboard. That is what those models are good at.
  • You own the pixel interpretation — reading that design into a canvas, a palette and a set of shapes, then drawing it with the rules.

The reference is a guide for proportion, pose and colour masses. It is never the pixels: a concept downscaled onto the canvas is anti-aliased mush, and no amount of cleanup turns it into pixel art (see What this must not do).

Two modes

The user gave youModeStart at
Only words ("a fire mage with a walk cycle")Creative — spec → prompt → offerstep 1
An image — concept art, a sketch, a screenshot, a sheetReference — read it, import itstep 5
An edit to art that already existsneither — use aseprite:fix—

Procedure

1. Start from the brief

aseprite:brief has already fixed canvas size, palette, view, light, outline and destination. Do not ask any of it again. The prompt needs colours, not a palette's name: for a preset, read its hex values from the knowledge://palettes resource (no document has to exist yet); for an open sprite, palette op="get".

2. Write the art spec

Short, concrete, in working notes. Everything the image model and, later, you will be held to:

  • Subject and scenario — who or what, one line of personality, and for an animation what happens from the first frame to the last.
  • Target — canvas W×H, how many pixels tall the subject stands, view and facing, light direction, outline style.
  • Silhouette — heads tall, the two or three shapes that must read at 1× (a pointed hat, a long coat, an oversized sword).
  • Palette — the exact hex list with roles: outline, skin ramp, cloth ramp, metal ramp, accent. Its size is the ceiling.
  • Animation — cycle, frame count, one line per key pose, timing in ms, loop or one-shot. Plan it with rules://05-animation (or the animation-director agent) — the storyboard panels are these keys.
  • Must not — text, background scenery, props that are not in the brief, camera changes between panels.

3. Build the prompt

In English whatever language the conversation is in — image models follow English prompts best. It has to produce something you can slice with reference op="import" grid=…, so the layout contract is not optional: equal panels, one row, same scale and ground line in every panel, flat background, no text.

For a character or prop — a concept sheet:

Pixel art character concept sheet of {subject}: {one-line personality}.
{view} view, {facing}, light from the {light}. Low-resolution pixel art look:
the character is about {height}px tall on a {W}×{H} sprite, hard pixel edges,
no anti-aliasing, no gradients, {outline style} outline.
Palette — use only these colours: {hex list with roles}.
Layout: {n} panels in a single horizontal row, equal width, evenly spaced,
the same character at the same scale in every panel, feet on the same ground
line: {panel 1: front | panel 2: side | panel 3: back | …}.
Flat plain {#ffffff or #808080} background, no scenery, no text, no labels,
no borders, no watermark.

For an animation — a storyboard, one panel per frame:

Pixel art animation storyboard of {subject} performing a {cycle}.
{view} view, facing {facing}, camera locked, light from the {light}.
Low-resolution pixel art look: the character is about {height}px tall on a
{W}×{H} sprite, hard pixel edges, no anti-aliasing, {outline style} outline.
Palette — use only these colours: {hex list with roles}.
Layout: exactly {N} panels in a single horizontal row, equal width, evenly
spaced, identical character size and ground line in every panel — each panel
is one frame, left to right:
1. {key pose 1}
2. {key pose 2}
…
{N}. {key pose N}
Flat plain {background} background, no motion lines, no text, no numbers,
no borders, no watermark.

Ask for both when the request is an animated character: the sheet fixes the design, the storyboard fixes the motion. Fill every {…} — a prompt with a placeholder left in it produces a generic character.

4. Offer the choice — once, in one message

Put the prompt in a single fenced code block, so it copies in one action. If the brief is still awaiting confirmation, this is the same message — decisions, prompt, choice — not a second round trip. Then offer exactly these options, through the harness's question tool when it has one (Claude Code's AskUserQuestion, omp's ask), otherwise as a numbered list:

  1. "I'll generate references" — the user pastes the prompt into any image model (ChatGPT, Gemini, Midjourney, …) and sends the result back. Ask for the image as a file path — saved to disk, or dragged into the chat where the harness turns that into a path — because reference import reads files, not pixels you have only seen in the conversation.
  2. "Continue without references" — go straight to drawing from the spec. The spec still binds: it is the design now.

If your harness has an image-generation tool, add it as a third option ("you generate it"), never as a silent default. When the user chooses option 1, stop and wait for the image; do not start drawing in the meantime.

5. Read the reference into a PixelSpec

Look at the image first, then write down what you read — before any pixel is placed. This is where the design becomes decisions you can check against:

json
{
  "canvas": [32, 32],
  "view": "front-3/4",
  "source": { "path": "…/storyboard.png", "panels": 4, "panelSize": [256, 256] },
  "silhouette": { "head": [11, 3, 20, 11], "torso": [10, 12, 22, 22], "staff": [23, 2, 25, 30] },
  "landmarks": { "eyesY": 8, "waistY": 18, "feetY": 30 },
  "palette": { "outline": "#1d2b53", "robe": ["#7e2553", "#ff004d"], "skin": ["#ab5236", "#ffccaa"] },
  "frames": ["contact, staff forward", "down, 1px lower", "pass, 1px higher", "up"],
  "deviations": ["belt buckle and runes dropped — 1px at this size is noise"]
}
  • Coordinates are target pixels, not source pixels: scale what you see down to the canvas and write the result. Bounding boxes are [x0, y0, x1, y1].
  • Palette: sample the panel — reference op="sample_palette" path=… region=… — then map each colour mass onto the sprite palette. Do not adopt the sampled colours; an image model's "four colours" are forty.
  • Deviations are the design decisions the pixel version makes on purpose: what does not survive at this size and is simplified or dropped. Listing them here is what lets the review loop tell a deliberate change from a miss.
  • No reference (the user chose to continue)? Write the same PixelSpec from the art spec alone. It is still the thing the drawing is checked against.

6. Import it

After aseprite:new has made the document:

  • A concept sheet — import the panel for the view you are drawing: reference op="import" path=… region={x, y, width, height} (source pixels).
  • A storyboard — create the frames first (frame op="add" count=N-1), then one call puts panel i on frame i of a single reference layer: reference op="import" path=… grid={columns: N, rows: 1}. Panels that are not evenly spaced: one region import per panel, each with its frame.
  • look op="compare" on frame 1: the left half is what you imported. Wrong panel, or the character cut off? Fix the region now, not after drawing.

7. Hand over to drawing

aseprite:draw (or aseprite:animate for a storyboard) does the work, over the reference. The loop that makes a reference pay off:

  1. look op="compare" — reference left, art right, same scale.
  2. Name the three to five largest mismatches — silhouette, proportion, pose, placement of colour masses. Not "improve it": a list.
  3. Fix only those, in one draw call.
  4. Compare again. Stop when every remaining mismatch is a listed deviation.

Two rounds is normal. Remove the reference layer before export (reference op="remove") — aseprite:export checks for it.

What this must not do

  • Pixelize the concept. Importing the reference and calling it the art, copying its pixels through read_pixels into draw, or recolouring it into the palette all produce the same AI mush. Draw the sprite; use the reference.
  • Ask twice. The spec, the prompt and the choice are one message.
  • Hide the prompt in prose, translate it, or leave {placeholders} in it.
  • Draw while waiting for a reference the user said they would send.
  • Treat the reference as more authoritative than the brief. If the image model changed the palette, the view or added a cape nobody asked for, the brief wins — note it as a deviation.

Related

aseprite:brief before this, aseprite:draw and aseprite:animate after it. rules://03-silhouette-and-form for reading proportions, rules://01-palette-and-color for mapping colours onto a palette, rules://05-animation for key poses. rules://36-character-design for shape language and silhouette, rules://37-views-and-directions for the camera, rules://91-composition-and-scenes for anything with a background, and the subject rows of skill://studio.

Frequently asked questions

What does the Concept AI skill do?

Before drawing a new character, prop, scene or animation, write an art spec, turn it into a ready-to-paste prompt for an image-generation model, and offer the user a choice — generate a concept sheet or storyboard with it and send it back, or continue without one. When reference art arrives (from that prompt or from the user), read it into a PixelSpec and import it panel by panel, so the pixel work reproduces a decided design instead of improvising one. Use after the brief for anything drawn from scratch, and whenever the user supplies reference art; skip for edits to existing art.

Why use Concept on TypingMind?

Because you install it once and use it with any model. Concept is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Concept in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/with-pebbly/aseprite-ai-artist/tree/main/skills/concept. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Concept?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Concept?

As many as you like. As long as a model supports skills, you can use Concept with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Concept AI skill free?

Yes. It is published on GitHub by with-pebbly under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇