Giting.
낮의 Giting
홈 › 스킬 › pixel-run
픽셀 달리기 사이클 실물 캡처 스킬 · 도구 · 자체 제작
◆ 도입 후보

'캐릭터 달리게 해줘' 는 프롬프트만으로는 잘 안 된다. 대개 캐릭터가 칸 안에서 옆으로 미끄러지고 발이 바닥에서 떠다닌다. 이 스킬은 두 층으로 그걸 막는다. 위층은 캐릭터 충실도·팔 반대 위상·16프레임 순서·투명도를 못박은 생성 프롬프트 템플릿이고, 아래층은 우리가 짠 결정적 후처리기다. 후처리기는 4x4 시트를 잘라 프레임마다 알파 무게중심을 칸 중앙에·발을 고정 바닥선에 앵커해 제자리서 달리게 하고, disposal=2 로 잔상 없는 투명 GIF 를 조립한 뒤 프레임 수·투명도·드리프트를 QA 로 잰다. 합성 시트로 실측했다. 일부러 39.9px 밀리게 만든 시트가 정렬 후 0.3px 로 잡혔고, 투명도·16프레임·480ms 루프·ZIP 까지 확인했다. 이미지 생성 자체는 환경의 이미지 도구에 맡기고(도구 무관), 우리는 프롬프트와 후처리·QA 를 준다. 게임·SNS 스티커·마스코트에 도입 후보.

실물부터, 설치 전에 전부 만져보세요

아래는 이미지가 아니라 이 스킬이 담고 있는 진짜 HTML입니다. 눌러 보세요.

캐릭터 참조 한 장 → 4x4·16프레임 달리기 사이클. 아래는 후처리기가 실제로 낸 결과입니다(데모 캐릭터는 정렬 검증용 도형, 실제 출력은 여러분 캐릭터의 충실도를 보존).

달리기 사이클 GIF16프레임 · 30ms · 무한 루프 · 투명
4x4 스프라이트 시트왼→오, 위→아래 한 사이클
4x4 16프레임 시트

핵심: 제자리서 달리게 하는 앵커링

칸 경계로만 자르면 걸음마다 위치가 어긋나 캐릭터가 옆으로 미끄러집니다. 후처리기가 프레임마다 무게중심을 칸 중앙에·발을 바닥선에 앵커해 제자리서 달리게 합니다. 같은 시트, 정렬 on/off 실측:

--no-recenter (칸 경계만)
horizontal drift 39.9px
→ 옆으로 주르륵 미끄러짐
기본 (앵커링 on)
horizontal drift 0.3px
→ 제자리서 달림

QA 리포트 (스크립트가 자동으로 잰다)

$ python3 scripts/pack_run_cycle.py sheet.png --out ./out
frames            : 16 (grid 4x4, cell 256x256)
loop duration     : 480 ms (0.48s) @ 30ms/frame
transparency      : 85.4% transparent  [ok]
horizontal drift  : 0.3px  [ok: runs in place]
baseline spread   : 0px  [ok]
outputs           : run.gif · frames/frame_00..15.png · frames.zip

생성 프롬프트 템플릿 (16프레임 사이클 순서)

4x4 sprite sheet, one RIGHT-facing RUN CYCLE of {CHARACTER}, 16 sequential frames.
· 얼굴·의상·비율·액세서리 매 프레임 고정 · 팔은 다리와 정확히 반대 위상, 어깨 고정
· 순서: 왼발 착지→압축→밀어내기→짧은 공중→오른발 착지→…→첫 자세 복귀 (16→1 이음매)
· 16f × 30ms = 480ms 루프 · 진짜 알파 투명(가짜 체크·초록 배경 금지)
· 1024x1024, 4열x4행, 각 칸 256px, 왼→오·위→아래

이미지 생성은 환경의 이미지 도구가, 자르기·제자리 정렬·투명 GIF 조립·QA는 후처리기(Pillow만)가 합니다. 정렬 실측: 39.9px→0.3px, 투명(코너 알파 0), ZIP 16장.

검수 리포트

'캐릭터 달리게 해줘' 가 잘 안 되는 이유

캐릭터 그림 한 장을 주고 "달리는 애니메이션 만들어줘" 라고 하면, 대개 두 가지가 어긋난다. 캐릭터가 칸 안에서 옆으로 미끄러지고, 발이 바닥에서 뜬다. 프레임을 칸 경계로만 잘랐기 때문이다. 걸음마다 캐릭터 위치가 조금씩 달라서, 이어 붙이면 제자리 달리기가 아니라 반 칸씩 미끄러지는 슬라이드가 된다.

두 층: 프롬프트와 후처리기

생성 프롬프트 템플릿 은 캐릭터별로 채워 4x4·16프레임 시트를 만든다. 얼굴·의상·비율·액세서리를 프레임마다 고정하고, 팔은 다리와 정확히 반대 위상으로 흔들고, 16프레임을 한 사이클(착지→압축→밀어내기→공중→반대발…)로 잇고, 진짜 알파 투명(가짜 체크·초록 배경 금지)을 요구한다. 이미지 생성 자체는 환경에 있는 이미지 도구가 한다. 이 스킬은 도구를 가리지 않는다.

후처리기 pack_run_cycle.py 가 아래를 결정적으로 처리한다. 시트를 16칸으로 자르고, 프레임마다 알파 무게중심을 칸 중앙에, 발 바닥을 고정 바닥선에 앵커 해 제자리서 달리게 만든다. 그다음 disposal=2 로 잔상 없는 투명 GIF 를 조립하고, 개별 PNG 16장과 ZIP 을 쓴다. 의존성은 Pillow 하나뿐, 네트워크는 0.

QA 를 스크립트가 대신 잰다

후처리기는 끝에 QA 를 출력한다. 프레임 수(4x4=16 하드 체크), 루프 시간(480ms), 투명도 비율(가짜 배경이면 경고), 수평 드리프트(제자리서 달리는지), 바닥선 편차(발이 미끄러지는지). 눈으로 볼 것(팔 반대 위상·얼굴 변형·이음매)은 체크리스트로 남긴다.

실측으로 검증했다

합성 시트로 후처리기를 돌렸다. 일부러 캐릭터를 39.9px 밀리게 만든 시트가, 정렬을 켜자 0.3px 로 잡혔다(제자리 달리기 성립). 투명도(코너 알파 0·86% 투명), 16프레임, 480ms 무한 루프, ZIP 16장까지 확인했다.

쓰는 법