본문으로 건너뛰기

스프라이트 시트 패커 비교 · 크기·픽셀 정확도·중복 실측

스프라이트 시트를 무료로 만드는 방법 네 가지를 실제 CC0 프레임 세트 5개에 트림 켜고 여백 2로 똑같이 돌려 봤습니다. CodeAndWeb 무료 웹 패커, GAPTools 텍스처 패커, free-tex-packer의 npm 코어 0.3.9, 그리고 Studio의 Pack & Export입니다. 넷 다 프레임을 PNG와 데이터 파일로 묶어 주지만, 시트 크기, 프레임이 픽셀 그대로 돌아오는지, 중복 프레임 처리, 페이지 크기 제한을 지키는지가 다릅니다.

패킹할 프레임 이미지, GIF 또는 .aseprite 파일을 끌어다 놓으세요
빈 Studio 열기
브라우저에서 처리하며 파일은 업로드되지 않습니다.
Studio 패킹·내보내기: 프레임마다 윤곽이 표시된 아틀라스 페이지, 사용 면적, 내보내기 대상
CC0 에셋(OpenGameArt)을 연 실제 Studio 화면입니다.
내보내기 대상
  • Godot 4검증됨· Godot 4.7.2
  • Phaser 3 / 4검증됨· Phaser 3.90 + 4.2
  • PixiJS 8검증됨· PixiJS 8.21
  • Unity 6검증됨· Unity 6000.5.3f1
  • Aseprite JSON검증됨· Phaser load.aseprite · PixiJS 8.21
  • .aseprite검증됨· Aseprite 1.3.18
  • Spine / libGDX검증됨· spine-canvas 4.2
  • Starling / Sparrow XML검증됨· Phaser 4.2
  • LÖVE검증됨· LÖVE 11.5
  • Defold빌드 확인· Defold bob.jar 1.13.1
  • GameMaker미검증
  • CSS sprites검증됨· Chromium
  • GIF / APNG디코딩 확인· Pillow

이렇게 작동합니다

  • 회전을 허용하면 5개 세트 모두, 회전 없이는 5개 중 4개에서 가장 작은 시트. 예외인 archer는 free-tex-packer가 3037×540 띠 모양으로 0.3% 더 작았습니다.
  • PNG를 캔버스를 거치지 않고 자바스크립트로 해독하므로 gAMA/cHRM 색 정보가 든 PNG나 반투명 가장자리도 바뀌지 않습니다. 5개 세트의 모든 프레임이 정확히 복원됐습니다.
  • 같은 프레임은 바이트까지 비교한 뒤 한 번만 저장하고(ninja 18프레임 → 6개), 최대 페이지 크기를 넘으면 최대 64페이지로 나눕니다.
  • 내보내기 대상이 다른 설정을 요구하면(고도 엔진은 회전 없음, Aseprite JSON은 한 페이지) 그 대상용으로 다시 묶고 버튼 옆에 바뀐 점을 보여 줍니다.

CC0 프레임 세트 5개로 본 무료 패커 4개

각 도구가 만든 시트 한 장의 가로×세로입니다. 트림 켬, 여백 2, 최대 4096. Studio 칸은 회전 없는 결과를 먼저, 회전한 결과를 뒤에 적었습니다.

