Manage Sprite Atlas logo

Manage Sprite Atlas

OrganizationPopular
Unity-Technologies
manage-sprite-atlas

Manages SpriteAtlas assets through a prebuild pipeline, covering master and variant atlases, packing settings, and platform overrides. Use when asked to create or optimize sprite atlases.

Overview

PublisherUnity-Technologies
Repositoryskills
Skill namemanage-sprite-atlas
Stars
1K
Forks
61
Bundled files
44
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.

  • 44 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Unity-Technologies on GitHub. Read the source before you install it.

Installation

Install the Manage Sprite Atlas 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/Unity-Technologies/skills/tree/main/skills/manage-sprite-atlas
  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/Unity-Technologies/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/skills/manage-sprite-atlas .claude/skills/manage-sprite-atlas
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Manage Sprite Atlas 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 Manage Sprite Atlas 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 Manage Sprite Atlas 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.

Unity SpriteAtlas V2

Provides editor-safe procedural knowledge for scripting atlases in Unity projects. V2 enforces strict separation between editor authoring and runtime access.

⚠ Critical V2 Principle: SpriteAtlas is runtime-only. SpriteAtlasAsset is editor-only. Never mix contexts. Always use V2.

🚨 CRITICAL: Required Checks and User Inputs Before Implementation

ALWAYS perform these checks and ask these questions BEFORE generating any code:

Read the shipped resources before writing code (REQUIRED)

This skill ships working C# under resources/, and the atlas code that goes wrong is almost always code written without reading it first. Open the files for the path you are taking, then write.

resources/ holds 38 files in all, covering custom packers, variants, platform settings, and runtime access. Browse the directory when your task is not in the table above rather than inventing an approach. Reaching for the API from memory instead of reading these is the single most common cause of an atlas that imports cleanly and then does nothing at runtime.

0. Check for Existing Scripts (REQUIRED FIRST STEP)

BEFORE generating any code, scan the project for existing SpriteAtlas scripts generated by this skill.

Search for files containing the identifier: // [UNITY-SKILL:SPRITEATLAS]

If existing scripts are found, ALWAYS ask the user with this format:

"I found existing SpriteAtlas scripts in your project:

Prebuild Generator:

  • Assets/Editor/SpriteAtlas/SpriteAtlasPrebuildGenerator.cs

Addressables Builder:

  • Assets/Editor/SpriteAtlas/BuildAddressablesPostprocess.cs

Runtime Loader:

  • Assets/Scripts/SpriteAtlas/SpriteAtlasLateBinding.cs

What would you like to do?"

Then present options:

  • Option A: Update existing scripts (Recommended if requirements changed)

    • Regenerates scripts at existing paths
    • Preserves file locations
    • Updates to latest version
    • ⚠ May overwrite custom modifications
  • Option B: Create new scripts with different names

    • Generates alongside existing scripts
    • Allows multiple atlas configurations
    • Original scripts remain unchanged
    • You'll need to specify new names/paths
  • Option C: Abort (keep existing unchanged)

    • No code generation
    • No changes to project
    • Use this if you want to keep current setup

User Choice Handling:

  • If A chosen: Regenerate at existing paths, increment version to 2.0.1+
  • If B chosen: Ask for new script names (e.g., "SpriteAtlasPrebuild_Custom.cs"), then generate
  • If C chosen: Stop immediately, inform user no changes were made

1. Delivery Mechanism (REQUIRED)

Ask: "How do you want to deliver the sprite atlases?"

Option A: Built-in Data (Immediate Loading)

  • Atlases are included in the build and loaded immediately
  • Set includeInBuild = true
  • Suitable for: Core UI, main gameplay sprites, always-needed assets
  • Pros: Simple, no additional packages, instant access
  • Cons: Increases initial build size, cannot update without new build

Option B: Late-Binding via Addressables (On-Demand Loading)

  • Atlases are NOT included in build, loaded on-demand via Addressables
  • Set includeInBuild = false
  • Create Addressables entries for each atlas
  • Add addressable setup as prebuild step
  • 🚨 REQUIRED: Build Addressables content as build step
  • 🚨 REQUIRED: Create late-binding runtime loader script
  • Suitable for: DLC content, optional features, large assets, downloadable content
  • Pros: Smaller initial build, can update independently, on-demand loading
  • Cons: Requires Addressables package, async loading, network dependency
