LPC Character Generator

io.github.kyuza1由 GitHub 帳號 kyuza1 發布v0.5.0更新於 Oct 24, 2026

Generate LPC pixel-art character spritesheets and export them to Godot, Unity and the web.

已驗證STDIO僅桌面開發者工具媒體與設計

概覽

AI 產生的概覽

依自然語言描述產生 LPC 像素風角色精靈表,並匯出成 Godot、Unity 或網頁可直接使用的格式。

可以做什麼
  • 依部件、體型與動畫產生角色精靈表,附上素材署名與動畫檢查報告
  • 在對話中以動畫 GIF 預覽角色四個方向的動作
  • 搜尋並檢視部件、分類、顏色、變體及各體型可用的動畫
  • 用隨機種子產生單一隨機角色或批次產生 NPC
  • 讀取與產生角色產生器網站連結,包含舊連結與剪貼簿 JSON
  • 匯出 Godot SpriteFrames、Unity 精靈與動畫控制器、網頁圖集與示範頁或網站 JSON,並可依動畫、影格或部件拆分
適用情境
適合為 Godot 4、Unity 6、Phaser 或 PixiJS 專案快速取得佔位或 NPC 像素角色,用描述取代手繪並直接拿到引擎檔案。
執行需求
以 stdio 在本機執行,需要 uv(或 pip)與 Git,並執行一次下載部件定義的初始化步驟。可選環境變數 LPC_LANG(en 或 pt)與 LPC_OUTPUT_DIR 分別設定訊息語言與輸出資料夾,預設存到 ~/lpc-characters。不支援只接受遠端伺服器的用戶端。
安裝前請注意
會把精靈表、引擎檔案與署名檔寫入所選輸出資料夾,請確認 LPC_OUTPUT_DIR 或 output_dir 指向正確位置。產生的素材涉及多種 LPC 授權(CC-BY-SA、OGA-BY、GPL 等);上架 Steam、App Store 等含 DRM 的平台時應限定為 CC0 與 OGA-BY,並附上產生的署名。部分部件缺少某些動畫,在這些動畫中會直接消失,除非啟用完整部件替換。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 LPC Character Generator,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

LPC Character Generator — MCP

English · Português

[tests] [PyPI]

An MCP server that builds LPC pixel-art character spritesheets — the same parts as the Universal LPC Spritesheet Character Generator — and exports them ready for Godot, Unity and the web (Phaser/PixiJS).

Ask in plain language ("make a tanned blacksmith with a leather apron and a hammer") and your assistant assembles the character, shows an animated preview in the chat and saves the files.

[Asking the AI for a blacksmith: animated preview and files in the chat]

[48 characters generated by the MCP]

Every character above was generated by this MCP — themed ones (knight, viking, wizard, skeleton, orc, legionary, pirate, king...) and random ones.

[Characters walking]

The in-chat preview (preview_character) is an animated GIF — here a blacksmith hammering:

[Blacksmith hammering, 4 directions]

Installation

[Installing in a terminal: setup, register in Claude Code, connected]

You need uv and Git. uv fetches the right Python and the package by itself — nothing to clone, no dependencies to install.

  1. Install uv (once):
    • Windows: powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
    • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Prepare the server (downloads the item definitions, ~10 s, only once):
    uvx lpc-character-mcp --setup
  3. Register it in your assistant (below). The command is always uvx lpc-character-mcp.

To run the latest code straight from GitHub, replace uvx lpc-character-mcp with uvx --from git+https://github.com/kyuza1/lpc-character-mcp lpc-character-mcp in any example.

Characters are saved to ~/lpc-characters (on Windows, C:\Users\<you>\lpc-characters). Set LPC_OUTPUT_DIR to change it — for example, to your Godot/Unity sprites folder. lpc-character-mcp --where prints every folder in use. Messages are in English; set LPC_LANG=pt for Portuguese.

Claude Code

claude mcp add lpc --scope user -- uvx lpc-character-mcp

Claude Desktop

One click: download lpc-character-mcp.mcpb from the latest release and open it (or drag it into Settings → Extensions). You can pick the output folder and language during install.

Or add it by hand in Settings → Developer → Edit config (claude_desktop_config.json):

json
{  "mcpServers": {    "lpc": { "command": "uvx", "args": ["lpc-character-mcp"] }  }}

Codex (OpenAI)

codex mcp add lpc -- uvx lpc-character-mcp

Or edit ~/.codex/config.toml (on Windows, %USERPROFILE%\.codex\config.toml):

