Инструмент миграции кодовой базы Remotion в HyperFrames HTML. Активируется только при явном запросе переноса — не вмешивается в обычную работу с Remotion.
npx -y skills add heygen-com/hyperframes --skill remotion-to-hyperframes --agent claude-codeПеренос видеокомпозиций Remotion (React) в HyperFrames (HTML + GSAP). Большинство идиом Remotion имеют прямые эквиваленты в HyperFrames — перевод механически прост примерно для 80% типичных композиций.
Используйте этот навык ТОЛЬКО когда пользователь явно просит мигрировать из Remotion. Примеры запросов: «port my Remotion project to HyperFrames», «convert this Remotion code», «migrate from Remotion».
Не поддерживается (откажитесь):
/general-video.Запустите scripts/lint_source.py над директорией Remotion-источника. Линтер обнаруживает паттерны, которые не переводятся корректно:
useState, useReducer, useEffect/useLayoutEffect с непустыми зависимостями, async calculateMetadata, сторонние React UI-библиотеки (MUI, Chakra, shadcn, Radix и т.д.).@remotion/lambda, delayRender, useCallback, useMemo, кастомные хуки.staticFile, interpolateColors.При срабатывании блокера — остановитесь. Прочитайте references/escape-hatch.md и предложите runtime interop паттерн.
Прочитайте references/api-map.md — индекс каждого Remotion API и его HF-эквивалента. Загружайте только нужные справочники:
| Источник содержит | Справочник |
|---|---|
Composition, calculateMetadata | parameters.md |
Sequence, Series, Loop, AbsoluteFill | sequencing.md |
useCurrentFrame, interpolate, spring | timing.md |
Audio, Video, Img, IFrame | media.md |
TransitionSeries, @remotion/transitions | transitions.md |
@remotion/google-fonts, Font.loadFont | fonts.md |
Создайте index.html с:
<div id="stage"> с атрибутами data-composition-id, data-start="0", data-duration, data-fps, data-width, data-height.data-start / data-duration / data-track-index.<style> для раскладки; CSS устанавливает начальное состояние каждого анимированного свойства.<script> с паузированным gsap.timeline({paused: true}). Каждый useCurrentFrame() становится tween на этом timeline.window.__timelines["<composition-id>"] = tl;# Рендер Remotion-baseline
cd remotion-src && npx remotion render <CompositionId> out/baseline.mp4
# Рендер HF-перевода
cd ../hf-src && npx hyperframes render --skill=remotion-to-hyperframes --output ../hf.mp4
# SSIM diff
../../scripts/render_diff.sh ./remotion-src/out/baseline.mp4 ./hf.mp4 ./diff
Порог: ~0.02 ниже p05 уровня сложности источника. Критично: оба рендера должны использовать одинаковый формат пикселей — установите Config.setVideoImageFormat("png") + Config.setColorSpace("bt709") в remotion.config.ts.
Всё, что не перевелось корректно (опущенные volume ramps, приблизительные переходы, заменённые шрифты), фиксируется в TRANSLATION_NOTES.md рядом с HF-выводом.
| Уровень | Форма композиции | Mean SSIM | Порог |
|---|---|---|---|
| T1 | одноэлементный fade-in | 0.974 | 0.95 |
| T2 | мульти-сцена + spring + audio + image | 0.985 | 0.95 |
| T3 | data-driven, кастомные компоненты, count-up | 0.953 | 0.90 |
| T4 | escape-hatch (8 lint-случаев) | 8/8 pass | н/д |