Nerulio StudioCodeAndWeb 무료 웹 패커GAPToolsfree-tex-packer-core 0.3.9
ninja(6프레임)38×50, 회전 시 33×57126×62(트림 없음)64×36129×20
archer(10프레임)1543×1066, 회전 시 1071×15261532×16681936×8723037×540(띠 모양)
samurai(60프레임)275×248, 회전 시 313×216400×400292×256276×300
toon(45프레임)631×591, 회전 시 587×592784×780760×4963560×105(띠 모양)
spaceshooter(294프레임)966×977, 회전 시 944×9961158×10511024×10241003×1003
픽셀 그대로 복원된 세트5개 중 5개samurai만samurai만5개 중 5개
ninja ×3(18프레임, 서로 다른 것 6)6개 저장, 38×5018개 저장, 168×15518개 저장, 120×526개 저장
archer ×8, 최대 20485페이지, 12,841,021px². 중복 제거 시 10개 저장, 1543×1066 한 장4213×4448 한 장(제한 무시)5장, 13,253,792px²—
트림·회전없음·트림·크롭 유지·크롭, 엔진별 회전둘 다 없음(유료 Pro 기능)트림, 회전트림, 회전
실행 형태브라우저, 로컬브라우저, 로컬브라우저, 로컬npm 패키지(웹 앱 없음)
엔진이 실제로 불러온 출력Godot·Unity·Phaser 3/4·PixiJS 8·Spine·LÖVE·Aseprite, Defold는 빌드 확인———

이 수치의 출처: docs/STUDIO-PACK-H2H.md (2026-09-23)

free-tex-packer / GAPTools / CodeAndWeb 쪽이 더 나은 경우

  • free-tex-packer 코어는 명령줄이 있는 npm 패키지라 빌드 스크립트 안에서 돌릴 수 있습니다. Studio에는 명령줄이 없습니다. 또 회전 없는 archer에서는 이 코어의 시트가 0.3% 더 작았습니다(띠 모양).
  • GAPTools와 CodeAndWeb 무료 패커는 웹페이지 하나로 끝납니다. 프레임을 넣고 누르면 끝이라, 한 번만 쓸 시트라면 더 빠릅니다.
  • CodeAndWeb의 유료 TexturePacker Pro는 여기 무료 도구 모두보다 앞섭니다. 폴리곤 패킹, GPU 텍스처 형식, 스마트 폴더가 있는 명령줄. Studio는 사각형 패킹만 합니다.

사용 방법

  1. 번호 붙은 PNG, 폴더, GIF, .aseprite 중 무엇이든 이 페이지에 끌어다 놓으면 Sprite를 거쳐 Pack & Export가 열립니다.
  2. 트림 켜기, 여백 2, 최대 크기를 맞춰 내 그림으로 같은 비교를 해 봅니다.
  3. 노력 수준을 best로 올리고 사용률과 페이지 탭을 지금 쓰는 패커 결과와 비교합니다.
  4. 엔진용으로 내보내거나, TexturePacker 방식 hash인 Generic JSON으로 받습니다.

엔진별 내보내기와 검증 방법

"검증됨"은 실제 CC0 에셋으로 내보낸 파일을 해당 엔진·도구가 직접 불러와 원본과 비교했다는 뜻입니다. 불러오지 않은 형식은 그렇게 표시합니다.