toml
[mcp_servers.lpc]command = "uvx"args = ["lpc-character-mcp"]startup_timeout_sec = 60

Check with codex mcp list. The same file is used by the Codex VS Code extension.

Antigravity (Google)

In the agent panel click … → MCP Servers → Manage MCP Servers → View raw config and add to mcp_config.json (~/.gemini/config/mcp_config.json; on Windows, %USERPROFILE%\.gemini\config\mcp_config.json):

json
{  "mcpServers": {    "lpc": { "command": "uvx", "args": ["lpc-character-mcp"] }  }}

Save and click Refresh on the MCP Servers page. In the Antigravity CLI, use /mcp.

Directories

Listed on Smithery, Glama and the official MCP Registry as io.github.kyuza1/lpc-character-mcp, which clients and directories that read the registry pick up automatically.

Other MCP clients

Any client that runs stdio servers works with the same uvx lpc-character-mcp command.

Without uv (pip)

pip install lpc-character-mcplpc-character-mcp --setup

Then register the lpc-character-mcp command (no arguments) in your assistant.

Tips

  • Free disk space: lpc-character-mcp --clear-cache deletes cached images (--clear-cache 30 only those unused for 30 days).
  • Update: uvx lpc-character-mcp@latest --version
  • App can't find uvx: use the full path (where uvx on Windows, which uvx elsewhere).

Example requests

  • "Make a tanned blacksmith with a leather apron and a hammer, export for Godot"
  • "Show me an animated preview of him hammering"
  • "Generate 10 random villagers with seed 1, with Unity files"
  • "Open this link and generate the character: https://liberatedpixelcup.github.io/...#sex=male&body=..."
  • "Which aprons have an idle animation for the male body?"

Tools

ToolWhat it does
generate_character(items, body_type, animations, filename, layout, split, export, prefer_complete, output_dir)Builds the PNG, the credits, the animation report and (optionally) engine files
preview_character(items, body_type, animation, animated)In-chat preview: animated GIF with the 4 directions
search_items(query, category, body_type, animation, type_name, complete_only)Searches items with filters; complete items first
get_item(item_id)Colors, variants, multi-color parts and the animations available per body
list_categoriesLists item categories
random_character(body_type, seed, fixed_items)Rolls a random character
generate_batch(count, body_types, seed, prefix, fixed_items, ..., output_dir)Generates many random NPCs at once
from_site_url(url) / to_site_url(items, body_type)Reads / builds generator site links (including old links); from_site_url also takes the site's "Export to Clipboard (JSON)"
update_definitions(clear_image_cache)Pulls new items and palettes from the official repository
clear_cache(older_than_days, dry_run)Deletes cached images (or only those unused for N days)

Example items:

json
[  {"id": "body/body", "color": "bronze"},  {"id": "head/heads/human/heads_human_male"},  {"id": "hair/short/hair_plain", "color": "dark_brown"},  {"id": "torso/shirts/longsleeve/torso_clothes_longsleeve", "color": "white"},  {"id": "torso/aprons/torso_aprons_overalls", "variant": "leather"},  {"id": "legs/pants/legs_cuffed", "color": "white"},  {"id": "feet/boots/feet_boots_basic", "color": "brown"},  {"id": "tools/tool_hammer", "color": ["steel", "walnut"]}]

Colors

  • "color": "blonde" — one color (see colors in get_item).
  • "color": ["steel", "walnut"] — multi-part items (head and handle, armor and belt...). Parts are listed in color_parts from get_item; null keeps a part's default.
  • Head, ears, nose and other skin items without a color inherit the body color.
  • One item per type, like the site: asking for two hairstyles keeps the last one (and says so in warnings).

Where to save

output_dir saves straight into a folder — e.g. your game's sprites folder: "generate the blacksmith in C:/my-game/art/npcs and export for Godot". Otherwise files go to LPC_OUTPUT_DIR or ~/lpc-characters.

Layout and parts

  • layout: "standard" (default) — same as the site: 832px wide, every animation always on the same row (walk at y=512, slash at y=768...). Oversized animations go below y=3456.
  • layout: "compact" — only the requested animations, stacked.
  • split — also saves pieces: "animation" (one PNG per animation), "frame" (one PNG per frame in <name>_frames/<animation>/<direction>_NN.png) and/or "item" (one sheet per item, for swapping outfits in-game). Accepts a list: ["animation", "frame"].

Oversized animations

Big weapons and tools (swords, spears, hammer, axe, bow...) use 128 or 192px frames. They are added automatically when their base animation is requested (asking for slash with the hammer also produces tool_hammer).

Complete animations

