Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

cuboid-carousel — Claude skill: 3D card carousel

A skill that renders a 3D carousel of bevelled cuboids carrying card content: they fly in from the right, ride a wave, and exit left. Useful for promo clips and title sequences.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add heygen-com/hyperframes --skill cuboid-carousel -a claude-code
Open on GitHub

What cuboid-carousel does

cuboid-carousel is a HyperFrames block: a ready composition cuboid-carousel.html at 1920×1080, 6.666666666666667 s at 30 fps. A chain of rounded, bevelled cuboids flies in from the right as one rigid group, each cuboid rotating with its own stagger, then the group decelerates to a hero hold and exits left. Spacing is derived from the cuboid dimensions and the largest reachable X half-extent, so cuboids never overlap.

Under the hood: Three.js, GSAP 3.14.2, assets/cuboid-motion.js and environment addons. Forty variables carry the original DialKit schema — geometry, materials, lights, shadows, backdrop, camera, and per-segment durations and easings. Cards come from the built-in list or a JSON variable, cardsJson. One paused GSAP timeline registers as window.__timelines["cuboid-carousel"] and re-syncs on the hf-seek CustomEvent, so every frame is a closed-form function of time.

Mind the memory budget: roughly 350 MB per live instance, so run one at a time. Rendering uses WebGL and Canvas 2D with shadow maps and PMREM. Install it if you want a finished 3D card transition and don't mind tuning forty parameters. If your project has no Three.js or GSAP, a static CSS animation is the cheaper route.

What it helps with

  • build a 3D card carousel without hand-setting the scene
  • show a content list riding a wave with per-item rotation
  • hold one hero card larger than the rest
  • swap in your own cards through a JSON variable
  • tune lights, shadows and camera to match a brand

Example prompts for the agent

  • install the cuboid-carousel skill and list the variables that control the camera
  • replace the cards in cuboid-carousel with my JSON via cardsJson
  • make the third card the hero and drop gap to 0.05

How to install cuboid-carousel

1Skills CLI (Vercel)

npx skills add heygen-com/hyperframes --skill cuboid-carousel -a claude-code

2Manually: put the files in place

~/.claude/skills/cuboid-carousel/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/cuboid-carousel/

From the same set14

The whole set →
hyperframes heygen-com Instructs coding agents on creating, validating, and rendering HTML-based videos using the HyperFrames framework and CLI. Claude Code CX Codex Cursor +1 1,200,000installs hyperframes-cli heygen-com Controls HyperFrames video workflows from the CLI: audits layouts and contrast, edits timeline clips, captures snapshots, and renders locally or in cloud runtimes. Claude Code CX Codex Cursor +1 1,200,000installs media-use heygen-com Finds or generates media for HyperFrames videos, including voiceovers, music, cutouts, and color grades. Stores files locally in assets. Claude Code CX Codex Cursor +1 1,100,000installs hyperframes-registry heygen-com Finds and installs about 450 ready-made HyperFrames blocks and components as editable source code. Useful when adding video effects and titles without building markup from scratch. Claude Code CX Codex Cursor +1 1,000,000installs remotion-to-hyperframes heygen-com Imports Remotion animations or video footage into HyperFrames and verifies visual matching frame by frame against the original. Claude Code CX Codex Cursor +1 504,900installs slideshow heygen-com Build live HyperFrames decks with slides, fragment reveals, branching hotspots, and presenter notes. Use it when the output should be a presentation rather than a video. Claude Code CX Codex Cursor +1 415,500installs figma heygen-com Imports assets, brand tokens and components from Figma into a HyperFrames project, then turns storyboard frames into motion. Useful when a design has to move, not sit still. Claude Code CX Codex Cursor +1 329,500installs frost-sequence-camera-orbit heygen-com Builds a 22.5-second scene where an orbiting camera follows an ice logo that breaks apart, reforms into two text moments, and fades. Claude Code CX Codex Cursor +1 9,800installs

Similar