Use CaseRecommended
Core UI sprites that are always visibleOption A: Built-in
Tutorial or onboarding spritesOption A: Built-in
Level-specific sprites (100+ levels)Option B: Addressables
DLC or seasonal contentOption B: Addressables
Localized UI sprites (multiple languages)Option B: Addressables
Character skins or cosmeticsOption B: Addressables

2. SpritePacker Mode (REQUIRED)

Enable Sprite Packer mode before creating atlases, then read the setting back and confirm it took. Use the code in resources/enablespritepacking.cs; it sets EditorSettings.spritePackerMode and configures the importer's packing settings.

This is the step that decides whether the atlas you produce is real. Disabled is the zero value of SpritePackerMode, so any project where nobody has set it carries packing Disabled, and an atlas created while it is Disabled still imports, still shows up as an asset, and still looks finished, but can never pack. Unity says so in the Inspector: "Sprite Atlas packing is disabled". Nothing else in the workflow fails, so an atlas shipped this way reads as a success. Do not assume a project is already configured: read the value.

So do not treat "I set it" as done. After setting it, read EditorSettings.spritePackerMode back, confirm it is not Disabled, and report the value you actually read. If you cannot read it back, say so rather than assuming the write landed.

DO NOT edit meta files DIRECTLY.

🚨 CRITICAL: Default Approach is Prebuild Generation

ALWAYS use IPreprocessBuildWithReport to automatically generate or update SpriteAtlases during the build pipeline. This is the DEFAULT and REQUIRED approach unless the user EXPLICITLY requests manual authoring.

❌ DO NOT Create Manual Menu Item Scripts

NEVER create scripts with [MenuItem] attributes for atlas generation unless explicitly requested. The prebuild approach eliminates the need for manual clicks. Only use manual authoring for: Hand-optimized layouts, specific sprite arrangements, or editor preview requirements. See Advanced: Manual Authoring.

🚨 CRITICAL: Sprite Source Location Restriction

ONLY add sprites from the project's Assets folder. NEVER add sprites from Unity built-in assets, packages, or external locations. Unity built-in assets cannot be packed into SpriteAtlas, and package assets may cause import/dependency issues.

Critical V2 Architecture

ContextComponentPurposeAllowed Usage
Editor AuthoringSpriteAtlasAssetAdd/remove sprites/folders; store metadata✅ Editor scripts only
Editor SettingsSpriteAtlasImporterConfigure texture, packing, platform settings✅ Editor scripts only
Editor PackingSpriteAtlasUtility.PackAtlases()Optional editor preview packing (not for build)⚠ Only for preview; atlases auto-pack at build
RuntimeSpriteAtlasQuery packed sprites (read-only)✅ Runtime scripts only
Runtime LoadingSpriteAtlasManagerDynamic loading callbacks✅ Runtime scripts only

Forbidden Cross-Context Usage (Common Error Sources)

❌ Invalid Pattern✅ Correct Pattern
new SpriteAtlas() in editor codeUse SpriteAtlasAsset + SpriteAtlasImporter
AssetDatabase.LoadAssetAtPath<SpriteAtlas>(...) in editorUse SpriteAtlasAsset.Load(...)
SpriteAtlasAsset.GetPackables() in editorUse SpriteAtlas.GetPackables()
Modifying SpriteAtlas in editor scriptsModify SpriteAtlasAsset → reimport → use SpriteAtlasImporter
Create variants from original packable objects (sprites/folders)Creating variants from a Master runtime SpriteAtlas

NEVER script against SpriteAtlas in editor code — it is only for runtime use in V2 except for GetPackables.

Core V2 Workflow (Reference Only - Use Prebuild Instead)

🚨 IMPORTANT: This workflow is shown for reference only. ALWAYS implement this inside IPreprocessBuildWithReport.OnPreprocessBuild() rather than in manual scripts. See Quick Start.

Prerequisites

  • Unity 6000.3 or later
  • Basic understanding of Unity's asset import pipeline
  • Familiarity with editor scripting for atlas authoring

Quick Start: Automated Prebuild Generation (DEFAULT APPROACH)

Overview

