결론
비용의 중심은 PixelLab입니다. 현재 외형 PNG는 파일당 0.6~1.1KB라 Supabase Storage 비용은 사실상 무시할 수 있고, 5분마다 도는 Vercel 복구 Cron도 invocation 항목만 보면 월 10원 미만입니다.
가격은 베타와 장기 운영을 분리합니다
현재 구독 quota를 활용하는 공개 베타는 Template 걷기 포함 40P 또는 기존 외형에 +10P가 가능합니다. 종량제 원가와 실패 비용까지 버티려면 장기 가격은 70~75P가 안전합니다.
hair와 outfit도 작은 파츠만 생성하지 않습니다. 전체 캐릭터 state를 다시 만든 뒤 기준 캐릭터와의 픽셀 차이를 추출하므로 공급자 원가는 full과 같습니다.
호출과 저장 흐름
완성 합성 PNG는 저장하지 않습니다. 원본 asset과 파츠 PNG, 조합식만 DB·Storage에 남기고 Host가 브라우저 메모리에서 합성해 iframe에 전달합니다.
걷기 포함 시 state ZIP 수입 뒤
animate-character를 추가 호출하고, 동·서·남·북
background job 4개와 animation ZIP을 다시 수입합니다.
사용하는 API
Rofanworld Host API
| Method | 경로 | 역할 | 유료 호출 |
|---|---|---|---|
| GET | /generations |
내 생성 목록 | 없음 |
| POST | /generations |
idempotency, point hold, 생성 접수 | PixelLab state 1회 |
| GET | /generations/{id} |
생성 상태 polling | 없음 |
| POST | /generations/{id}/sync |
provider 동기화·ZIP 수입 | PixelLab read |
| GET | /assets |
내 ready asset 목록 | 없음 |
| GET | /assets/{id}/image |
인증된 private PNG 반환 | Storage read |
| GET·PUT | /loadout |
조합식 조회·저장 | 없음 |
| POST | /runtime-payload |
저장 또는 draft 조합 검증 | 없음 |
| GET | /internal/.../recovery |
stale 생성 최대 5건 복구 | 필요한 건만 read |
PixelLab API
| 상태 | Method·경로 | 용도 | 핵심 계약 |
|---|---|---|---|
| 현재 | POST /create-character-state |
prompt로 캐릭터 state 편집 | asset당 유료 생성 1회 |
| 현재 | GET /background-jobs/{id} |
비동기 상태·usage 확인 | UI는 1.8초 간격, 최대 200회 polling |
| 현재 | GET /characters/{id} |
character 상태 확인 | job 404 복구 보완 |
| 현재 | GET /characters/{id}/zip |
방향 PNG·metadata 수입 | 응답 character ID와 같은 state만 선택 |
| 걷기 | POST /animate-character |
walking animation 생성 | Template·4방향을 명시 |
directions를 생략하면 8방향이 생성될 수 있습니다.
별무리 탑은 ["south","west","east","north"]만
명시해 불필요한 비용을 막아야 합니다.
PixelLab 가격 분석
32×32 animation 전용 가격 행이 없어 공식 공개 가격의 최저 64×64 tier로 계산했습니다. PixelLab은 실제 GPU 처리시간에 따라 가격이 달라질 수 있다고 안내합니다.
| 작업 | 공식 단가 | 4방향 합계 | 원화 |
|---|---|---|---|
| Character state, 최대 84×84 | $0.095/job | $0.0950 | 약 139원 |
| Template animation 64×64 | $0.0323/direction | $0.1292 | 약 189원 |
| state + Template 걷기 | 합산 | $0.2242 | 약 327원 |
| state + v3 4-frame | $0.0129/direction | $0.1466 | 약 214원 |
| state + Pro | $0.095/direction | $0.4750 | 약 693원 |
현재 구독 잔량
조사 시점 Pixel Apprentice 구독은 2,000 generations 중 1,037이 남아 있고 pay-as-you-go credit은 $0입니다.
| 구성 | 1회 quota | 남은 quota로 가능한 수 |
|---|---|---|
| 정지 asset 1개 | 20 | 51개 |
| Template 걷기 asset 1개 | 24 예상 | 43개 |
| 정지 full+hair+outfit | 60 | 17세트 |
| Template full+hair+outfit | 72 예상 | 14세트 |
Template은 방향당 1 generation 계약입니다. v3의 구독 quota 차감량은 문서에 명확하지 않아 실제 Preview 1건 확인 전에는 가정하지 않습니다.
Supabase·Vercel 비용
Supabase
원본 PNG는 private world-player-visuals bucket에,
asset·generation·loadout은 Postgres에 저장합니다. 조합된 완성
PNG는 저장하지 않습니다.
| 항목 | Free | Pro |
|---|---|---|
| 기본료 | $0 | $25/월 |
| Database | 0.5GB | 8GB 포함 |
| Storage | 1GB | 100GB 포함 |
| General egress | 5GB | 250GB 포함 |
ready full 두 개는 705B와 1,131B였습니다. 평균 크기로 1,000개를 저장해도 약 0.9MB라 현재 beta에서 Storage 원가는 미미합니다.
Vercel
Host API와 5분 recovery Cron을 실행합니다. 30일 8,640 invocation을 백만 회당 $0.60으로 계산하면 $0.005184, 약 8원/월 수준입니다. CPU·memory·transfer는 별도지만 현재 규모에서는 PixelLab 한 건보다 작습니다.
포인트 가격 판단
포인트 정가는 1P=10원이고 패키지 보너스를 포함한 실매출은 약 9.5~10원/P입니다.
정지 외형. 예상 매출 285~300원, 공식 공급자 원가 약 139원.
Template 걷기 포함 또는 기존 외형에 +10P. quota를 활용한 실험가입니다.
Template 종량제에서도 현재 30P와 비슷한 공급자 원가율을 유지합니다.
Template의 원가 손익분기는 실패 미반영 33~35P, 전달 성공률 90% 가정 시 37~39P입니다. 40P에는 운영비·결제수수료·환율 여유가 거의 없습니다.
실패·환불은 두 단계로 나눈다
state가 성공해 공급자 비용이 발생한 뒤 animation만 실패할 수 있습니다. generation 전체를 실패 처리하면 쓸 수 있는 정지 asset까지 버리고 비용도 회수하지 못합니다.
- Base stage 30P: state 수입 성공 시 정지 asset을 ready로 만들고 settle
- Animation stage +10P: 4방향 수입 성공 시 animated revision을 ready로 만들고 settle
- Animation 실패: 정지 asset은 유지하고 animation add-on만 release
이를 위해 state와 animation attempt를 별도로 기록해야 합니다. 현재
provider_attempted_at 한 칸으로 두 유료 시도를 함께
세면 안 됩니다.
실제 1건으로 확인할 것
-
생성된 state character ID가
animate-character에 바로 들어가는가 - Template 4방향이 정확히 4 generations를 차감하는가
- v3 4-frame의 실제 구독 quota 차감량은 얼마인가
- 네 job usage와 ZIP의 frame 경로·순서·anchor는 무엇인가
- 기존 64×64 atlas에 넣을 두 frame으로 기본 캐릭터와 비슷한 걷기 모션이 나오는가
- hair·outfit의 frame별 diff가 깜빡이지 않는가
권장 순서
Preview의 ready full 1개에 Template
walking-4-frames를 네 방향으로 한 번 호출해 usage와
ZIP을 기록합니다. full이 안정된 뒤에만 hair·outfit frame별 diff
실험으로 넘어갑니다.