한국어 번역
<inputs>
다음 세 가지를 저에게 질문할 것: 도형이 변신할 8~12개의 화면 부품(예: 버튼, 로딩 중 표시, 음악 플레이어, 볼륨 슬라이더, 온/오프 스위치, 탭, 그래프, ⌘K로 여는 검색창, 잠깐 나타나는 알림), 색상은 완전한 흑백인지 포인트 컬러 1색인지, 그리고 120BPM(1분에 120박의 템포) 전후의 저작권 없는 곡(예: Mixkit, 상업적 이용 무료).
</inputs>
<direction>
디자이너용 작품 사이트 “Dribbble”에 올라갈 수준의 세련된 화면 움직임. 도형은 하나뿐이며, 절대 장면을 전환하지 않는다. 모든 상태는 같은 하나의 도형이 크기·모서리 둥글기·색을 바꾸며 형태를 바꾸는 움직임으로 표현하고, 내용물은 짧은 블러를 사이에 두고 교체한다. 커서가 실제 클릭과 드래그로 모든 변화를 일으킨다. 배경은 따뜻한 밝은 회색, 부품은 흰색과 검은색, 화면의 문자는 일본어이며 일본어 폰트는 Noto Sans JP, 영숫자와 기호는 Geist(폰트 1종). 움직임은 모두 “스프링” 같은 자연스러운 움직임으로 하고, 오버슈트(튕김)는 아주 미미하게. 카메라는 줌해서 각 상태가 화면을 가득 채우게 한다. 마지막 프레임은 첫 프레임과 같게 하여 루프시킨다.
금지: 튀는 듯한 움직임, 입자가 흩날리는 연출, 빛나는 번짐, 부품에 대한 그라디언트, 선 두께가 고르지 않은 아이콘, 아무 일도 일어나지 않는 군더더기 정지, 템플릿처럼 보이는 것 전반.
</direction>
<structure>
120BPM, 7마디(약 14초), 매 박마다 무언가가 일어난다.
버튼 → 로딩 중 표시 → 체크 → iPhone 다이내믹 아일랜드풍 표시 → 재생/일시정지 마크가 부드럽게 바뀌는 음악 플레이어 → 재생 바의 손잡이를 드래그해 재생 위치를 이동 → 볼륨 슬라이더로 변신(최대치를 넘겨 드래그하면 고무처럼 늘어남) → 온/오프 스위치가 박자에 맞춰 전환 → 스위치 손잡이가 액체처럼 움직이는 탭 선택 표시가 됨 → 탭이 열려 스스로 선을 그려가는 그래프로(커서를 올리면 말풍선이 뜸) → ⌘K 검색창으로 접힘 → 입력해 후보를 좁힘 → Enter → 잠깐 나타나는 알림 → 버튼으로 복귀.
</structure>
<build>
1. HTML 파일 하나, 정사각형 1440x1440. 모든 겉모습은 seek(t)(시간 t를 넘기면 그 순간의 화면이 결정되는 함수) 안에서 시간으로부터 계산한다. CSS 트랜지션(자동 애니메이션 기능)도 타이머도 사용하지 않고, 프레임 사이에 상태를 이월하지 않는다.
2. “스프링” 움직임은 식으로 직접 구할 수 있는 형태(폐형식 스텝 응답)로 만든다. 목표가 여러 번 바뀌는 값은 변화마다 하나씩 계산한 움직임을 더해 간다. 그러면 언제든 시간만으로 값이 결정된다.
3. 탭 선택 표시는 왼쪽 끝과 오른쪽 끝을 각각 다른 스프링으로 움직이고, 진행 방향의 끝이 뒤쪽보다 먼저 늘어나게 한다. 스위치 손잡이도 같은 방식.
4. 드래그는 직접 조작: 커서를 누르고 있는 동안 값은 커서 위치에서 계산한다. 놓으면 그 위치에서 스프링으로 돌아간다.
5. 곡은 numpy(계산용 도구)로 분석해 박자 위치를 찾아내고, 마디 첫 박에서 시작한다. 조작음은 측정한 소리의 피크 위치에 둔다.
6. Playwright(브라우저를 자동 조작해 화면을 이미지로 내보내는 도구)로 렌더링한다. 1프레임당 4코마분을 내보내고, ffmpeg(영상을 만드는 도구)의 tmix로 겹쳐 모션 블러(움직임의 잔상)를 걸어 60fps로 만든다.
7. 전체를 내보내기 전에 1박마다 1프레임만 내보내 확인한다. 박자에서 어긋난 것, 답답한 것, 읽기 어려운 것을 고친다.
</build>
<gotchas>
카메라로 확대/축소되는 요소에는 will-change(브라우저의 렌더링 설정)를 절대 붙이지 않는다. 붙이면 문자가 흐려진다. 형태가 바뀌는 상자 안에서 교체되는 문자에는 각각 전용의 등장/퇴장 타이밍을 갖게 한다(겹치는 것을 방지). 마지막 프레임은 커서의 위치와 속도까지 포함해 첫 프레임과 완전히 일치시킨다. 그렇게 하지 않으면 루프가 끊긴다.
</gotchas>
<start>
먼저 입력 내용을 저에게 질문하고, 코드를 작성하기 전에 박자별 상태 목록을 보여주세요.
</start>