Community코딩 & 개발github.com

madhavsomani/animation-skills

Madhav의 '무한 캔버스' 릴 포뮬러. 검은 캔버스 위 라이브 마커 드로잉, 영역 간을 부드럽게 이동하며 확대/축소하는 카메라, 아바타가 포함된 스케치 프레임, 빨간색으로 강조된 실제 아티팩트, 축소 맵 엔딩 및 음성 CTA로 구성됩니다. 기존 음성 트랙과 HeyGen 아바타 클립(또는 음성만)을 사용하여 30~60초 분량의 기술/커리어 릴을 제작할 때 사용합니다.

animation-skills란 무엇인가요?

이 스킬은 Madhav의 '무한 캔버스' 릴 포뮬러를 구현한 HyperFrames 기반 AI 에이전트 스킬입니다. 검은 캔버스(`#world`, 2400x6400) 위에 도트 그리드를 배치하고, 카메라는 절대 컷 없이 `power3.inOut`으로 부드럽게 글라이드하며 큰 움직임에는 모션 블러를 적용합니다. 모든 드로잉은 음성에 맞춰 라이브로 그려지며, SVG 패스와 `feDisplacementMap` 필터로 마커 느낌을 살리고, Ink Free 폰트로 손글씨 라벨을 `steps()`로 타이핑합니다. 실제 아키텍처, 코드, 터미널, 스크린샷, 문서 등 실제 기술 아티팩트를 빨간색 화살표와 원으로 강조하여 소프트웨어 엔지니어링 대상 시청자의 신뢰를 얻습니다. 아바타는 405x720 크기의 스케치 프레임 안에 배치되며, 카메라가 프레임 안으로 확대/축소(s = 1080/405)될 때 아바타가 전체 화면으로 전환됩니다. 아바타는 전체 런타임의 40% 미만(약 20% 목표)으로 유지하며, 훅 비트, 중간 개인적인 비트, 클로즈에서만 등장합니다. 빈 화면을 허용하지 않으며, 각 영역이 뷰 y 120-1500을 채우고, 카메라 이동 중에는 영역 사이에 빨간색 연결 화살표가 그려지며, 카메라가 도착하면 노란색 헤더가 나타납니다. 종료 시 카메라는 전체 그려진 맵으로 축소되어(s ≈ 0.31) 흐릿한 엔딩 카드 뒤에 배치되며, CTA는 음성으로 말해집니다. 음악은 인스타그램에 안전한 로열티 프리 소스를 사용하며, 음성 사이사이와 줌아웃 시 음악을 올립니다. SFX는 펜 클릭, 타이핑 소리, 페이지 넘김, 스위시-더드, 종소리 등을 포함합니다. 빌드 단계는 입력(음성 WAV, 단어 타이밍, 아바타 MP4, 실제 아티팩트 이미지) → 스토리보드 영역 → 템플릿 복사 및 교체 → SFX 삽입 → `[email protected] check`로 검증 → `[email protected] render`로 렌더링 → QA(연속 사진, 전체 디코드, 라우드니스, 아바타 초 카운트, 빈 화면/오버플로우 텍스트 확인) → 전체 품질 마스터(1440x2560 H.264, ~24Mbps, 300MB 미만) 제공으로 이어집니다. 인스타그램의 인앱 음악은 수동 게시 시에만 추가 가능하므로, 예약 게시 시에는 로열티 프리 음악을 직접 포함해야 합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/madhavsomani/animation-skills/tree/HEAD/skills/canvas-explainer

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

문서

Canvas explainer Reel

First built for a resume-advice Reel in October 2026, then saved as a repeatable formula.

  • Working example: template/example-08-resume.html (the full HyperFrames composition of that Reel; its media assets are not included).
  • Screenshots: ../../docs/canvas-explainer/.

House rules that apply: keep the avatar on screen in short bursts (about 3-4 s each), and deliver the full-quality master only. Engine: HyperFrames (pin [email protected]). FFmpeg is for prep and QA only.