Not every LPC item has art for all 15 animations (e.g. the apron has no idle, run, jump...). In those animations the item simply disappears. To avoid surprises:

  • Every result warns you. generate_character always returns animation_check:
    json
    "animation_check": {  "complete": false,  "incomplete_items": {    "torso/aprons/torso_aprons_apron": {      "missing": ["climb", "idle", "jump", "sit", "emote", "run", ...],      "complete_alternatives": ["torso/aprons/torso_aprons_overalls", ...]    }  },  "summary": "ATENÇÃO: nem todas as animações ficaram completas: Apron não tem ..."}
    The preview, batches and the web demo warn too.
  • prefer_complete: true replaces each incomplete item with the closest item that has every animation, keeping the color (e.g. apron → overalls). Replacements are listed in replaced. The assistant is told to ask you first.
  • Search puts complete items first. search_items lists them first, shows missing_animations for the others and accepts complete_only: true. get_item shows what is missing and suggests complete_alternatives.
  • Random characters only use complete items.

Not counted as missing: face, nose, beard, glasses and necklaces in climb (the character faces away), expressions in hurt, weapons/tools/shields — which by nature only appear in their own animations (listed in equipment_only_in) — and animations the body itself lacks (listed in body_missing).

Licenses (Steam, App Store)

LPC art comes under several licenses. For stores with DRM (Steam, App Store...) only CC0 and OGA-BY art is safe. Pass licenses: ["CC0", "OGA-BY"] to search_items, random_character, generate_batch or generate_character to stick to them — every art part of the chosen body must offer one of those licenses (stricter than the site, which accepts an item if any part does). Every result also has license_check:

json
"license_check": {"drm_safe": true, "share_alike_required": false, "summary": "..."}

Exporting to engines

Pass export to generate_character (you can combine them). Animations play in the same frame order as the official generator (walk skips the standing frame, idle/sit/emote hold frames...), and the site's extra animations are included: 1h_slash (one-handed slash) and watering (with the watering can). zip: true packs everything into <name>.zip.

exportFilesHow to use
"godot"<name>.tres (SpriteFrames)Generate with output_dir inside your project (the res:// path is filled in automatically) or copy <name>.png and <name>.tres to res://characters/. Use the .tres as Sprite Frames of an AnimatedSprite2D. Animations: walk_down, idle_left, tool_hammer_right... Tested on Godot 4.6.
"unity"<name>.png.meta, <name>.controller + <name>_unity_anims/*.animGenerate with output_dir inside Assets/ (or copy everything there). Sprites come pre-sliced (Multiple, Point filter, no compression) and the .controller has one state per animation (starts at idle_down): put it in the Animator of a SpriteRenderer object and call animator.Play("walk_left"). Tested on Unity 6.
"web"<name>.json (atlas) + <name>_demo.htmlTexturePacker-style (hash) atlas with animations: Phaser 3 this.load.atlas(...), PixiJS Assets.load(...). Tested on Phaser 3.80 and PixiJS 8.5. The demo plays the character with arrows/WASD, Shift and Space — open it from a local server (python -m http.server).
"site"<name>_site.jsonPaste it into the generator site's Import from Clipboard (JSON) button to keep editing there.

Art credits

Every generation writes <name>_credits.txt and <name>_credits.csv with authors, licenses and links for only the art that was used, plus a ready-to-paste text for your game's credits screen (credits.statement). The sprites are LPC art (CC-BY-SA 3.0, OGA-BY 3.0, GPL 3.0 and others) — if you ship a game, include these credits.

Limitations

  • Some types have no complete version at all (capes, backpacks, dresses, skirts). With prefer_complete they stay as they are and animation_check says so.
  • The LPC muscular, child and pregnant bodies lack some animations (e.g. muscular has no shoot or climb); animation_check reports them in body_missing.
  • Godot 3 is not supported (Godot 4 only). Unity was tested on Unity 6.
  • Runs locally (stdio); it does not work with clients that only accept remote servers.

Development

git clone https://github.com/kyuza1/lpc-character-mcp.gitcd lpc-character-mcppip install -e ".[dev]"python -m pytest -q

From a clone, definitions, cache and output live inside the clone (lpc/, cache/, output/). Tests run on GitHub Actions on Linux, Windows and macOS on every push and every Monday (to catch changes in the official LPC repository). Releases are published to PyPI automatically when a GitHub release is created. See CHANGELOG.md.

License

Code under MIT. The downloaded art belongs to the LPC artists and follows their licenses (see the generated credits files).

來源:README.md,提交 34d3788

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.5.0最新Sep 29, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。