baoyu-compress-image JimLiu Compresses images into WebP or PNG using local tools like sips and cwebp. Handy for optimizing assets directly inside your repository. Claude Code CX Codex Cursor +1 28,200installs tailwind-design-system Seth Hobson Helps build design systems with Tailwind CSS v4, from theme tokens to component variants. Use it when a project needs shared UI patterns. Claude Code CX Codex Cursor 70,180installs react-doctor millionco Audits React codebases for architecture, accessibility, and rendering issues. Computes a health score from 0 to 100 and helps patch regressions. Claude Code CX Codex Cursor +1 19,000installs accessibility web-quality-skills This skill audits a rendered page for accessibility and points to the components behind each failure. Useful when a site has to meet WCAG 2.2 or survive a keyboard and screen reader pass. Claude Code CX Codex Cursor +1 63,900installs chrome-devtools ChromeDevTools This skill connects Chrome DevTools through MCP for page debugging, browser automation, performance checks, and network inspection. Claude Code CX Codex Cursor +1 8,600installs nuxt-ui nuxt Guides AI agents in building interfaces with @nuxt/ui v4, covering semantic Tailwind CSS theming, layout patterns, and component selection. Claude Code CX Codex Cursor +1 19,700installs frontend-design official anthropics This skill guides intentional visual design for new interfaces and redesigns. Use it when a generic generated UI is not enough. Claude Code Claude.ai 1,025,790installs design-taste-frontend Leonxlnx This skill directs the design of public pages and work screens, then checks the result in a browser through screenshots. Use it when an interface feels generic or unfinished. Claude Code CX Codex Cursor +1 673,100installs

Questions about cuboid-carousel

How do I install cuboid-carousel in Claude?

Run npx skills add heygen-com/hyperframes --skill cuboid-carousel -a claude-code. The skill lands at ~/.claude/skills/cuboid-carousel/SKILL.md.

What does cuboid-carousel do?

It renders a HyperFrames block where a chain of bevelled cuboids rides a travelling wave as a content carousel: entry from the right, a hero hold, exit to the left.

What does the skill need to run?

The composition loads Three.js and GSAP from ./assets/, and the Inter webfont from Google Fonts. Each live instance costs roughly 350 MB, so run one at a time.

Source text

SKILL.md · Apache-2.0
---
name: cuboid-carousel
description: A chain of bevelled cuboids rides a travelling wave as a content carousel. HyperFrames block, 1920×1080, 6.666666666666667s, 40 variables.
---

# Cuboid Carousel

Rounded, bevelled cuboids carrying card content fly in from the right as one rigid group, cruise with a per-cuboid rotation stagger, decelerate to a hero hold, then exit left. Spacing is derived from the cuboid dimensions and the largest reachable X half-extent, so cuboids can never overlap. Forty variables carry the original DialKit schema: geometry, materials, lights, shadows, backdrop, camera and every segment duration and easing. Cards come from the built-in list or a JSON variable.

Composition id: `cuboid-carousel`. Duration 6.666666666666667 s at 30 fps, 1920×1080.

## Files

- `cuboid-carousel.html` (38 KB)
- `assets/Three-LICENSE.txt` (1 KB)
- `assets/addons/environments/RoomEnvironment.js` (5 KB)
- `assets/addons/utils/BufferGeometryUtils.js` (36 KB)
- `assets/cuboid-motion.js` (593 KB)
- `assets/gsap-3.14.2.min.js` (128 KB)
- `assets/GSAP-NOTICE.txt` (1 KB)
- `assets/three.core.min.js` (554 KB)
- `assets/three.module.min.js` (468 KB)

## Install

Install with `npx hyperframes add cuboid-carousel`; by default the files above land under `compositions/cuboid-carousel/`. Then mount the block from the host `index.html`:

```html
<div
  data-composition-id="cuboid-carousel"
  data-composition-src="compositions/cuboid-carousel/cuboid-carousel.html"
  data-start="0"
  data-duration="6.666666666666667"
  data-track-index="1"
  data-width="1920"
  data-height="1080"
></div>
```

Render with custom values by targeting the composition file directly:

```sh
npx --yes [email protected] render 'compositions/cuboid-carousel/cuboid-carousel.html' --variables '{"cardsJson":"","heroCard":4}'
```

## Variables

Read at runtime via `window.__hyperframes.getVariables()`; declared on the composition root as `data-composition-variables` (single-quoted attribute, plain JSON).

