Agent Sprite Forge
Languages: English | 繁體中文 | 简体中文 | 日本語 | 한국어
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/banner.png" alt="Agent Sprite Forge banner" width="900" />
</p>
<p align="center">
<a href="https://trendshift.io/repositories/42911?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-42911" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/42911" alt="0x0funky%2Fagent-sprite-forge | Trendshift" width="250" height="55"/></a>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/v040/asf-v040-teaser.gif" alt="Agent Sprite Forge 0.4 teaser" width="720" />
<br />
<em>0.4 출시 티저: 모든 프레임이 실제 ASF 출력입니다.</em>
</p>
하나의 스틸 이미지에서 → 전체 게임 준비 스프라이트 세트로
<p align="center">
<strong>생성된 스틸 이미지 하나를 승인하세요. 캐릭터의 모든 액션을 키잉(keyed), 루핑(looped), 타이밍 처리하고 엔진용으로 내보낼 수 있습니다.</strong>
</p>
<p align="center">
Claude Code (플러그인), Codex, Grok을 위한 에이전트 기능입니다. 이 에이전트는 사용자가 가진 최고의 이미지 경로로 마스터 스틸 이미지를 생성하고, 그로부터 액션별 하나의 이미지-비디오 클립을 만들며, 결정론적(deterministic) Python 도구를 사용하여 Godot, Aseprite 또는 웹 게임용으로 모든 액션을 게이트(gate), 키잉(key), 등록(register), 루프(loop), 리타임(retime), 마무리하고 패키징합니다.
</p>
<table style="width:100%;">
<tr>
<td align="center" width="30%">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/v040/aria-master.png" alt="어린 검객 복장을 한 아리아: 짙은 머리, 청록색 망토, 긴 빨간 스카프를 착용하고 오른쪽을 바라보는 측면 모습" width="250" />
<br />
<strong style="display:block;">1. 승인된 마스터 스틸컷 1개</strong>
<br />
<sub style="font-size:0.9em;">로컬 Codex CLI(<code style="font-family:monospace;">image_gen</code>)로 생성됨, 3장 중 1번째.</sub>
</td>
<td align="center" width="70%">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/v040/aria-set.gif" alt="아리아의 6가지 동작을 실제 타이밍으로 구현: 대기, 걷기 및 달리기 루프; 공격, 점프 및 피격 원샷" width="600" />
<br />
<strong style="display:block;">2. 여섯 가지 동작, 각각 이미지-비디오 클립 1개씩</strong>
<br />
<sub style="font-size:0.9em;">Grok image-to-video (로컬 CLI), 소프트 매트 키잉(soft-matte keyed) 처리, 등록됨, 측정에 의해 선택된 루프, 게임 속도에 맞춰 재조정된 원샷, 컬러 락을 사용한 HD 마감. 실제 타이밍.</sub>
</td>
</tr>
</table>
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/v040/aria-in-scene.gif" alt="아리아가 생성된 초원을 가로질러 달리다가, 검을 찌르기 위해 멈추고 다시 달리는 모습" width="860" />
<br />
<em style="font-size:1.1em;">3. 장면 내 구현: 생성된 배경 위를 지나가는 패키징된 달리기, 공격 및 대기 동작. 달리기는 접지 발(contact foot)에서 속도가 측정되므로 발이 미끄러지지 않습니다. 모든 프레임은 2026-10-06 라이브 실행에서 가져온 것이며, 아무것도 모의로 만들어진 것이 아닙니다.</em>
</p>
<p align="center">
<a href="#new-pixel-looks-1x-sprites-that-follow-a-reference">픽셀 표현</a> ·
<a href="#new-hibit-real-pixel-art-from-flat-ai-art">Hibit 스타일</a> ·
<a href="#whats-new-in-04--the-big-upgrade">새로운 기능</a> ·
<a href="#quickstart">빠른 시작</a> ·
<a href="#routes-and-providers">라우트 및 제공자</a> ·
<a href="#pipeline-master--set--finish--export">파이프라인</a> ·
<a href="#maps">맵</a> ·
<a href="#showcase-games-made-with-agent-sprite-forge">쇼케이스</a> ·
<a href="#tools">도구</a>
</p>
새로운 기능: 참조를 따르는 픽셀 표현, 1x 스프라이트
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/battle.gif" alt="384x216 판 위에서의 전투: 검투사가 걸어 들어와 해골 기사에게 맞고, 반격하고, 마법사가 시전하여 기사가 쓰러지고, 서리 용이 포효하며 돌진한 후 마지막 일격을 가하자 쓰러지며 검투사가 칼을 치켜든다" width="768" />
<br />
<em>픽셀 표현 스프라이트로 구현된 전체 전투 장면으로, 1배율(1x)로 렌더링되어 2배율(2x)로 표시됩니다. 네 명의 1x 캐릭터(33x55부터 87x86까지 크기의 마스터)와 이미지-비디오 클립에서 읽어온 168개의 드로잉을 가진 14개 세트가 포함되어 있습니다. 그들 뒤에 있는 배경판은 384x216 크기, 40가지 색상으로 축소된 생성된 그림입니다. 흰색 피격 플래시와 기사의 페이드 효과는 데모의 일부이며, 다른 것은 추가되지 않았습니다.</em>
</p>
이미지 모델에게 픽셀 아트로 그림을 요청하면, 크기가 불규칙한 블록(아래 이미지에서 15~30px)으로 구성된, 작은 인물 하나에만 88,410개의 색상과 부드러운 가장자리를 가진 그림이 그려집니다. 이 이미지를 축소한다고 해서 해결되지 않습니다. 단순히 스프라이트 크기로 재조정해도 여전히 1,033개의 색상을 가집니다. Hibit은 이런 문제를 우회하기 위해 픽셀 아트로 요청하지 않습니다. 대신, 마음에 드는 모습을 따라가는 클래식한 작은 스프라이트를 위한 '픽셀적 모습(Pixel looks)' 방식이 있습니다. 이 모습은 말로 설명되지 않으며, 사용자가 좋아하는 하나의 스프라이트가 전체 캐릭터의 레퍼런스가 되고, 모델이 그린 그림은 실제 그리드 위에 읽혀집니다. pixel_look.py master는 이미지 자체의 그리드를 찾아내고, 모든 블록에서 단일 색상(flat colour)을 하나씩 가져와 인물의 비율을 유지하며, 색상을 팔레트(palette)로 줄이고 규칙에 따라 윤곽선을 닫습니다. 결과물은 계수할 수 있습니다: 33x55 픽셀, 48가지 색상, 알파 값 0 또는 255를 가지며, 2.5 KB 크기의 PNG 파일입니다.
<table>
<tr>
<td align="center" width="40%">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/kael-picture.png" alt="어두운 코트를 입고 은발의 검객을 그린, 평평한 녹색 지면 위의 그림: 픽셀 아트처럼 보인다" width="340" />
<br />
<strong>이미지 모델이 그린 것</strong>
<br />
1254x1254 px. 인물만 해도 88,410개의 색상을 가지며 블록 크기는 15~30px입니다: 어떤 그리드도 이를 담을 수 없습니다.
</td>
<td align="center" width="30%">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/kael-plain-resize.png" alt="같은 그림을 33x55로 단순히 재조정한 모습과 7배 확대된 모습: 번진 눈, 불규칙한 가장자리, 머리카락의 녹색 점들" width="259" />
<br />
<strong>33x55로 단순 재조정</strong>
<br />
최근접 샘플링(Nearest sampling)으로 7배 확대: 1,033개의 색상, 지면의 녹색이 3개 셀에 남아있습니다. 쌍선형(Bilinear) 방식은 1,275개의 색상과 413개의 부드러운 픽셀을 생성합니다.
</td>
</tr>
</table>
</td>
<td align="center" width="30%">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/kael-master.png" alt="같은 그림에서 만든 1x 스프라이트가 7배율로 표시됨: 깨끗한 셀, 닫힌 윤곽선, 선명한 얼굴" width="259" />
<br />
<strong><code class="language-text">pixel_look.py master</code></code></strong>
<br />
동일한 그림을 자체 그리드에서 읽어낸 것, 7배율로 표시됨: 33x55 크기, 48가지 색상, 부드러운 픽셀 없음.
</td>
</tr>
</table>
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/closeup.png" alt="얼굴의 같은 부분 두 번: 그림에서는 블록 크기가 불규칙하고 부드럽고 얼룩진 가장자리가 있음; 스프라이트에서는 모든 셀이 단일 평평한 색상임" width="742" />
<br />
<em>같은 얼굴 부분: 2배율로 된 그림(왼쪽)과 스프라이트(오른쪽)를 비교.</em>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/cast.gif" alt="검사, 마법사, 해골 기사, 그리고 서리 용이 한 지면 위에 위치함; 각각 대기 상태에서 차례로 하나의 행동을 취함: 검 공격, 시전, 타격, 포효" width="808" />
<br />
<em><strong>시전은 첫 번째 스프라이트를 따름.</strong> 이후의 모든 캐릭터는 하나의 그림에 첫 번째 스프라이트 옆에 그려지므로 (<code class="language-text">ask-cast</code>>, <code class="language-text">cast</code>>), 픽셀 크기를 유지하고 키가 크게 서 있음: 마법사, 해골 기사, 그리고 서리 용 각각 48가지 색상.</em>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/pixel-looks/sets.gif" alt="The swordsman's idle, walk, attack, hurt and victory sets and the dragon's roar, lunge and fall, each with its number of drawings" width="812" />
<br />
<em><strong style="font-size: 1.1em;">포즈(Poses), 뷰(views) 및 마스터로부터의 움직임(motion).</strong> 포즈는 마스터를 한 가지 변화로 재현한 것(검 포즈: 217개 셀 변경, 마스터의 91% 유지); 뷰는 마스터 옆에 그려집니다. 움직임은 해당 스프라이트의 이미지-비디오 클립에서 나옵니다: <code class="language-python">pixel_motion.py</code>는 스프라이트의 격자(lattice)와 팔레트(palette)를 모든 프레임에서 읽어냅니다 (공격: 145개 비디오 프레임 중 21개의 그림을 선택). 숫자는 각 세트별 그림 수를 나타냅니다.</em>
</p>
| 측정 기준 (2026-11-12) | |
|---|
| 검사(swordsman)가 생성한 그림 (피규어) | 1254x1254, 88,410 색상, 블록 15-30 px |
| ... | |
무엇이 새로운가:
pixel_look.py (generate2dsprite): ask-master와 master는 사용자가 원하는 피규어를 혼자서 크게 다시 그리며, 이를 1x 마스터로 읽어냅니다; ask-cast와 cast는 마스터 옆에 모든 추가 캐릭터를 그립니다; ask-pose, pose, ask-view와 view는 마스터로부터 포즈 및 측면 또는 후면 뷰를 만듭니다; lineup은 모든 것을 하나의 지상선 위에 배치하고 높이를 보고합니다.
pixel_motion.py (video2dsprite): prepare, frames, finish, measure, breath: 이미지-비디오 클립의 프레임이 스프라이트의 격자 및 팔레트에 다시 읽히며, 루프 또는 액션이 선택되고, 가장 가까운 샘플링을 포함하는 animation.json 3.0 패키지가 생성됩니다.
- 요청 시에만. 다른 것은 변경되지 않습니다: HD, 픽셀, 그리고 hibit 마감 및 기본값은 그대로 유지됩니다.
- 레퍼런스(reference)가 외형(pixel 크기, 음영 처리, 윤곽선)을 설정하며, 캐릭터는 사용자가 직접 만듭니다. 전체 과정, 수락하는 것과 그 시점, 그리고 한계: references/pixel-looks.md.
새로 추가된 기능: hibit, 평면 AI 아트에서 실제 픽셀 아트로 구현
<p align="center">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/hibit/hibit-gameplay.gif" alt="Pip's Star Grove: Pip the fox mage casts falling stars at magma slimes crawling in from both sides while coins drop" width="960" />
<br />
<em>Pip's Star Grove, a one-screen demo built only from hibit output: autopilot gameplay captured from the game canvas (480x270, shown at 2x). FX: <a href="https://github.com/patch-gg/pixelfx">pixelfx</a> by Patch (MIT).</em>
</p>
이미지 모델에게 "픽셀 아트(pixel art)"를 요청하지 마세요: 그것은 가짜의, 고르지 않은 픽셀을 그립니다. inhibit 스타일은 깨끗하고 평평하며 선이 없는 아트(재료당 최대 3가지 색조, 윤곽선 없음)를 요청한 다음, 픽셀을 다음과 같이 만듭니다: 소스 픽셀에서 학습된 문자별 팔레트 하나, 8x8 다수결 투표 다운스케일링(모든 픽셀은 자신의 셀 대부분을 덮었던 팔레트 색상이며, 절대 혼합되지 않음), 깜빡임에 대한 히스테리시스(hysteresis), 눈과 반짝임을 유지하고, 이진 알파(binary alpha)를 적용하며, 스프라이트 자체에서 온 색상의 1px 윤곽선을 추가합니다.
<table style="width:100%; border-collapse: collapse;">
<tr>
<td align="center" width="58%" style="padding: 10px; border: 1px solid #ddd;">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/hibit/hibit-master-to-pixels.png" alt="Pip's flat lineless master still, the hibit finish of her idle at 80 px shown at 4x, and her 17-colour palette with the outline colour" width="520" style="display: block; margin-bottom: 10px;" />
<br />
<strong style="font-size: 1.1em;">평면 아트 입력, 픽셀 아트 출력</strong>
<br />
승인된 마스터(Codex)와 80 px에서의 유휴 상태(idle)의 hibit 완성도: 소스에서 학습한 16가지 색상에 윤곽선 색상을 더하며, 이는 <code style="background-color: #eee; padding: 2px 4px;">--outline auto</code>가 스프라이트의 지배적인 색조(#380500, 주황색 털에서 온 깊은 적갈색)로부터 가져옵니다. 절대 고정된 주황색이 아닙니다.
</td>
<td align="center" width="42%" style="padding: 10px; border: 1px solid #ddd;">
<img src="https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/HEAD/src/hibit/hibit-cast.gif" alt="Pip idle, walk, cast and hurt, and the magma slime idle, crawl and attack, at 2x and real timing" width="360" style="display: block; margin-bottom: 10px;" />
<br />
<strong style="font-size: 1.1em;">전체 세트, 캐릭터당 하나의 팔레트</strong>
<br />
Pip (유휴(idle), 걷기(walk), 시전(cast), 피해(hurt))와 마그마 슬라임 (유휴(idle), 기어가기(crawl), 공격(attack)): <code style="background-color: #eee; padding: 2px 4px;">sprite_set.py --finish hibit</code>를 통해 Grok 이미지-비디오 클립을 생성하며, 12 fps입니다. 모든 액션은 첫 번째 액션의 팔레트와 윤곽선을 재사용합니다.
</td>
</tr>
</table>
FX: pixelfx (권장) 또는 이미지 경로