hyperframes

Render MP4/WebM videos from HTML compositions.

  • creative
  • video
  • animation
  • html
  • gsap
  • motion-graphics

Declared platforms: linux · macos · windows

Install
npx skills add 'https://github.com/NousResearch/hermes-agent/tree/main/optional-skills/creative/hyperframes'
Download bundle ↓
main · 24fd22bScanned 2026-09-15

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included. Some commit authors have no linked GitHub account.

File history ↗
View on GitHub
← Back to SKILL.md
#!/usr/bin/env bash# HyperFrames setup for Hermes.## Verifies Node >= 22 and FFmpeg, installs the `hyperframes` CLI globally,# pre-caches `chrome-headless-shell`, and runs `hyperframes doctor`.## Pins `hyperframes@>=0.4.2` so the OpenClaw/Chromium-147 fix from# https://github.com/heygen-com/hyperframes/issues/294 (commit 4c72ba4)# is always present — the engine auto-detects `HeadlessExperimental.beginFrame`# support and falls back to screenshot capture otherwise.## Idempotent: safe to re-run. set -euo pipefail MIN_NODE_MAJOR=22MIN_HYPERFRAMES_VERSION="0.4.2" red()    { printf '\033[31m%s\033[0m\n' "$*"; }green()  { printf '\033[32m%s\033[0m\n' "$*"; }yellow() { printf '\033[33m%s\033[0m\n' "$*"; }bold()   { printf '\033[1m%s\033[0m\n' "$*"; } bold "==> HyperFrames setup" # --- 1. Node.js -------------------------------------------------------------- if ! command -v node >/dev/null 2>&1; then  red "✗ Node.js is not installed."  echo "   Install Node.js >= ${MIN_NODE_MAJOR} (nvm, Homebrew, or your package manager) and re-run."  exit 1fi node_version="$(node --version | sed 's/^v//')"node_major="$(echo "$node_version" | cut -d. -f1)"if [ "$node_major" -lt "$MIN_NODE_MAJOR" ]; then  red "✗ Node.js ${node_version} is too old. HyperFrames requires Node.js >= ${MIN_NODE_MAJOR}."  echo "   Upgrade with 'nvm install ${MIN_NODE_MAJOR} && nvm use ${MIN_NODE_MAJOR}' or your package manager."  exit 1figreen "✓ Node.js ${node_version}" # --- 2. FFmpeg --------------------------------------------------------------- if ! command -v ffmpeg >/dev/null 2>&1; then  red "✗ FFmpeg is not installed."  case "$(uname -s)" in    Linux*)   echo "   sudo apt-get install -y ffmpeg   # Debian/Ubuntu"              echo "   sudo dnf install -y ffmpeg       # Fedora/RHEL";;    Darwin*)  echo "   brew install ffmpeg";;    MINGW*|MSYS*|CYGWIN*) echo "   winget install Gyan.FFmpeg";;    *)        echo "   See https://ffmpeg.org/download.html";;  esac  exit 1figreen "✓ FFmpeg $(ffmpeg -version 2>&1 | head -1 | awk '{print $3}')" # --- 3. npm ------------------------------------------------------------------ if ! command -v npm >/dev/null 2>&1; then  red "✗ npm is not installed (should ship with Node.js)."  exit 1fi # --- 4. Install / upgrade hyperframes CLI ----------------------------------- bold "==> Installing hyperframes CLI (>= ${MIN_HYPERFRAMES_VERSION})" current_hyperframes=""if command -v hyperframes >/dev/null 2>&1; then  current_hyperframes="$(hyperframes --version 2>/dev/null | tail -1 | sed 's/^v//')"fi if [ -n "$current_hyperframes" ]; then  yellow "   Found hyperframes ${current_hyperframes}"fi # Always install/upgrade to >= MIN version.# Using 'latest' so we pick up any newer auto-detect/capture fixes.if ! npm install -g "hyperframes@latest" >/dev/null 2>&1; then  red "✗ npm install -g hyperframes@latest failed."  echo "   Try: sudo npm install -g hyperframes@latest"  echo "   Or use a user-scoped npm prefix: npm config set prefix ~/.npm-global && export PATH=\"\$HOME/.npm-global/bin:\$PATH\""  exit 1fi installed_version="$(hyperframes --version 2>/dev/null | tail -1 | sed 's/^v//')"green "✓ hyperframes ${installed_version} installed globally" # Sanity-check minimum version.version_ge() {  # version_ge A B  →  true if A >= B  [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -1)" = "$2" ]}if ! version_ge "$installed_version" "$MIN_HYPERFRAMES_VERSION"; then  red "✗ hyperframes ${installed_version} is below required minimum ${MIN_HYPERFRAMES_VERSION}."  echo "   Try 'npm install -g hyperframes@latest' or 'sudo npm install -g hyperframes@latest'."  exit 1fi # --- 5. Pre-cache chrome-headless-shell --------------------------------------## Chromium 147+ removed HeadlessExperimental.beginFrame. System Chrome (e.g.# /usr/bin/google-chrome) can't render with the fast path, so the engine# auto-detects and falls back to screenshot mode — but BeginFrame mode is# faster and produces higher-quality output. Install chrome-headless-shell# up front so the engine picks it over system Chrome. bold "==> Pre-caching chrome-headless-shell (for best render quality)" if ! npx --yes puppeteer browsers install chrome-headless-shell >/dev/null 2>&1; then  yellow "⚠ Could not pre-install chrome-headless-shell."  yellow "  Rendering will still work via screenshot-mode fallback (slower)."  yellow "  If you hit HeadlessExperimental.beginFrame errors:"  yellow "     export PRODUCER_FORCE_SCREENSHOT=true"  yellow "  See references/troubleshooting.md."else  green "✓ chrome-headless-shell installed"fi # --- 6. Doctor --------------------------------------------------------------- bold "==> Running hyperframes doctor" if hyperframes doctor; then  green "✓ HyperFrames is ready"  echo  echo "   Scaffold a project:   npx hyperframes init my-video"  echo "   Preview:              npx hyperframes preview"  echo "   Render:               npx hyperframes render"else  yellow "⚠ hyperframes doctor reported issues."  yellow "  See references/troubleshooting.md or re-run 'hyperframes doctor'."  exit 1fi