This is the PRIMARY and DEFAULT way to create SpriteAtlases. Implement IPreprocessBuildWithReport to automatically generate or update SpriteAtlases before each build based on categorization rules. No manual menu clicks required.

Workflow Steps

Step 1: Ask User for Delivery Mechanism

Before generating code, ask: "How do you want to deliver the sprite atlases: (A) Built-in data or (B) Late-binding via Addressables?"

Step 2: Create Prebuild Script

Create this script in an Editor folder. Customize based on user's delivery choice:

Option A: Built-in Data (Immediate Loading)

Built-in Data (Immediate Loading)

Option B: Late-Binding via Addressables (On-Demand Loading)

🚨 CRITICAL ENFORCEMENT: When user chooses Addressables, you MUST generate ALL THREE scripts below. Never generate just one or two - all three are required for Addressables delivery to work.

Required Scripts (ALL THREE MANDATORY):

  1. Prebuild script (IPreprocessBuildWithReport) - Generates atlases, creates Addressables entries
  2. Build Addressables script (IPostprocessBuildWithReport) - Builds Addressables content bundles
  3. Late-binding runtime loader (MonoBehaviour) - Handles on-demand loading at runtime

See references/addressables-delivery.md for complete implementation.

Complete Workflow
User Request
    ↓
Step 0: Check for existing scripts with [UNITY-SKILL:SPRITEATLAS] identifier
    ↓
    ├─ Found existing scripts?
    │   ↓ YES
    │   Ask user: Update existing / Create new / Abort
    │   ↓
    │   Handle user choice
    │
    └─ NO existing scripts or user chose "Create new"
        ↓
        Ask "Built-in data or Addressables?"
        ↓
        ├─ Option A: Built-in
        │   ↓
        │   Generate 1 script: Prebuild generator (includeInBuild=true)
        │
        └─ Option B: Addressables
            ↓
            Generate 3 scripts:
              1. Prebuild: Generate atlases + create Addressables entries (includeInBuild=false)
              2. Postprocess: Build Addressables bundles
              3. Runtime: Late-binding loader component

Step 3: Customize Categorization Rules

Edit the OnPreprocessBuild method to match your project's sprite organization. Choose one or combine multiple strategies:

StrategyWhen to UseImplementation
Folder-basedSprites organized by folder structureGenerateAtlasByFolder("Assets/Art/UI", "Assets/Atlases/UI.spriteatlasv2")
Naming conventionSprites follow naming patternsGenerateAtlasByNaming("Assets/Art", "icon_", "Assets/Atlases/Icons.spriteatlasv2")
Asset labelsSprites tagged with labels
Scene-basedSprites used in specific scenesQuery scene references

Step 4: Build Your Project

Atlases are automatically generated/updated during build. No manual menu clicks required. This is why prebuild is the default approach.

For Built-in Data (Option A):

  • Atlases are included in build
  • Ready for immediate use at runtime

For Addressables (Option B) - Additional Required Steps:

You MUST generate THREE scripts (not just one):

  1. Prebuild script (IPreprocessBuildWithReport) - Generates atlases and creates Addressables entries automatically
  2. Build Addressables script (IPostprocessBuildWithReport) - Builds Addressables content bundles
  3. Late-binding runtime loader (MonoBehaviour) - Handles on-demand loading via SpriteAtlasManager

The build process will:

  • Generate atlases (prebuild step)
  • Create addressable entries automatically
  • Build addressables content bundles (postprocess step)
  • At runtime: Late-binding loader automatically loads atlases when sprites are first accessed

Common Categorization Patterns

By Folder Structure:

csharp
GenerateAtlasByFolder("Assets/Art/UI/Buttons", "Assets/Atlases/UI_Buttons.spriteatlasv2");
GenerateAtlasByFolder("Assets/Art/UI/Icons", "Assets/Atlases/UI_Icons.spriteatlasv2");
GenerateAtlasByFolder("Assets/Art/Characters/Player", "Assets/Atlases/Player.spriteatlasv2");

By Naming Convention:

csharp
GenerateAtlasByNaming("Assets/Art", "icon_", "Assets/Atlases/Icons.spriteatlasv2");
GenerateAtlasByNaming("Assets/Art", "bg_", "Assets/Atlases/Backgrounds.spriteatlasv2");