대상파일검증
Godot 4.tres SpriteFrames · .tscn AnimatedSprite2D · .png.import검증됨 Godot 4.7.2Godot가 불러와 모든 애니메이션 프레임을 그려 원본과 비교했습니다. 씬은 Nearest 필터를 쓰고 회전은 쓰지 않습니다.
Unity 6.unity.json · Editor/NerulioSpriteImporter.cs · AnimationClip검증됨 Unity 6000.5.3f1배치 모드에서 스프라이트 영역·피벗·픽셀·클립 키·길이를 확인했습니다.
Phaser 3 / 4atlas JSON (multiatlas) · .anims.json검증됨 Phaser 3.90 + 4.2두 버전 모두에서 프레임과 애니메이션을 그렸습니다.
PixiJS 8spritesheet JSON · animations · anchor · meta.scale검증됨 PixiJS 8.21회전·여러 페이지 아틀라스도 포함해 확인했습니다.
Aseprite JSONhash / array · frameTags · slices검증됨 Phaser load.aseprite · PixiJS 8.21태그의 방향과 반복 횟수가 유지됩니다.
.asepritelayers · tags · durations · slices검증됨 Aseprite 1.3.18Aseprite 명령줄로 열어 렌더링했습니다.
Spine / libGDX.atlas검증됨 spine-canvas 4.2Spine 런타임이 회전·트림 영역을 모두 그렸습니다. libGDX 자체는 실행하지 않았습니다.
Starling / Sparrow XMLXML per page검증됨 Phaser 4.2Phaser 3.90은 트림된 XML 프레임을 잘못 그립니다(Phaser 버그). "Sparrow XML (Phaser 3)" 프리셋은 트림을 끄며 3.90·4.2 모두 통과합니다.
LÖVELua quads · nerulio_atlas.lua · main.lua검증됨 LÖVE 11.5포함된 헬퍼로 모든 프레임을 그리고 모든 애니메이션을 재생했습니다.
Defold.atlas · .tilesource빌드 확인 Defold bob.jar 1.13.1Defold 명령줄 빌더로 빌드하고 빌드된 텍스처의 UV를 다시 읽어 확인했습니다.
GameMakerspr_<name>_stripN.png · gamemaker.json미검증GameMaker에서 불러오지 않았습니다(헤드리스 실행 불가). 스트립은 GameMaker 스트립 가져오기 방식대로 자릅니다.
CSS sprites.css · preview .html검증됨 Chromium포함된 스타일시트로 모든 클래스를 그렸습니다.
GIF / APNGone file per animation디코딩 확인 Pillow내보낸 뒤 모든 프레임과 지연 시간을 다시 디코딩했습니다. APNG는 원본과 동일합니다.

검증 근거

내보내기: 실제 CC0 에셋으로 실제 엔진에서 49회 실행해 47회 통과. 실패 2회는 Phaser 3.90의 트림 XML 버그이며 Phaser 3 프리셋으로 피합니다. 실제 프레임 세트 5개로 패커 비교(CodeAndWeb 무료 웹 패커, GAPTools, free-tex-packer): 회전 허용 시 5개 모두 가장 작은 시트, 회전 없이는 5개 중 4개. 모든 프레임이 픽셀 단위로 복원됩니다.

한계

  • 폴리곤(메시) 패킹은 제공하지 않습니다. 검증한 엔진 중 내보낸 데이터로 메시 아틀라스를 그리는 엔진이 없기 때문입니다.
  • GameMaker 스트립은 GameMaker 자체에서 검증하지 않았습니다.
  • 배율 변형(@0.5x~@4x)은 최근접 이웃 방식만 씁니다.
  • 트림된 Starling XML은 Phaser 3.90에서 잘못 그려지므로 "Sparrow XML (Phaser 3)" 프리셋을 쓰세요.

자주 묻는 질문

웹 패커를 쓰면 프레임 색이 바뀌는 이유는?

이번에 비교한 브라우저 도구들은 <img>와 2D 캔버스로 PNG를 해독합니다. 그래서 gAMA/cHRM 정보가 있는 ninja 프레임은 색 관리 때문에 회색 (50,50,50)이 (46,46,46)으로 바뀌었고, spaceshooter 세트는 사전 곱셈 알파 때문에 반투명 가장자리가 최대 10단계 달라졌습니다.

free-tex-packer는 이제 못 쓰나요?

웹 앱 도메인에서는 더 이상 앱을 제공하지 않습니다. npm 코어(0.3.9)는 아직 동작하고, 이번에 잰 것도 그 코어입니다. 프레임은 정확했고 중복은 한 번만 저장했으며, Studio보다 작은 시트를 만든 유일한 경우(회전 없는 archer)도 이 코어였습니다.

"정확히 복원"은 어떻게 확인했나요?

아틀라스에서 데이터 파일(트림 오프셋, 회전)대로 TexturePacker JSON 규칙에 따라 각 프레임을 다시 잘라 내고, 완전히 투명한 픽셀의 색은 빼고 원본과 픽셀 단위로 비교했습니다.

무료인가요? 계정이 필요한가요?

이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.

스프라이트가 업로드되나요?

아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.

Aseprite나 엔진 플러그인을 설치해야 하나요?

아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).