The formula (keep all of it)

  1. One infinite black canvas. Use #world at 2400x6400 with a subtle dot grid. The camera never cuts; it glides with power3.inOut and a short motion blur on big moves.
  2. Everything is drawn live, on the word it's spoken.
    • Marker strokes are SVG paths with a rough feDisplacementMap filter.
    • Handwritten labels use Ink Free, typed on with steps().
    • Colours: white #f4f4ef, yellow #ffd84a, blue #6f8cff, pink #ff6fae, green #7ee08a, red #ff4b3e.
    • Red arrows and circles point at the key thing.
  3. Real tech artifacts, never generic doodles alone. A software-engineering audience wants real architecture, code, terminals, real screenshots and real documents (e.g. a redacted resume), annotated with boxes and handwriting.
  4. Avatar inside sketched frames on the canvas.
    • Frames are 405x720 at 9:16. The camera zooms into a frame (s = 1080/405) so his footage goes full screen; that zoom is the transition. Annotate on top of the footage in handwriting.
    • Avatar total stays under 40% of runtime (aim for about 20%): one hook beat, one mid "personal" beat, the close.
  5. No empty screen.
    • Each region fills view y 120-1500.
    • Red connector arrows draw between regions during camera moves.
    • A yellow header lands as the camera arrives.
    • Captions sit at y 1555-1720 in Ink Free 64px with yellow keywords. Wrap the joined caption HTML in an inner <span>, or flex drops the spaces.
  6. Ending.
    • The camera zooms out to the whole drawn map (s ≈ 0.31) behind a dimmed (0.58) end card.
    • The CTA is spoken in his voice. Example: "Want my resume? Comment 'resume', and I'll send it to you as a template." Show the keyword big in yellow.
    • Never tell viewers not to copy the shared resource. The resource is theirs to use.
  7. Sound.
    • A music bed under the voice, carved with ~/.claude/skills/hyperframes-audio/scripts/carve.mjs --comp index.html --core <dir with node_modules/@hyperframes/core>. Point --core at any project folder that has @hyperframes/core installed.
    • Lift the music in voice gaps and on the zoom-out.
    • SFX: pen-click on ticks/labels, typing on code, page-turn/whoosh on camera moves, swish-thud on pops, chime at the end.
    • Music must be Instagram-safe (see Music below).

Build steps

  1. Inputs.
    • Voice WAV, normalized -16 LUFS: hook + narration, concatenated.
    • Word timings word@seconds: aligned JSON or clips.json captions, saved as words.txt.
    • Avatar MP4 whose media time = voice time minus the hook length.
    • Real artifact images.
  2. Storyboard regions. For each beat, pick a world origin and list its draws with spoken-word times. Keep text inside the 1080px view (Ink Free ≈ 0.5 em per character).
  3. Copy template/example-08-resume.html into a new project folder and replace the region blocks, frames (poster JPG under each <video class="clip">), K camera keyframes, overlays (.ov) and end card.
    • Assets: assets/fonts/Inkfree.ttf (the Windows system font), IBM Plex Mono, gsap.min.js, SFX, music, the poster frames, package.json and hyperframes.json.
  4. SFX. Inject the <audio> tags with greedy track packing so no two overlap on one track (one <audio> per cue; a new track index whenever cues would overlap). Then run carve.
  5. Check. Run npx --yes [email protected] check until it passes. Contrast flags on intentionally grey text are acceptable.
  6. Render. npx --yes [email protected] render -o renders/<name>.mp4.
  7. QA.
    • Contact sheet at the camera-move moments.
    • Full decode, 1080x1920, CFR30, yuv420p.
    • Loudness around -14 to -16 LUFS.
    • Avatar seconds counted.
    • Look at each frame for empty or overflowing text.
  8. Delivery. Deliver the full-quality master (for Instagram, 1440x2560 H.264 at up to ~24 Mbps and under 300 MB). Never shrink resolution or bitrate just to fit an uploader's file-size limit; find a route that takes the real master. Upload, scheduling and publishing need the owner's explicit yes.

Music (Instagram-safe)

Instagram's in-app music library can't be attached to posts scheduled through a third-party scheduler or the API; it can only be added in the Instagram app when posting manually. For scheduled posts, bake in royalty-free beds instead: the HeyGen audio catalog (search_audio_sounds, a free search/download, not generation) or another licensed library. Keep the music quiet under speech. If you want a trending Instagram sound, deliver a version with music muted or low so you can add the sound in-app when publishing manually.

Individual skills in this repo

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

관련 스킬