Variant Generation in Prebuild

Generate variant atlases for different resolutions.

Advanced: Manual Authoring (NOT Default - Use Only When Explicitly Requested)

⚠ WARNING: Manual authoring is NOT the default approach. Only use these patterns when the user EXPLICITLY requests manual control or editor preview during development.

🚨 DEFAULT APPROACH: Use prebuild generation with IPreprocessBuildWithReport instead. See Quick Start.

Manual authoring is appropriate ONLY for:

  • Hand-optimized sprite layouts where exact positioning matters
  • Custom sprite ordering requirements
  • Editor preview during authoring workflow
  • Explicitly requested by user

DO NOT use manual authoring when:

  • User asks to "create sprite atlas" (use prebuild)
  • User asks to "optimize sprites" (use prebuild)
  • User asks for automated workflow (use prebuild)
  • No specific manual control requirement mentioned

For complete manual authoring patterns including master atlas creation, variant creation, and runtime loading, see references/manual-authoring.md.

Key Requirements (V2-Specific)

  1. 🚨 ALWAYS check for existing scripts FIRST: Before generating code, scan for scripts with [UNITY-SKILL:SPRITEATLAS] identifier and prompt user to update or create new
  2. 🚨 ALWAYS tag generated scripts: Include skill identifier at the top of every generated script for future detection
  3. 🚨 ALWAYS ask for delivery mechanism: Ask user "Built-in data or Addressables?" before generating code
  4. 🚨 ALWAYS enable Sprite Packer mode: Set EditorSettings.spritePackerMode = SpritePackerMode.SpriteAtlasV2 in prebuild script
  5. 🚨 ALWAYS use prebuild generation: Implement IPreprocessBuildWithReport as the DEFAULT approach for creating atlases
  6. 🚨 ONLY add sprites from Assets/ folder: Never add sprites from Packages, built-in assets, or external locations
  7. 🚨 For Addressables delivery, ALWAYS generate THREE scripts:
    • Prebuild atlas generator with Addressables setup
    • IPostprocessBuildWithReport to build Addressables content
    • Late-binding runtime loader script (extends SpriteAtlasManager)
  8. Set includeInBuild correctly: true for built-in data, false for Addressables
  9. Two-Step Editor Pattern: Create with SpriteAtlasAsset → Save → Import → Configure via SpriteAtlasImporter → SaveAndReimport()
  10. Never use SpriteAtlas in editor code — except SpriteAtlas.GetPackables() instance method on a loaded runtime atlas
  11. Variants reference master: Use SetMasterAtlas(SpriteAtlas) with runtime instance loaded via AssetDatabase.LoadAssetAtPath<SpriteAtlas>()
  12. Platform format assignment: Use format = TextureImporterFormat.ASTC_6x6 directly (no cast)
  13. File extension: V2 atlases use .spriteatlasv2 (not .spriteatlas)
  14. SpriteAtlasUtility.PackAtlases() is optional: Only for editor preview; build-time packing is automatic

For common errors and invalid patterns, see references/common-errors.md.

Detailed Reference

Namespaces

Editor Scripts:

csharp
using UnityEditor;            // AssetImporter, AssetDatabase
using UnityEditor.U2D;        // SpriteAtlasAsset, SpriteAtlasImporter, SpriteAtlasUtility
using UnityEngine;            // Runtime types (e.g., TextureImporterFormat)
using UnityEngine.U2D;        // SpriteAtlas

Runtime Scripts:

csharp
using UnityEngine;            // Core Unity types
using UnityEngine.U2D;        // SpriteAtlas, SpriteAtlasManager

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Manage Sprite Atlas AI skill do?

Manages SpriteAtlas assets through a prebuild pipeline, covering master and variant atlases, packing settings, and platform overrides. Use when asked to create or optimize sprite atlases.

Why use Manage Sprite Atlas on TypingMind?

Because you install it once and use it with any model. Manage Sprite Atlas 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 Manage Sprite Atlas in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Unity-Technologies/skills/tree/main/skills/manage-sprite-atlas. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Manage Sprite Atlas?

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 Manage Sprite Atlas?

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

Is the Manage Sprite Atlas AI skill free?

It is published on GitHub by Unity-Technologies. Check the repository for licensing terms. 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 👇