plotbeat
Build deterministic, editable data-visualization videos from local CSV/JSON or data fetched from a user-approved URL, API, or public source by adapting native HyperFrames templates and selectable visual-style presets. Requires the HyperFrames AI skill. Use when a user wants a line-chart story, multi-series ranking, animated chart, data-driven motion graphic, or a new reusable data-video template in HyperFrames. This is a HyperFrames templating workflow, not a standalone video generator or renderer.
- License 许可
- MIT
- 最近更新
- 2026-10-27
- Stars
- ★ 1.8k
- Forks
- 135
01 前言 Front Matter
- name
- plotbeat
- description
- Build deterministic, editable data-visualization videos from local CSV/JSON or data fetched from a user-approved URL, API, or public source by adapting native HyperFrames templates and selectable visual-style presets. Requires the HyperFrames AI skill. Use when a user wants a line-chart story, multi-series ranking, animated chart, data-driven motion graphic, or a new reusable data-video template in HyperFrames. This is a HyperFrames templating workflow, not a standalone video generator or renderer.
02 资源文件 141
- 参考文档_meta.json291 B
- 参考文档AGENTS.md7.0 KB
- 脚本analytics.ts889 B
- 其他AnalyticsEvents.tsx887 B
- 资产文件animated-map-finale.png137.2 KB
- 资产文件animated-map.gif252.6 KB
- 资产文件animated-map.mp4464.1 KB
- 资产文件apple-touch-icon.png5.0 KB
- 参考文档ARCHITECTURE.md2.6 KB
- 参考文档bar-chart-race.html25.0 KB
- 资产文件bar-race-finale.png68.2 KB
- 资产文件bar-race.gif543.2 KB
- 资产文件bar-race.mp4565.6 KB
- 参考文档BRIEF.md1.1 KB
- 脚本build-catalog.mjs1.9 KB
- 脚本chatgpt-auth.ts2.5 KB
- 其他checkbox.tsx636 B
- 参考文档ci.yml988 B
- 其他color-picker.tsx698 B
- 脚本compiler-and-skill.test.mjs16.3 KB
- 参考文档components.json436 B
- 参考文档CONTRIBUTING.md1.0 KB
- 其他CopyButton.tsx2.8 KB
- 参考文档data-contract.md5.3 KB
- 脚本data.js4.7 KB
- 其他dropdown-menu.tsx1.6 KB
- 参考文档ECOSYSTEM.md3.6 KB
- 脚本eslint.config.mjs1009 B
- 资产文件favicon-32x32.png978 B
- 资产文件favicon.png7.6 KB
- 资产文件favicon.svg573 B
- 参考文档frame.md1.6 KB
- 脚本generate-demo-data.mjs1.4 KB
- 其他globals.css96.5 KB
- 参考文档hosting.json91 B
- 参考文档hyperframes.json355 B
- 参考文档hyperframes.lock.json109 B
- 脚本i18n.ts31.6 KB
- 资产文件icon-192.png5.4 KB
- 资产文件icon-512.png18.6 KB
- 参考文档index.html19.4 KB
- 参考文档index.md171 B
- 参考文档index.motion.json311 B
- 脚本index.ts708 B
- 其他input.tsx311 B
- 资产文件kpi-dashboard-finale.png123.5 KB
- 资产文件kpi-dashboard.gif746.8 KB
- 资产文件kpi-dashboard.mp4660.3 KB
- 其他layout.tsx5.3 KB
- 其他LazyVideo.tsx1.3 KB
- 参考文档meta.json101 B
- 资产文件milestone-timeline-finale.png114.4 KB
- 资产文件milestone-timeline.gif221.3 KB
- 资产文件milestone-timeline.mp4437.5 KB
- 其他MotionSection.tsx1.0 KB
- 资产文件multi-line-finale.png236.5 KB
- 资产文件multi-line.gif826.5 KB
- 资产文件multi-line.mp4751.2 KB
- 资产文件multi-line.png253.1 KB
- 脚本next-env.d.ts189 B
- 脚本next.config.ts133 B
- 参考文档OFL-space-grotesk.txt4.3 KB
- 资产文件og.png1.5 MB
- 参考文档openai.yaml241 B
- 参考文档package-lock.json361.2 KB
- 脚本package-skill-assets.mjs4.5 KB
- 参考文档package.json1.6 KB
- 其他page.tsx924 B
- 脚本plotbeat-data.js39.1 KB
- 资产文件plotbeat-mark-inverse.svg941 B
- 资产文件plotbeat-mark-mono.svg900 B
- 资产文件plotbeat-mark.svg825 B
- 脚本plotbeat-styles.js25.4 KB
- 脚本plotbeat-template-scenes.js14.5 KB
- 其他PlotbeatMark.tsx1.2 KB
- 脚本postcss.config.mjs94 B
- 脚本prepare-data.mjs21.6 KB
- 其他ProfilePopover.tsx6.8 KB
- 参考文档quality-gates.md1.9 KB
- 参考文档README.de.md4.4 KB
- 参考文档README.es.md4.5 KB
- 参考文档README.fr.md4.5 KB
- 参考文档README.ja.md5.0 KB
- 参考文档README.ko.md4.6 KB
- 参考文档README.md2.4 KB
- 参考文档README.pt-BR.md4.4 KB
- 参考文档README.zh-CN.md4.7 KB
- 参考文档registry-item.json502 B
- 脚本release-audit.mjs7.8 KB
- 脚本rendered-html.test.mjs20.5 KB
- 参考文档ROADMAP.md1.0 KB
- 脚本route.ts1.4 KB
- 脚本runtime.test.mjs5.0 KB
- 资产文件sample-kpi.csv254 B
- 资产文件sample-map.csv223 B
- 资产文件sample-milestones.csv602 B
- 资产文件sample-multi.csv5.4 KB
- 资产文件sample-scatter.csv608 B
- 资产文件sample-single.csv588 B
- 资产文件sample-stacked-area.csv1.0 KB
- 脚本scaffold.mjs5.1 KB
- 资产文件scatter-journey-finale.png118.1 KB
- 资产文件scatter-journey.gif354.8 KB
- 资产文件scatter-journey.mp4535.6 KB
- 其他ScrollReveal.tsx2.3 KB
- 其他select.tsx2.6 KB
- 脚本seo.ts1.7 KB
- 资产文件single-line-finale.png199.7 KB
- 资产文件single-line.gif717.5 KB
- 资产文件single-line.mp4541.5 KB
- 资产文件single-line.png192.7 KB
- 其他SiteChrome.tsx11.3 KB
- 脚本sites-vite-plugin.ts1.2 KB
- 其他slider.tsx1.1 KB
- 参考文档SOUNDTRACK.md806 B
- 参考文档sources.json1.1 KB
- 资产文件space-grotesk.woff248.1 KB
- 资产文件stacked-area-finale.png135.8 KB
- 资产文件stacked-area.gif399.4 KB
- 资产文件stacked-area.mp4473.5 KB
- 资产文件style-ember-terminal.png72.5 KB
- 资产文件style-newsroom-ink.png76.3 KB
- 资产文件style-paper-cut.png84.6 KB
- 资产文件style-signal-noir.png148.9 KB
- 资产文件style-soft-organic.png80.5 KB
- 资产文件style-studio-blueprint.png128.4 KB
- 资产文件style-swiss-signal.png83.5 KB
- 资产文件style-velvet-ledger.png78.1 KB
- 其他StyleBuilder.tsx32.7 KB
- 其他StylePicker.tsx5.5 KB
- 参考文档styles.json3.5 KB
- 脚本sync-examples.mjs1.1 KB
- 参考文档template-authoring.md2.1 KB
- 参考文档template.json1.1 KB
- 参考文档template.schema.json2.2 KB
- 参考文档templates.json13.6 KB
- 参考文档tsconfig.json603 B
- 资产文件upbeat-data-loop.mp31.3 MB
- 脚本utils.ts169 B
- 参考文档visual-styles.md3.8 KB
- 脚本vite.config.ts1.2 KB
03 SKILL.md 正文
Plotbeat
Turn user-supplied data into a local HyperFrames composition. Start from a proven template, compile the data before playback, then use HyperFrames for timing, preview, validation, and rendering.
Require HyperFrames
Treat this as a fail-closed dependency gate. Before acquiring data, listing templates, scaffolding, editing, previewing, validating, or rendering:
-
Resolve and read the installed
hyperframesAI skill. -
If it is unavailable, stop and ask the user to install it with:
npx skills add heygen-com/hyperframes --all -
Do not approximate the missing skill from general knowledge, use Plotbeat as a standalone generator, or continue with only the HyperFrames npm CLI.
-
After the dependency is installed, resume through the
hyperframesskill, then use Plotbeat for the data-video template workflow.
Preserve the product boundary
- Treat HyperFrames as the composition and rendering engine.
- Start through the main
hyperframesskill and load itshyperframes-core,hyperframes-animation, andhyperframes-cliguidance as required. - Do not add a competing render loop, video encoder, scene scheduler, or standalone animation runtime.
- Keep the output editable as an ordinary HyperFrames HTML project.
- Use one paused, seek-safe timeline per scene. Derive visual state from timeline progress.
- Keep the bundled music as a separate local
<audio>element. Let HyperFrames own playback and use the registered GSAP timeline for volume fades; never callplay(),pause(), or setcurrentTimeyourself. - The bundled master covers the quick, standard, and deliberate presets (up to 56 seconds). For a longer exact duration, resolve or ingest a longer local BGM asset before previewing.
- Compile CSV or JSON into a frozen local
generated/data.js. Do not fetch live data during playback. - Do not use
requestAnimationFrame, timers, D3 transitions, or nondeterministic randomness as playback clocks.
Acquire the dataset
- Accept either a local
.csv/.jsonfile or a request to retrieve data from a named source, URL, public API, or authorized connector. - When retrieval is requested, fetch during preparation with the available connector, browser, API, or CLI. Do not make the user manually download a file when the agent can obtain it safely.
- Prefer first-party and authoritative sources. Clarify the metric, entities or geography, date range, and frequency only when ambiguity would materially change the story.
- Save the retrieved rows locally as CSV or JSON before scaffolding. Preserve the source URL or API name, query or filters, retrieval date, and material transformations; pass a concise citation through
--source. - Never invent missing observations or silently join incompatible series. State any interpolation, aggregation, filtering, or carry-forward policy.
- Fetch authenticated or private data only through access the user has authorized. Never expose credentials in the composition.
Route the request
List the packaged catalog, then choose the closest starting template:
node {skill-dir}/scripts/scaffold.mjs --list
single-line-story: one time series in the supplied reference style: near-black canvas, neon trace and area glow, zero-anchored expanding Y domain, upper-right value/change/date readout, endpoint label, and a dimmed final lockup.multi-line-rank: synchronized series in the supplied reference style: thin luminous paths, numbered endpoint badges, a live rank/multiplier/value rail, and a centered final ranking table.bar-race: long-form multi-series data becomes ranked horizontal bars with continuous overtakes, a rescaling axis, a current-period readout, and absolute or leader-indexed variants.stacked-area-story: long-form multi-series data becomes a contribution story with continuously revealed layers, a live total, and absolute or 100% stack variants.scatter-journey: dated X/Y positions become connected entity trails or size-aware bubble trails with live coordinates.animated-map: latitude/longitude rows become a pulsing location map or animated connection-flow story.kpi-dashboard: metric rows become staged target cards or a radial performance board.milestone-timeline: dated events become a continuous playhead timeline or chapter-card story.- New template: start from the nearest template, keep the same data compiler/runtime boundary, and follow references/template-authoring.md.
Read references/data-contract.md before mapping a new dataset. Read references/quality-gates.md before presenting or rendering. Read references/visual-styles.md before selecting or customizing the visual direction.
Build a composition
-
Acquire the requested data or inspect the supplied file, then identify its columns, date grain, missing values, number of series, source, and desired unit.
-
Obtain the visual style and pacing before scaffolding. If the user supplies JSON copied from the Plotbeat style builder, treat that as an explicit custom visual direction: validate its documented fields, choose the nearest preset only as the scaffold base, then apply the supplied tokens and composition choices in the copied project. Do not replace the supplied JSON with the base preset. If style or pacing is otherwise missing, ask one short grouped question: “Should the visual direction be dark or light, which preset character fits the story, and should it feel quick (~18s), standard (~30s), deliberate (~45s), or use an exact duration?” Offer the installed presets from
--list-styles; map the answer to its--style <id>flag and pacing to--pace quick,--pace standard,--pace deliberate, or--duration <seconds>. When a user asks the agent to decide, choose from the data context using the style reference and state the choice. -
Normalize dates and numbers. Ask only when another choice changes the story materially; otherwise choose safe column defaults and state them.
-
Scaffold a template:
node {skill-dir}/scripts/scaffold.mjs \ --template single-line-story \ --input /absolute/path/to/data.csv \ --output /absolute/path/to/composition \ --date date --value value \ --title "What if Revenue kept compounding?" \ --accent-text "Revenue" --unit "USD" \ --style paper-cut --pace quickFor long-form multi-series data, add
--series seriesand selectmulti-line-rank. For wide data such asdate,North,South, pass--series-columns North,Southinstead.Select
bar-racefor ranking changes orstacked-area-storyfor contribution-to-total stories. Add--bar-mode leader-indexto normalize the current leader to 100, or--stack-mode percentfor a 100% stacked composition. Scatter, map, KPI, and milestone inputs use the documented contracts and the--scatter-mode,--map-mode,--kpi-mode, and--timeline-modevariant flags. -
Edit the copied
index.html,frame.md, and metadata in the output project. Preserve local script paths and HyperFrames timing attributes. -
Run the compiler again after changing column mappings, story copy, or pacing:
node scripts/prepare-data.mjs \ --template single-line-story \ --input data/input.csv \ --output generated/data.js \ --composition index.html \ --date date --value value \ --title "What if Conversion kept compounding?" \ --accent-text "Conversion" --unit "%" \ --style studio-blueprint --pace standard --duration 24 --path-style linear--durationoverrides only the pace preset's length; the selected pace still supplies suitable opening, finale, and closing proportions unless explicit timing flags override them. Recompiling with a different--stylechanges the design system and default chart palette without changing the data, template, or timing. -
Validate from the composition directory:
npm test npx hyperframes check --snapshots --samples 12 npx hyperframes preview -
Inspect the closed first frame, multiple opening-transition frames, early growth, middle, rank-crossing/extreme, pre-finale, staggered finale, finale hold, and closed last frame. Confirm that each line grows continuously from the left without snapping to the right edge, the live date chip follows the endpoint, axes expand from zero for positive datasets, endpoint values match the compiled rows, rank rows glide rather than jump, the finale begins only after the full chart is visible, neither transition produces a one-frame flash, and the music fades cleanly at both ends without overpowering the chart. Obtain preview approval before
npx hyperframes render.
Extend the template set
When the existing templates do not fit, add a new native HyperFrames template rather than branching into a new generator. Define its manifest, data shape, deterministic state model, example data, preview frames, and quality checks. Reuse assets/runtime/plotbeat-data.js for interpolation and formatting where practical.
Keep template-specific visual decisions in the composition and generic math in the runtime. A template is ready only when arbitrary forward and backward seeks produce the same frame and HyperFrames checks pass without unexplained suppressions.
Resources
scripts/scaffold.mjs: copies a complete template and compiles the selected dataset.scripts/prepare-data.mjs: compiles CSV/JSON to frozen local JavaScript.assets/templates/: native HyperFrames composition starters.assets/catalog/templates.json: machine-readable catalog used for template discovery.assets/runtime/: shared deterministic chart-state helpers and visual-style tokens.assets/samples/: generic sample datasets for smoke tests.
04 同仓库更多 Skills
win11-ui-demos
制作"仿 Windows 11 系统 UI"的写实仿真网页演示动画——观众像在看一台真 Win11 电脑的精心编排录屏:桌面、任务栏、资源管理器、开始菜单、右键菜单、系统对话框、通知、WinRE 蓝屏 1:1 还原,光标演出引导操作,教学标记层叠加讲解,电影化播放器全屏录屏即成片。只要用户提到:仿 Win11/Windows 演示、系统 UI 仿真动画、电脑教学演示页、软件操作教程动画、把 Windows 操作过程做成动画、或要求改造升级一批系统界面风格演示页——就用本 Skill。内容开放不设限:任何电脑操作、系统知识、软件教程、安全科普都能转译成"真电脑里发生的事"。
video-shot-demos
为视频/课程/解说文案制作"每镜头一个 HTML"的高完成度网页演示动画(分镜演示页、视频配套演示动画、录屏用动画网页、科普/技术/产品发布可视化镜头)。只要用户提到:给视频做演示动画网页、分镜 HTML、shot 页面、把口播稿/大纲做成动画、视频画面设计网页版、录一段网页动画、或要求改造升级一批已有演示页——就用本 Skill。核心是统一的电影化播放器机制 + 每页完全不同的视觉风格 + 镜头语言 + 同步音效 + 角色表情吐槽,内容完全开放不设限。
video-qa-frameproof
FrameProof 代码/Agent 生成视频的生成后 QA:空帧冻结、字幕、音频、编码元数据、Render Manifest 源码定位、Fix Packets 与 baseline 回归门禁。用于验收 MP4、定位渲染缺陷、自动修复后复检或为视频 PR/CI 增加质量门。
ui2v-motions
UI2V 动效库——1,262 个 GSAP 动效包(616MB 全量离线镜像,源自 ui2v.com / illli-studio/motions)+ 按镜头用途的选型索引 + 接入演示动画的完整配方。给视频演示页/产品页/落地页挑选和嵌入高质量 UI 动效:图表入场、列表滚动、卡片翻转、文字编排、数字滚动、背景循环等即插即用。只要用户提到:UI 动效、动效库、ui2v、GSAP 动效素材、给演示页加动效、motion 素材、页面动效不够炫——就用本 Skill。与 swiss-shot-demos / video-shot-demos 等演示动画技能配套:动效包的 paused GSAP 时间轴可直接挂到 cue 时间轴上驱动。
ui2v
Use when helping users discover, install, publish, share, sync, or update UI2V video motion assets and HyperFrames motion packages. Route video creation, preview, and rendering to HyperFrames skills.
wireframe-portal-title
A wireframe portal bursts open, the title comes through, then its letters swap into a second phrase. HyperFrames block, 1920×1080, 8s, 9 variables.