| id                  | type   | default     | label / range                                        |
| ------------------- | ------ | ----------- | ---------------------------------------------------- |
| `cardsJson`         | string | `""`        | Content · Cards JSON (optional, see CARDS in source) |
| `heroCard`          | number | `4`         | Content · Hero card (1-based) 1–12 step 1            |
| `count`             | number | `8`         | Content · Repeating card count 1–12 step 1           |
| `gap`               | number | `0.01`      | Layout · Extra gap between cuboids 0–1.5 step 0.005  |
| `cuboidWidth`       | number | `1.7`       | Cuboid · Width 0.3–5 step 0.01                       |
| `cuboidHeight`      | number | `2.4`       | Cuboid · Height 0.3–6 step 0.01                      |
| `cuboidDepth`       | number | `0.14`      | Cuboid · Thickness (depth) 0.02–2 step 0.01          |
| `cornerRadius`      | number | `0.105`     | Cuboid · Corner radius 0–0.6 step 0.005              |
| `bevelSize`         | number | `0.03`      | Cuboid · Bevel size (edge chamfer) 0–0.3 step 0.001  |
| `bevelThickness`    | number | `0.04`      | Cuboid · Bevel thickness 0–0.3 step 0.001            |
| `smoothness`        | number | `32`        | Cuboid · Smoothness (segments) 1–32 step 1           |
| `bodyColor`         | color  | `"#242424"` | Cuboid · Body colour                                 |
| `roughness`         | number | `0.6`       | Cuboid · Roughness 0–1 step 0.01                     |
| `metalness`         | number | `0.4`       | Cuboid · Metalness 0–1 step 0.01                     |
| `heroScale`         | number | `1`         | Hero · Isolated scale 1–1.6 step 0.01                |
| `heroFillIntensity` | number | `0.55`      | Hero · Face light intensity 0–2 step 0.05            |
| `heroExitX`         | number | `288`       | Hero · Exit X rotation degrees -720–720 step 1       |
| `heroExitY`         | number | `-234`      | Hero · Exit Y rotation degrees -720–720 step 1       |
| `heroExitZ`         | number | `198`       | Hero · Exit Z rotation degrees -720–720 step 1       |
| `ambientIntensity`  | number | `0.35`      | Lights · Ambient intensity 0–4 step 0.01             |
| `ambientColor`      | color  | `"#ffffff"` | Lights · Ambient colour                              |
| `topIntensity`      | number | `3.1`       | Lights · Top rig intensity 0–12 step 0.05            |
| `topColor`          | color  | `"#ffffff"` | Lights · Top rig colour                              |
| `bottomIntensity`   | number | `2.15`      | Lights · Bottom rig intensity 0–12 step 0.05         |
| `bottomColor`       | color  | `"#ffcaad"` | Lights · Bottom rig colour                           |
| `keyIntensity`      | number | `5`         | Lights · Key rig intensity 0–12 step 0.05            |
| `keyColor`          | color  | `"#ffe9d6"` | Lights · Key rig colour                              |
| `shadowRadius`      | number | `44.5`      | Shadows · Softness at map size 2048 0–50 step 0.5    |
| `shadowMapSize`     | number | `2048`      | Shadows · Map size 512–4096 step 256                 |
| `backdrop`          | color  | `"#0b0d13"` | Background · Colour                                  |
| `cameraFov`         | number | `11`        | Camera · Initial Field of view 10–90 step 0.5        |
| `cameraX`           | number | `-1.65`     | Camera · Initial X -20–20 step 0.05                  |
| `cameraY`           | number | `8.5`       | Camera · Initial Y -20–20 step 0.05                  |
| `cameraZ`           | number | `-8.508708` | Camera · Initial Z (distance) -20–50 step 0.1        |
| `cameraSettleFrame` | number | `70`        | Camera · Settle frame (30 fps) 20–90 step 1          |
| `handheldStrength`  | number | `1`         | Camera · Handheld hold strength 0–1 step 0.05        |
| `cameraTargetFov`   | number | `34`        | Camera target · Field of view 10–90 step 0.5         |
| `cameraTargetX`     | number | `-7.25`     | Camera target · X -20–20 step 0.05                   |
| `cameraTargetY`     | number | `1.15`      | Camera target · Y -20–20 step 0.05                   |
| `cameraTargetZ`     | number | `6.2`       | Camera target · Z 2–50 step 0.1                      |

## Runtime contract

- One paused GSAP timeline registered as `window.__timelines["cuboid-carousel"]`.
- Re-syncs on the `hf-seek` CustomEvent; every frame is a closed-form function of time (seeded PRNG only, no rAF loops, no Date.now).
- Renderer: WebGL, GSAP, Canvas 2D, PMREM, Shadow maps. Budget roughly 350 MB per live instance; run one at a time.
- External runtime dependencies: `./assets/three.module.min.js`, `./assets/addons/`.
- Web fonts from Google Fonts: Inter.

## Editing rules (from the source project)

1. Keep `data-composition-variables` a single-quoted attribute with plain `"` JSON. Never save it through Studio's Design panel.
2. Do not put `<canvas>` in static markup; create it at runtime.
3. Keep every visual state a function of t; seek-safety is what makes the block renderable.

© heygen-com · Apache-2.0 · heygen-com/hyperframes

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor