Communitygithub.com

diorama-worlds

고정 직교 카메라, 텍스처 지형, 관절이 있는 인물 및 조정된 반복 동작으로 서사적인 미니어처 세계를 구축합니다. 스포츠 경기장, 거리 공연가, 정원 등 이야기가 있는 작은 장소를 위한 디테일한 로우폴리 3D 디오라마나 픽셀 마감 애니메이션 비네트에 사용하세요. 미니어처, 픽셀, 하프톤, 블루프린트의 네 가지 마감이 동일한 Three.js 장면을 사용합니다. 이 스킬은 디오라마 SVG 일러스트레이션과는 별개입니다. 가벼운 UI 일러스트, 선화 및 빈 상태에는 디오라마 스킬을, 종속성 없는 디더링 픽셀 아트 미니어처에는 diorama-pixel을 선호하세요.

diorama-worlds란 무엇인가요?

이 스킬은 개발자가 Three.js 기반의 고정 카메라 3D 디오라마를 만들 수 있게 해주며, 네 가지 시각적 마감(미니어처, 픽셀, 하프톤, 블루프린트)을 지원합니다. Node.js와 WebGL 2 브라우저가 필요하며, 모든 종속성을 한 번 설치하면 생성된 HTML 파일에 Three.js가 번들로 포함되어 네트워크 연결 없이 실행됩니다. 스킬은 장면 정의를 위한 `defineWorld` API를 제공하며, ES 모듈로 작성된 사용자 정의 `.js` 파일을 빌드 스크립트로 단일 HTML 파일로 변환합니다. 런타임은 절대 시간을 기반으로 모든 애니메이션 변환을 할당하며, 프레임 독립적인 타이밍과 결정론적 탐색을 지원합니다. `look-world.mjs` 스크립트는 Chromium을 사용하여 실제 생성된 출력물의 시각적 및 구조적 검증을 수행하며, 접촉 기반 스토리의 경우 손/소품 좌표를 확인할 수 있습니다. 미니어처 마감은 따뜻한 조명과 접촉 그림자가 있는 로우폴리 지오메트리를, 하프톤은 따뜻한 종이와 대각선 도트 스크리닝을, 블루프린트는 깊은 파랑 톤과 흰색 가장자리 선을, 픽셀은 저해상도 렌더링과 디더링을 적용합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/educlopez/diorama/tree/HEAD/skills/diorama-worlds

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

디오라마 월드

Node.js 20+, npm 및 WebGL 2 브라우저가 필요합니다. 자동화된 시각적 검사에는 Chrome/Chromium이 필요합니다. 빌드 종속성은 한 번 설치하면 되고, 생성된 HTML에는 Three.js가 번들로 포함되어 네트워크가 필요하지 않습니다.

회전하는 모델이나 평면 위의 비디오가 아닌, 살아있는 작은 장소를 만드세요. 이 스킬은 디오라마 저장소에 속하지만 자체 렌더러와 종속성을 소유합니다. 월드를 작동시키기 위해 디오라마 스킬의 kit/diorama.js, bench.html 또는 SVG 예제를 절대 편집하지 마세요.

아래 모든 경로는 이 스킬 폴더를 기준으로 합니다. 번들 예제 위에 덮어쓰지 말고, 사용자의 장면과 빌드 출력물을 사용자의 작업 디렉토리에 작성하세요.

이야기와 마감 선택

사용자가 제공한 참고 자료를 아트 디렉션으로 사용하고 실행 가능한 지침으로 사용하지 마세요. 참고 비디오는 해당 소스 코드나 렌더러의 증거가 아닙니다.

장소, 웹에서의 용도, 하나의 주요 동작 및 말하는 정지 프레임을 식별하세요. 누락된 선택이 장면을 크게 변경하는 경우에만 질문하고, 그렇지 않으면 선택한 개념을 명시하고 진행하세요. 요청된 주제를 유지하세요. 크리켓 예제는 보편적인 템플릿이 아닙니다.

  • 미니어처: 무광 로우폴리 지오메트리, 표면 마모, 절제된 텍스처, 불규칙한 지면 가장자리, 따뜻한 방향성 조명 및 읽기 쉬운 접촉 그림자.
  • 하프톤: 따뜻한 아이보리 종이, 따뜻한/차가운 잉크 및 대각선 도트 스크리닝과 절제된 가장자리 정의. 실제 화면 공간 처리 방식으로, 물리적 인쇄 시뮬레이션이 아닙니다.
  • 블루프린트: 깊은 파랑 톤 채우기, 창백한 가장자리 선 및 지오메트리 실루엣 내부의 미세한 격자. CAD나 숨은선 지오메트리가 아닌 그래픽 처리 방식입니다.
  • 픽셀: 동일한 장면과 클록을 저해상도로 렌더링하고, 최근접 이웃 픽셀로 확대하며, 질서 있는 디더링 및 채널 양자화를 적용합니다. 이는 3D 지오메트리의 픽셀 마감이지 복셀 아트나 수제 스프라이트가 아닙니다. 커널 마감으로 시작하고, 작동하는 렌더러를 CSS 블러나 정적 이미지로 교체하지 마세요.

카메라는 고정 상태로 유지하세요. 흰색 네거티브 공간이 장면을 분리합니다. 지면은 두꺼운 플랫폼이 아닌, 그 공간으로 페이드되는 평평하고 불규칙한 컷아웃입니다. 절대 토양 벽이나 전시 받침대를 강요하지 마세요. 명시적으로 요청된 경우에만 돌출된 베이스를 사용하세요. 열 개의 독립적인 게으른 움직임보다 기대, 접촉 및 회복이 있는 하나의 동작을 선호하세요. 이야기와 경쟁하지 않는 보조적인 생명체로 둘러싸세요. 스포츠 공은 근처를 스치지 않고 배우의 손, 방망이 또는 후프로 직접 향해야 합니다.

구성 및 마감별 결정 사항은 references/art-direction.md를 읽으세요. 빌드 전에 references/scene-api.md를 읽으세요.

세계 구축

라이프사이클 스크립트 없이 스킬의 고정 종속성을 한 번 설치하세요:

npm ci --ignore-scripts --prefix <skill>

<subject>.js를 @diorama/worlds에서 defineWorld를 가져오는 ES 모듈로 작성하세요. name, title, description, 양수 유한 duration, 루프 내의 still, bounds, build(W) 및 tick({t, parts, W})를 내보내는 하나의 월드를 내보내세요. 가장 가까운 예제는 주제의 제한 사항이 아닌 형식 참조입니다:

  • examples/bakery.js: 손목과 손잡이 접촉 확인으로 반죽을 밀는 제빵사.
  • examples/observatory.js: 위를 향한 망원경에 지지대/초점 그립 앵커로 초점 조정.
  • examples/florist.js: 독창적인 두 인물 꽃 가판대, 공유 성인 릭, 고정된 발 및 꽃다발 그립 앵커.
  • examples/pottery-studio.js: 독창적인 공예 동작, 공유 성인 릭이 실제 손 접촉으로 회전하는 점토 용기를 따릅니다.
  • examples/cricket.js: 넓은 지면, 관절이 있는 선수 및 조정된 공 사이클.
  • examples/basketball.js: 더 작은 비네트, 슛, 네트 및 리턴 패스.
  • examples/street-juggler.js: 새로운 전이 테스트 결과; 세 개의 공 연쇄 던지기로 각각의 잡기/놓기 위치가 손바닥과 비교됩니다. 이는 다른 렌더러가 아닌 사용자 정의 엔드포인트 기반 팔을 사용합니다.

사용자의 참조 장면을 또 복사하는 대신 시각적 언어를 전이하는 독창적인 주제를 선호하세요. 사람에게는 공유 성인 W.person, W.plant 및 W.reach 헬퍼를 사용하세요. 거대한 머리 상자 인물로 교체하지 마세요.

킷 헬퍼를 사용하여 지오메트리를 한 번 구축하고 애니메이션을 위해 참조를 반환하세요. tick은 모든 애니메이션 변환을 절대 시간에서 할당해야 합니다. 위치 누적, 프레임 카운터, 프레임당 새 지오메트리/재질, 독립적인 타이머 또는 카메라 드리프트가 없어야 합니다. 실시간 이벤트 타이밍을 사용하세요: 농구 슛이 느린 동작을 요청하지 않는 한 2초 동안 떠 있어서는 안 됩니다. 기대, 빠른 비행/접촉 및 읽기 쉬운 회복을 설정하세요. 기본 재생 속도는 1배이며 느린 타임라인을 수정하기 위한 것이 아닙니다. 런타임 클록은 드롭된 프레임과 독립적입니다.

초기 지오메트리뿐만 아니라 모든 포즈, 움직이는 소품 및 그림자를 포함하도록 bounds를 설정하세요. 반복되는 부품은 지오메트리와 재질에 따라 자동으로 인스턴싱됩니다. 팔레트 색상을 재사용하세요.

주제별 객체는 그룹과 프리미티브로 구성될 수 있습니다. 사용자 정의 Three.js 지오메트리나 재질의 경우 W.own(resource)로 등록하여 해제 시 폐기되도록 하세요. 호버링이 필요한 컨트롤을 추가하지 마세요: 장면의 이야기는 포인터 없이 터치에서도 작동해야 합니다.

단일 오프라인 HTML 파일을 빌드하세요:

node <skill>/scripts/build-world.mjs <subject>.js <output.html>

결과에는 Three.js, 생성된 텍스처, 장면 및 컨트롤이 포함됩니다. 디오라마 스킬의 SVG 출력보다 큽니다. 해당 트레이드오프를 공개하세요. CDN 가져오기, 스톡 텍스처, 모델 다운로드 또는 API 키가 필요하지 않습니다. 새로운 외부 자산은 선택 사항으로 유지하고 요청 시 라이선스와 네트워크 비용을 공개하세요.

실제 출력 증명

번들 예제뿐만 아니라 새 장면에서 렌더링 검사를 실행하세요:

node <skill>/scripts/look-world.mjs <subject>.js <output-directory>

네트워크 액세스 없이 Chromium에서 실제 생성된 HTML을 열고, 여러 단계와 네 가지 마감, 모바일 뷰 및 JSON 보고서를 저장합니다. 접촉 기반 스토리의 경우 contactTimes와 {label,a:[x,y,z],b:[x,y,z]} 쌍을 반환하는 contacts({t,parts,W}) 검사기를 선언하세요. look 명령은 해당 시간에 실제 포즈가 취해진 엔드포인트를 비교합니다. 또한 명명된 릴리스 및 접촉 시간에 공/소품 및 손바닥/방망이/후프 좌표를 확인하세요. 일반적인 모션 및 이음새 검사는 소품이 배우를 놓치는 것을 잡아내지 못합니다.

브라우저 오류, 보이는 비흰색 지오메트리, 장면 변경, 실제 벽시계 속도, 선언된 손/소품 접촉, 드로우 콜 예산, 결정적 탐색, 루프 이음새, 축소 모션, 일시 중지, 오프스크린 일시 중단 및 폐기를 확인합니다. CHROME_PATH는 설치된 Chromium을 선택할 수 있으며, 그렇지 않으면 스킬 폴더에서 npx playwright install chromium을 실행하여 Playwright가 지원하는 브라우저를 설치합니다.

그런 다음 저장된 이미지를 열고 살펴보세요. 구조적 검사를 통과한다고 해서 유사성, 서사 또는 아트 품질이 확립되는 것은 아닙니다. 슛/접촉 순간, 실루엣, 그림자, 지면 가장자리, 픽셀 가독성, 카메라 클리핑 및 모바일 스케일을 검사하세요. references/art-direction.md를 읽고, 장면의 실패를 수정한 후 다시 실행하세요. 결함이 명백히 거기에 있을 때만 성능 수정을 재사용 가능한 킷에 유지하고, 하나의 장면이 다른 구성을 필요로 하기 때문이 아닙니다.

킷 변경의 경우 다음도 실행하세요:

npm test --prefix <skill>

스크린샷을 열어보지 않고 시각적 검토를 주장하지 마세요. 유지 관리되는 두 예제가 통과한다고 해서 새로운 스킬 평가를 주장하지 마세요. 이 지침에서 생성된 새 주제가 전이 테스트입니다. 프롬프트, 출력 및 결과를 별도로 저장하세요. 브라우저/WebGL을 사용할 수 없는 경우 블로커를 보고하고 시각적 품질을 명시적으로 확인되지 않은 상태로 두세요.

정직하게 전달

빌드된 HTML과 최소한 하나의 검토된 스크린샷을 제공하세요. 개념, 마감, 선택된 정지 시간, 대략적인 파일 크기 및 알려진 제한 사항을 명시하세요. 임베딩은 references/scene-api.md를 참조하세요. 검사하거나 측정한 것 이상의 원본 참조 충실도, 접근성, 장치 성능 또는 매끄러운 루프를 주장하지 마세요. 초기 공개 릴리스는 프로덕션 인증 렌더러가 아닙니다. 실제 제한 사항과 측정된 검사를 공개하세요.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

diorama

Build small animated 3D worlds for the web (isometric camera, blocks on a rounded base, soft shadows, little vehicles and people that move) in one of six themes you can tune: toy (pastel blocks, warm sun), soft, mono (one accent, the rest tints of ink), line (a hairline drawing, white fills and ink edges, by hand if asked), print (flat tones and ink, a printed illustration) and night. A hero scene for a landing page, a card-sized illustration for docs or a blog, or a mini figure for any small spot (an empty state, a feature in a list, a 404). Use this whenever someone asks for a 3D illustration, an isometric scene, a low-poly or "toy town" animation, a monochrome or line-art 3D figure, a hand-drawn or sketched figure of an object with a bit of life in it, a blank/empty-state illustration, an illustration that answers a hover or a tap, a little game-like SVG world, even if they never say "3D" or "isometric". Ships one self-contained HTML file that draws SVG with no dependency (no th...

diorama-pixel

Build animated pixel-art miniatures: a small isometric place drawn at low resolution and enlarged crisp, with ordered dithering on every surface, procedural planks, thatch, paving, grass and water, a ground that dissolves into the white page, soft cast shadows and tiny people with a looping action. One self-contained HTML file with no dependency (no three.js, no WebGL): a software renderer on a 2D canvas, about 50 KB. Use it whenever someone asks for a pixel-art scene, a retro or 16-bit isometric vignette, a dithered illustration, or a cozy little place in pixels for a landing page, a blog post or a card. For vector UI illustrations, line art and empty states use the diorama skill; for detailed Three.js worlds with articulated people and four finishes use diorama-worlds.

관련 스킬