Web Asset Studio
It is an MCP server for managing and post-processing assets generated through ChatGPT web, not for generating images itself.
Inspect the asset root, watched downloads folder, ffmpeg availability, and existing projects.
Create, read, and update projects with a reusable style bible, pixel-art settings, and locked palette.
Add reference images and mark an approved asset as the anchor for future prompts.
Build single, grid, animation, or variation prompts and list files to attach to ChatGPT.
Ingest generated images or videos from browser downloads, URLs, or local paths, recording prompts and chat URLs.
Slice grid images into named cells/frames.
Process raw assets with background removal, trim, crop, resize, fit, scale, pixelate, and outline steps.
Use grouped trims and shared palettes to keep animation frames and pixel-art sets consistent.
Pack frames into a uniform sprite sheet PNG, JSON atlas, and GIF preview.
Extract PNG frames from ingested videos when ffmpeg is available.
Uses FFmpeg to extract PNG frames from ingested videos for creating animation sheets.
Integrates with ChatGPT web to generate consistent sticker packs, pixel-art sprites, animation sheets, and web icons by automating chatgpt.com in a logged-in Chrome browser; composes prompts, attaches references, ingests generated downloads, and partially covers Sora video ingest.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Web Asset Studio turn my ChatGPT knight images into a pixel art sprite sheet with JSON atlas"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Web Asset Studio
Generate consistent sticker packs, pixel-art sprites, animation sheets and web icons with your own ChatGPT web account, then cut, clean and pack them automatically. An MCP server plus an agent skill. No OpenAI API key, no paid image API.
▶ Watch the 24-second promo · Bahasa Indonesia
Why
The OpenAI image API is paid per image. Students and hobbyists often already have a ChatGPT account and can generate images in the web app, but one prompt gives one image with one expression, and a second prompt drifts: different face, different style, a fake "transparent" checkerboard background, pixel art that is not on a grid.
Web Asset Studio fixes the part around the generation:
Problem | What this does |
Characters drift between prompts | One reusable style bible is repeated in every prompt, an approved anchor image is attached every time, and many variations are generated inside one grid image |
Backgrounds are fake or noisy | Flood-fill background removal from the edges (keeps the white of the eyes), detects fake checkerboards, and never eats a subject cropped at the frame edge |
"Pixel art" is not pixel art | Area-downscale to the true grid, hard alpha, a limited palette that can be shared across a whole set |
Files end up everywhere | A project folder with raw, frames, processed, sheets and a |
Game engines need sheets | Uniform-cell sprite sheet PNG, a JSON atlas, and a GIF preview |
Related MCP server: aseprite-mcp
How it works
Two halves, plus a skill that tells the agent how to use them:
photo ──► add_reference ──► project_create (style bible) ──► build_prompt
│
browser MCP drives chatgpt.com in your logged-in Chrome ◄┘
(attach files, type prompt, wait, download)
│
ingest ──► agent checks the preview ──► slice_grid ──► process ──► build_spritesheet
│
raw/ frames/ processed/ sheets/ project.jsonBrowser MCP (Claude in Chrome or
@agent360/browser-mcp) operates chatgpt.com in the Chrome profile where you are already signed in.web-asset-studioMCP server (this repo) does everything deterministic: folders, manifest, prompt composition, ingesting downloads, background removal, pixelation, outlines, slicing, packing. Pure JavaScript, no native dependencies, bundled to one file.asset-studioskill is the procedure for the agent: lock the character, generate in grids, QA every result, regenerate what drifts. Clients without skills can read the same text from the MCP promptasset_studio_workflow.
Read this first
Terms of use. OpenAI's terms restrict automatic extraction of output from the service. Automating chatgpt.com with your account is a gray area and the risk (rate limits, account restrictions) is yours. The workflow is deliberately slow: one image at a time, it stops at usage limits, and it never works around login or CAPTCHA (it hands those to you).
Limits. Free accounts have a small daily image quota; a 3x3 grid gives nine assets for one image.
Privacy. Any photo you attach is uploaded to ChatGPT. The agent is instructed to ask you first.
ChatGPT's UI changes. The selectors in
skills/asset-studio/references/chatgpt-web.mdare hints; the agent is told to discover elements on the live page. That page was verified against a real account in October 2026, but expect drift.Video (Sora) is only partly covered: ingest and
video_to_frames(needs ffmpeg) exist, the browser flow is untested.
Install
Requirements: Node.js 18.17+, Chrome signed in to chatgpt.com, and one browser MCP.
1. A browser MCP (pick one)
Claude in Chrome: install the extension and connect it to Claude.
Agent360 Browser MCP:
claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latestthen install its Chrome extension. To upload reference photos, enable Allow access to file URLs for the extension in
chrome://extensions.
2a. Claude Code (plugin: server + skill)
claude plugin marketplace add EgiStr/web-asset-studioclaude plugin install web-asset-studio@web-asset-studioRestart Claude Code. The server is prebuilt in dist/server.mjs, so there is nothing to compile.
2b. Any other MCP client (Claude Desktop, Cursor, VS Code, Codex, Windsurf)
{
"mcpServers": {
"web-asset-studio": {
"command": "node",
"args": ["/path/to/web-asset-studio/dist/server.mjs"],
"env": { "ASSET_STUDIO_ROOT": "/path/to/your/project/asset-studio" }
}
}
}Environment variables
Variable | Default | Purpose |
|
| Where projects are stored |
| OS Downloads folder (on Windows, read from the registry, so a relocated Downloads folder works) | Folder Chrome saves to, watched by |
|
| Used by |
In Chrome, turn off Ask where to save each file before downloading and allow multiple downloads when asked.
Use it
Tell your agent, for example:
Use asset-studio. Here is my photo
~/photos/me.jpg. Make 18 chibi sticker expressions with transparent backgrounds, a white outline, 512 px.
Make a 48 px pixel-art character from this photo, then a 4-frame idle and an 8-frame walk cycle facing right, packed as a sprite sheet for Phaser.
Make 16 pixel icons, 32 px, for a farming web game: coin, seed bag, watering can, hoe, and so on, all sharing one palette.
Output lives in asset-studio/<project>/:
project.json style bible, palette, anchor, every asset with its prompt and chat URL
refs/ reference photos
raw/ ChatGPT downloads, untouched
frames/ cells cut from grid sheets or video
processed/ final transparent PNGs, uniform size
sheets/ sprite sheet .png + atlas .json + preview .gif
video/ downloaded videosMCP tools
Tool | What it does |
| Asset root, watched Downloads folder, ffmpeg, existing projects |
| Project and style bible (subject, style, palette, background, rules), pixel settings, locked palette |
| Copy a photo or style sample into |
| Mark an approved asset that every later generation must attach |
| Compose a |
| Save a finished browser download (moved out of Downloads), a URL, or a local path; returns a preview |
| Cut a grid image into named cells ( |
| Ordered steps on the raw files: |
| Uniform-cell sheet PNG + JSON atlas (TexturePacker hash, works in Phaser/Pixi; |
| Extract PNG frames from an ingested video (needs ffmpeg) |
Recipes for stickers, pixel stickers, sprite animation, emotes, web icons, phone wallpapers and fixes for common problems are in skills/asset-studio/references/recipes.md.
Development
npm install
npm test # builds dist/server.mjs first, then runs 18 tests
npm run buildThe tests cover image processing on synthetic images (fake checkerboard, off-grid pixel art, a subject cropped at the edge, aligned animation frames), the full pipeline from a fake Downloads folder, and the bundled server started without node_modules through a real MCP client. dist/server.mjs is committed because the plugin runs it directly: rebuild and commit it after changing src/.
src/ image.mjs (pixels), workspace.mjs (projects), prompts.mjs, server.mjs (MCP)
skills/ the asset-studio skill and its references
test/ node:test suites
docs/ promo.mp4Contributions are welcome, especially: updates to the ChatGPT page hints when the UI changes, an objects-only mode for build_prompt (it currently always injects the character bible), and a tested Sora/video flow.
License
Available Tools
12 toolsadd_referenceA
Copy a reference image (the user's face photo, a style sample) into the project's refs folder. Upload the returned path to ChatGPT.
Inputs: path (required), role (required), project (required), note.
build_promptC
Compose the ChatGPT prompt from the bible plus this request, and list the files to attach (anchor first). Paste the prompt verbatim.
Inputs: task (required), items (required), project (required), cols, +4 more.
build_spritesheetB
Pack frames into one uniform-cell sprite sheet PNG + JSON atlas (TexturePacker hash, works in Phaser/Pixi; frameWidth/frameHeight for Godot/Unity) + animated GIF preview.
Inputs: name (required), frames (required), project (required), fps, +5 more.
ingestB
Save a generated image or video into the project (raw/ or video/) and record its prompt. Source: a finished browser download (moved out of Downloads), a URL, or a local path.
Inputs: name (required), source (required), project (required), tags, +5 more.
processA
Run steps, in order, on the RAW files of one or more assets and write processed/.png. Always starts from raw, so re-run with new settings freely. Pass every asset of a set in ONE call with the same steps so they come out uniform. Recipes: sticker = remove_bg, trim, outline, fit 512; animation = remove_bg, trim group, pixelate shared.
Inputs: steps (required), assets (required), project (required), preview.
project_createB
Create an asset project with a style bible that every prompt reuses (this is what keeps a set consistent).
Inputs: name (required), type (required), bible (required), pixel.
project_getC
Project bible, anchor, references, every asset with absolute file paths, and sheets.
Inputs: project (required).
project_updateC
Change the style bible (merged field by field), pixel settings, or the locked palette.
Inputs: project (required), bible, pixel, palette.
set_anchorA
Mark an approved asset as the anchor: build_prompt then attaches it to every later generation so the character stays the same.
Inputs: asset (required), project (required), stage.
slice_gridB
Cut a grid image (from task grid/animation) into equal cells; each cell becomes its own asset in frames/.
Inputs: cols (required), rows (required), asset (required), project (required), +4 more.
studio_infoA
Where assets are stored, which downloads folder is watched, ffmpeg availability, and the list of projects. Call first.
Inputs: no named parameters.
video_to_framesC
Extract PNG frames from an ingested video (needs ffmpeg) so they can be processed and packed like other frames.
Inputs: asset (required), project (required), fps, max_frames.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Most tools target a distinct stage of the asset pipeline (ingest, process, slice_grid, build_spritesheet), so selection is usually clear. Minor overlap exists between project_get and studio_info (both surface project listings) and between add_reference and ingest (both bring files into a project), but the descriptions clarify the distinction.
All names use snake_case, which helps, but the ordering convention is mixed: noun_verb (project_get, project_create, project_update) alongside verb_noun (add_reference, set_anchor, build_prompt, slice_grid) and bare verbs (process, ingest). It remains readable but is not a predictable single pattern.
Twelve tools is well-scoped for a multi-stage asset pipeline covering project setup, prompt building, ingestion, processing, slicing, and packing. Each tool maps to a distinct operation and none appear redundant.
The surface covers the full lifecycle from project creation and references through ingestion, processing, grid slicing, and sprite sheet export, with clear recipes documented. Gaps are minor, such as no asset/project deletion or rename operations, which agents can likely work around.
Maintenance
Related MCP Connectors
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Game-dev sprite tools: PNG/GIF to spritesheet, split, trim, animate. OAuth-authenticated MCP server.
Hosted Screenshots MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA hosted Model Context Protocol (MCP) server for game-dev spritesheet workflows. Connect it to Claude or any MCP-compatible AI client and pack, split, trim, and animate sprites through natural language — no local tools required.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for programmatically creating and editing Aseprite sprites, enabling AI agents to draw, manage layers and frames, and iterate until the desired result is achieved.137 npmMIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that lets AI agents draw in a live Aseprite editor or headless mode, featuring one-action Unity sprite-sheet export, art-QA sweeps, and game-dev tools.77 PyPI8MIT
- AlicenseCqualityBmaintenanceMCP server for creating pixel art, characters, and scenes for Aseprite, generating deterministic plans and Godot-compatible manifests.18518 npm1MIT