hyperframes-animation (HeyGen HyperFrames)
HyperFrames 컴포지션의 타이밍과 애니메이션 규칙을 정의합니다: data-* 속성, clip, 트랙, 하위 컴포지션.
hyperframes-animation: HyperFrames 애니메이션 컴포지션이 렌더 계약을 따르도록 만들지만(대조군 3.8, 스킬 4.9, 한 문장 4.5) 대조군 토큰의 1.05배를 쓰며, 이 스킬은 HeyGen 저장소에서 제거되었습니다
Codex CLI · gpt-6-astra
26.1 / 30
스킬 없이 대비 향상폭: +1.16 · 추천 · 18회 실행
추천: 총점 26.1/30이 22점 이상, 출력 품질 4.9가 3.5 이상, 향상폭 +1.16가 +1.0 이상입니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 3.2
- 출력 품질
- 4.9
- 토큰 및 시간 비용
- 5.0
- 설치 및 이식성
- 4.0
- 안전성
- 4.0
보안 리뷰
주의정적 스캔: CRITICAL 17 / HIGH 17 / MEDIUM 148. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(스캐너의 BLOCK 판정은 오탐). 스크립트를 맹목적으로 실행해서는 안 됩니다. 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add heygen-com/hyperframes --skill hyperframes-animation
고정 커밋: 207c8a4daf6480d697f203784f1fd422727569e3
테스트일: 2026-11-02
테스트한 과제
- 키네틱 헤드라인 — 6초 1920x1080 HyperFrames(GSAP 타임라인을 프레임 단위로 탐색해 HTML 페이지를 MP4로 렌더링하는 오픈소스 프레임워크이며, GSAP은 CDN script 태그로 불러옵니다) 컴포지션을 만드세요: 세 단어 헤드라인('Build. Ship. Repeat.')이 각 단어마다 강하게 등장…
- 장면 전환 — 8초 1920x1080 HyperFrames(GSAP 타임라인을 프레임 단위로 탐색해 HTML 페이지를 MP4로 렌더링하는 오픈소스 프레임워크이며, GSAP은 CDN script 태그로 불러옵니다) 컴포지션을 전체 화면 장면 두 개('Problem' 4.5초, 'Solution' 4.5초)로 만드세요…
- 카운트업 수치와 막대 — 7초 1920x1080 HyperFrames(GSAP 타임라인을 프레임 단위로 탐색해 HTML 페이지를 MP4로 렌더링하는 오픈소스 프레임워크이며, GSAP은 CDN script 태그로 불러옵니다) 컴포지션을 만드세요: 0에서 87%까지 2.5초 동안 올라가는 큰 숫자와 가로…
장점
- 스킬 없이보다 평균 점수를 3.76에서 4.92로 끌어올렸습니다(+1.16).
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 토큰 오버헤드 없음: 스킬 없이의 1.05배 토큰을 사용합니다.
- 자신의 규칙을 한 문장으로 요약한 프롬프트보다 +0.39 높은 점수를 냈습니다.
- 스킬 사용 시 높은 절대 품질: 4.92/5.
단점
- 테스트 참고: heygen-com/hyperframes 커밋 207c8a4의 구버전에서 테스트했습니다. 이후 스킬이 저장소 HEAD에서 제거되어 현재 저장소에서는 설치 명령이 동작하지 않을 수 있습니다. 실행 중 hyperframes-core도 읽습니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 각 프롬프트에는 HyperFrames를 한 문장으로 설명했습니다(GSAP 타임라인을 프레임 단위로 탐색해 HTML 페이지를 MP4로 렌더링). 과제는 6초짜리 키네틱 헤드라인(세 단어가 강하게 등장), 8초짜리 2장면 전환, 7초짜리 카운트업 숫자와 막대입니다. 한 문장 프롬프트군은 애니메이션 규칙을 한 문단으로 제시합니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 3.76 | 131k |
| 한 문장 프롬프트 | 4.52 | 87k |
| 스킬 사용 | 4.92 | 137k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 26.1 / 30, 판정 추천.
참고: heygen-com/hyperframes의 커밋 207c8a4, 즉 이전 버전에서 테스트했습니다. 이후 저장소 HEAD에서 스킬이 제거되어 설치 명령이 현재 저장소에서는 작동하지 않을 수 있습니다. 실행 중 hyperframes-core도 읽습니다.
판정: 권장 (26.1 / 30). 출처: heygen-com/hyperframes, skills/hyperframes-animation, skills/hyperframes-core, 커밋 207c8a4에 고정. 설치: npx skills@latest add heygen-com/hyperframes --skill hyperframes-animation. 라이선스: Apache-2.0 (저장소 LICENSE).
어떤 스킬인가
heygen-com/hyperframes의 hyperframes-animation 스킬로, 커밋 207c8a4에서 테스트했습니다(이 스킬은 더 이상 저장소 HEAD에 없으므로 은퇴한 버전을 설명합니다). HyperFrames 컴포지션을 위한 애니메이션 안내입니다. window.__timelines[root id]에 등록된 일시정지된 GSAP 타임라인 하나, 레이아웃 속성 대신 GSAP transform 별칭, 이름 있는 이징, 시퀀스에는 스태거, 트윈 시점에 Math.random/Date.now/timers/rAF/getBoundingClientRect 사용 금지, 프록시 객체에서 트윈하는 카운트업 카운터, 그리고 data-start/data-duration을 가진 장면들로 그 합계가 루트 duration에 포함되어야 합니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현은 예외).
각 프롬프트에는 HyperFrames가 한 문장으로 설명되어 있습니다(GSAP 타임라인을 탐색해 HTML 페이지를 MP4로 렌더링). 작업은 6초 키네틱 헤드라인(세 단어가 강하게 들어옴), 8초짜리 2장면 전환, 막대가 있는 7초 카운트업 숫자입니다. 한 문장 프롬프트는 애니메이션 규칙을 한 문단으로 설명합니다.
- 키네틱 헤드라인 — 6초 1920x1080 HyperFrames(HTML 페이지를 GSAP 타임라인을 프레임 단위로 탐색해 MP4로 렌더링하는 오픈소스 프레임워크. GSAP은 CDN script 태그에서 가져옴) 컴포지션을 만드세요. 세 단어 헤드라인('Build. Ship. Repeat.')이 각 단어마다 강하게 들어오는…
- 장면 전환 — 8초 1920x1080 HyperFrames(HTML 페이지를 GSAP 타임라인을 프레임 단위로 탐색해 MP4로 렌더링하는 오픈소스 프레임워크. GSAP은 CDN script 태그에서 가져옴) 컴포지션을 만드세요. 전체 화면 장면 두 개('Problem' 4.5초, 'Solution' 4.5초)로 구성된…
- 막대가 있는 카운트업 통계 — 7초 1920x1080 HyperFrames(HTML 페이지를 GSAP 타임라인을 프레임 단위로 탐색해 MP4로 렌더링하는 오픈소스 프레임워크. GSAP은 CDN script 태그에서 가져옴) 컴포지션을 만드세요. 큰 숫자가 2.5초에 걸쳐 0에서 87%까지 증가하고 가로…
채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.
결과
세 번째 군에 전달한 한 문장 프롬프트: "HyperFrames 컴포지션에서는 window.__timelines[root id]에 등록된 일시정지된 GSAP 타임라인 하나를 사용하세요. 요소는 GSAP transform 별칭(x, y, scale, rotation, opacity)으로 움직이고 width/height/top/left는 절대 쓰지 마세요. 이름 있는 이징을 고르고 시퀀스에는 스태거를 사용하세요. 트윈 시점에 Math.random/Date.now/timers/rAF/getBoundingClientRect를 쓰지 말고 repeat:-1도 쓰지 마세요. 카운터는 프록시 객체의 onUpdate에 트윈을 걸어 구동하세요. 장면은 data-start/data-duration을 가진 시간 지정 요소이며 루트 data-duration이 이를 모두 포함해야 합니다."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 프롬프트 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-kinetic | 3.5 | 4.25 | 4.75 | 113k | 77k | 144k | 2/2 |
| t2-transition | 3.57 | 5.0 | 5.0 | 152k | 111k | 159k | 2/2 |
| t3-countup | 4.21 | 4.32 | 5.0 | 126k | 73k | 107k | 2/2 |
평균 점수: 스킬 없이 3.76, 스킬 사용 시 4.92(델타 +1.16). 실행당 토큰: 131k 대 137k(1.05배), 시간 72초 대 70초. 한 문장 프롬프트군: 4.52(한 문장 프롬프트 대비 스킬의 이득: +0.39, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: +0.77). 한 문장 프롬프트는 실행당 87k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 1.57배 비용입니다.
실제로 있었던 일
- 대조군 3.76, 스킬 4.92, 한 문장 프롬프트 4.52(각 n=6). 대조군에서 가장 잦은 실패는 구조적입니다. 6/6 실행에서 루트 요소에 완전한 id/width/height/duration 조합이 없었고, 5/6에서는 타임라인이 window.__timelines에 등록되지 않아 HyperFrames 렌더러가 찾지 못했습니다.
- 스킬은 이 검사들을 6/6에서 통과했습니다. 한 문장 프롬프트는 6회 중 2회에서만 타임라인을 등록했고(키네틱과 카운트업 작업에서 실패), 루트 duration과 속성은 올바르게 지정했습니다.
- 키네틱 헤드라인 작업: 스킬과 대조군 모두 2/2 실행에서 스태거 검사 기준 단어별 스태거를 놓쳤습니다(단어마다 별도 트윈 사용). 한 문장 프롬프트는 2/2에서 스태거를 사용했습니다. 이 검사는 범위가 좁아서 차이의 일부는 코드 스타일 문제입니다.
- 토큰: 스킬 137k, 한 문장 프롬프트 87k, 대조군 131k(실행당). 스킬은 대조군과 같은 토큰 비용으로 실행을 더 안정적으로 만들 뿐 더 저렴하지는 않으며, 한 문장 프롬프트는 둘 중 어느 쪽보다 36% 저렴합니다.
- 스킬은 규모가 큽니다(작업 폴더에 약 133개 파일 설치, 규칙·청사진·기법 포함). 스킬 사용군은 hyperframes-animation과 hyperframes-core를 모두 읽었으므로, 이 스킬이 코어 스킬을 가리키며 이 이득의 일부는 코어 계약에서 나옵니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_output_quality | 4.92 | 스킬 사용 시 평균 4.92/5점(프로그램 검사, 작업별 표 참조). |
| 2_lift_vs_no_skill | 3.16 | 스킬 없이 3.76점 대비 +1.16점(작업당 n=2, 약 1점 미만의 차이는 노이즈). |
| 3_trigger | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일이 읽힘. |
| 4_instructions_portability | 4 | SKILL.md와 다수의 참고 파일. HyperFrames 전용. |
| 5_efficiency | 5 | 토큰 1.05배(실행당 137k 대 131k), 시간 0.96배(70초 대 72초). |
| 6_safety_hygiene | 4 | 산문과 규칙만 포함. security.md 참조. |
이 테스트의 한계
- HTML/GSAP 텍스트에 대한 정적 검사이며 프레임을 렌더링하지 않았습니다(hyperframes CLI, Chrome, FFmpeg 미실행). 따라서 시각적 타이밍과 품질은 측정하지 않았습니다.
- HEAD에 더 이상 스킬이 없어 커밋 207c8a4에서 테스트했습니다. 설치 명령이 현재 저장소에서는 작동하지 않을 수 있습니다.
- 스태거 검사는 동등한 단어별 오프셋이 아니라 GSAP
stagger옵션만 허용합니다. - 셀당 n=2.
- 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.
보안
security.md를 참조하세요. 스캔: 17 CRITICAL / 17 HIGH / 148 MEDIUM. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
스킬을 사용하면 컴포지션이 거의 항상 HyperFrames 계약을 충족합니다. 스킬이 없으면 루트와 타임라인 등록이 대개 잘못됩니다. 규칙을 적은 한 문단만으로도 더 적은 토큰으로 그 차이의 대부분을 회복합니다. 스킬이 더 이상 벤더 저장소에 없으므로, 이 결과는 이전 버전의 기록으로 보시면 됩니다.
트랜스크립트
실행 로그: hyperframes-animation (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-kinetic control-1: 점수 3.5, 토큰 128548, 초 60.2, 검사 7/10, 연 파일 없음 t1-kinetic control-2: 점수 3.5, 토큰 99223, 초 66.5, 검사 7/10, 연 파일 없음 t1-kinetic oneliner-1: 점수 4.25, 토큰 79255, 초 64.5, 검사 9/10, 연 파일 없음 t1-kinetic oneliner-2: 점수 4.25, 토큰 75639, 초 62.9, 검사 9/10, 연 파일 없음 t1-kinetic treatment-1: 점수 4.75, 토큰 106794, 초 54.6, 검사 9/10, 연 파일 hyperframes-animation,hyperframes-core t1-kinetic treatment-2: 점수 4.75, 토큰 181725, 초 64.4, 검사 9/10, 연 파일 hyperframes-animation,hyperframes-core t2-transition control-1: 점수 3.57, 토큰 139995, 초 89.6, 검사 8/11, 연 파일 없음 t2-transition control-2: 점수 3.57, 토큰 164538, 초 97.6, 검사 8/11, 연 파일 없음 t2-transition oneliner-1: 점수 5.0, 토큰 98384, 초 101.1, 검사 11/11, 연 파일 없음
18회 실행, 아티팩트 21개
샘플 출력
SOTA · With the skill: index.html (t1-kinetic, run 1, Codex)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=1920, height=1080"> <title>Build. Ship. Repeat.</title> <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script> <style> * { box-sizing: border-box; } html, body { width: 100%; height: 100%; margin: 0; } body { background: #080b10; color: #f5f7f5; font-family: system-ui, sans-serif; } #root { position: relative; width: 100%; height: 100%; overflow: hidden; } .clip { position: absolute; inset: 0; } .background { background: #080b10; } .glow { position: absolute; left: 310px; top: 140px; width: 1300px; height: 800px; border-radius: 50%; background: radial-gradient(ellipse, #167b60 0%, #0d463e 32%, transparent 70%); opacity: .24; } .grid { position: absolute; inset: 0; background-image: linear-gradient(#ffffff04 1px, transparent 1px), linear-gradient(90deg, #ffffff04 1px, transparent 1px); background-size: 120px 120px; mask-image: radial-gradient(ellipse, black, transparent 72%); } .content { display: flex; align-items: center; justify-content: center; flex-direction: column; } .headline { display: flex; align-items: baseline; justify-content: center; gap: 34px; margin: 0; width: 1720px; font-size: 160px; font-weight: 850; letter-spacing: -9px; line-height: 1.15; } .word { display: block; flex: 0 0 auto; transform-origin: 50% 65%; opacity: 0; } #repeat { color: #b7f676; } .subtitle { margin: 38px 0 0; font-size: 34px; font-weight: 400; letter-spacing: 1px; color: #b9c5c2; opacity: 0; } .beats { position: absolute; bottom: 210px; left: 0; right: 0; display: flex; justify-content: center; gap: 12px; } .beat { display: block; width: 38px; height: 4px; background: #b7f676; opacity: .15; transform-origin: left center; } </style> </head> <body> <div id="root" data-composition-id="main" data-start="0" data-duration="6" data-width="1920" data-height="1080"> <div class="clip background" data-start="0" data-duration="6" data-track-index="0" aria-hidden="true"> <div class="glow" id="glow"></div> <div class="grid"></div> </div> <section class="clip content" data-start="0" data-duration="6" data-track-index="1"> <h1 class="headline" aria-label="Build. Ship. Repeat."><span class="word" id="build">Build.</span><span class="word" id="ship">Ship.</span><span class="word" id="repeat">Repeat.</span></h1> <p class="subtitle" id="subtitle">The loop that never stops</p> <div class="beats" aria-hidden="true"><i class="beat"></i><i class="beat"></i><i class="beat"></i></div> </section> </div> <script> // Every visual change belongs to this single, frame-seekable timeline. const tl = gsap.timeline({ paused: true }); const beats = [0.25, 0.95, 1.65]; tl.fromTo('#glow', { scale: 0.88, x: -65, opacity: 0.24 }, { scale: 1.12, x: 65, opacity: 0.40, duration: 6, ease: 'sine.inOut' }, 0); tl.fromTo('#build', { scale: 1.65, y: -55, opacity: 0 }, { scale: 1, y: 0, opacity: 1, duration: 0.32, ease: 'power4.out' }, beats[0]); tl.fromTo('#ship', { scale: 1.35, x: 95, opacity: 0 }, { scale: 1, x [... excerpt: first 3200 of 4167 characters]