[{"data":1,"prerenderedAt":3341},["ShallowReactive",2],{"navigation":3,"\u002Fpackages\u002Fproducer":686,"\u002Fpackages\u002Fproducer-surround":3336},[4,31,57,147,168,198,652],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":30},"快速入门","i-lucide-rocket","\u002Fgetting-started","01.getting-started",[10,14,18,22,26],{"title":11,"path":12,"stem":13},"简介","\u002Fgetting-started\u002Fintroduction","01.getting-started\u002F01.introduction",{"title":15,"path":16,"stem":17},"快速开始","\u002Fgetting-started\u002Fquickstart","01.getting-started\u002F02.quickstart",{"title":19,"path":20,"stem":21},"展示作品","\u002Fgetting-started\u002Fshowcase","01.getting-started\u002F03.showcase",{"title":23,"path":24,"stem":25},"示例","\u002Fgetting-started\u002Fexamples","01.getting-started\u002F04.examples",{"title":27,"path":28,"stem":29},"发布视频","\u002Fgetting-started\u002Flaunch-videos","01.getting-started\u002F05.launch-videos",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"核心概念","i-lucide-lightbulb","\u002Fconcepts","02.concepts",[37,41,45,49,53],{"title":38,"path":39,"stem":40},"合成","\u002Fconcepts\u002Fcompositions","02.concepts\u002F01.compositions",{"title":42,"path":43,"stem":44},"数据属性","\u002Fconcepts\u002Fdata-attributes","02.concepts\u002F02.data-attributes",{"title":46,"path":47,"stem":48},"变量","\u002Fconcepts\u002Fvariables","02.concepts\u002F03.variables",{"title":50,"path":51,"stem":52},"帧适配器","\u002Fconcepts\u002Fframe-adapters","02.concepts\u002F04.frame-adapters",{"title":54,"path":55,"stem":56},"确定性渲染","\u002Fconcepts\u002Fdeterminism","02.concepts\u002F05.determinism",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":30},"使用指南","i-lucide-compass","\u002Fguides","03.guides",[63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143],{"title":64,"path":65,"stem":66},"工作流水线","\u002Fguides\u002Fpipeline","03.guides\u002F01.pipeline",{"title":68,"path":69,"stem":70},"HTML-in-Canvas","\u002Fguides\u002Fhtml-in-canvas","03.guides\u002F02.html-in-canvas",{"title":72,"path":73,"stem":74},"网站转视频","\u002Fguides\u002Fwebsite-to-video","03.guides\u002F03.website-to-video",{"title":76,"path":77,"stem":78},"Google Antigravity","\u002Fguides\u002Fantigravity","03.guides\u002F04.antigravity",{"title":80,"path":81,"stem":82},"GitHub Copilot CLI","\u002Fguides\u002Fcopilot-cli","03.guides\u002F05.copilot-cli",{"title":84,"path":85,"stem":86},"Claude Design","\u002Fguides\u002Fclaude-design","03.guides\u002F06.claude-design",{"title":88,"path":89,"stem":90},"Open Design","\u002Fguides\u002Fopen-design","03.guides\u002F07.open-design",{"title":92,"path":93,"stem":94},"提示词指南","\u002Fguides\u002Fprompting","03.guides\u002F08.prompting",{"title":96,"path":97,"stem":98},"Hyperframes vs Remotion","\u002Fguides\u002Fhyperframes-vs-remotion","03.guides\u002F09.hyperframes-vs-remotion",{"title":100,"path":101,"stem":102},"GSAP 动画","\u002Fguides\u002Fgsap-animation","03.guides\u002F10.gsap-animation",{"title":104,"path":105,"stem":106},"渲染","\u002Fguides\u002Frendering","03.guides\u002F11.rendering",{"title":108,"path":109,"stem":110},"去除背景（透明视频）","\u002Fguides\u002Fremove-background","03.guides\u002F12.remove-background",{"title":112,"path":113,"stem":114},"HDR 渲染","\u002Fguides\u002Fhdr","03.guides\u002F13.hdr",{"title":116,"path":117,"stem":118},"4K 渲染","\u002Fguides\u002F4k-rendering","03.guides\u002F14.4k-rendering",{"title":120,"path":121,"stem":122},"性能","\u002Fguides\u002Fperformance","03.guides\u002F15.performance",{"title":124,"path":125,"stem":126},"时间轴编辑","\u002Fguides\u002Ftimeline-editing","03.guides\u002F16.timeline-editing",{"title":128,"path":129,"stem":130},"视频编辑者速查表","\u002Fguides\u002Fvideo-editor-cheatsheet","03.guides\u002F17.video-editor-cheatsheet",{"title":132,"path":133,"stem":134},"常见错误","\u002Fguides\u002Fcommon-mistakes","03.guides\u002F18.common-mistakes",{"title":136,"path":137,"stem":138},"故障排除","\u002Fguides\u002Ftroubleshooting","03.guides\u002F19.troubleshooting",{"title":140,"path":141,"stem":142},"反馈收集","\u002Fguides\u002Ffeedback","03.guides\u002F20.feedback",{"title":144,"path":145,"stem":146},"HyperFrames MCP","\u002Fguides\u002Fmcp","03.guides\u002F21.mcp",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":30},"部署","i-lucide-cloud","\u002Fdeploy","04.deploy",[153,156,160,164],{"title":148,"path":154,"stem":155},"\u002Fdeploy\u002Fdeploy","04.deploy\u002F01.deploy",{"title":157,"path":158,"stem":159},"AWS Lambda","\u002Fdeploy\u002Faws-lambda","04.deploy\u002F02.aws-lambda",{"title":161,"path":162,"stem":163},"Lambda 上的模板","\u002Fdeploy\u002Ftemplates-on-lambda","04.deploy\u002F03.templates-on-lambda",{"title":165,"path":166,"stem":167},"迁移到 HyperFrames Lambda","\u002Fdeploy\u002Fmigrating-to-hyperframes-lambda","04.deploy\u002F04.migrating-to-hyperframes-lambda",{"title":169,"icon":170,"path":171,"stem":172,"children":173,"page":30},"包","i-lucide-package","\u002Fpackages","05.packages",[174,178,182,186,190,194],{"title":175,"path":176,"stem":177},"@hyperframes\u002Fcore","\u002Fpackages\u002Fcore","05.packages\u002F01.core",{"title":179,"path":180,"stem":181},"@hyperframes\u002Fengine","\u002Fpackages\u002Fengine","05.packages\u002F02.engine",{"title":183,"path":184,"stem":185},"@hyperframes\u002Fplayer","\u002Fpackages\u002Fplayer","05.packages\u002F03.player",{"title":187,"path":188,"stem":189},"@hyperframes\u002Fproducer","\u002Fpackages\u002Fproducer","05.packages\u002F04.producer",{"title":191,"path":192,"stem":193},"@hyperframes\u002Fstudio","\u002Fpackages\u002Fstudio","05.packages\u002F05.studio",{"title":195,"path":196,"stem":197},"CLI","\u002Fpackages\u002Fcli","05.packages\u002F06.cli",{"title":199,"icon":200,"path":201,"stem":202,"children":203,"page":30},"组件目录","i-lucide-layout-grid","\u002Fcatalog","06.catalog",[204,270,324,358,420,478,512,546,584,598],{"title":205,"icon":206,"path":207,"stem":208,"children":209,"page":30},"字幕","i-lucide-captions","\u002Fcatalog\u002Fcaption","06.catalog\u002F01.caption",[210,214,218,222,226,230,234,238,242,246,250,254,258,262,266],{"title":211,"path":212,"stem":213},"裁剪擦除","\u002Fcatalog\u002Fcaption\u002Fcaption-clip-wipe","06.catalog\u002F01.caption\u002F01.caption-clip-wipe",{"title":215,"path":216,"stem":217},"编辑强调","\u002Fcatalog\u002Fcaption\u002Fcaption-editorial-emphasis","06.catalog\u002F01.caption\u002F02.caption-editorial-emphasis",{"title":219,"path":220,"stem":221},"Emoji 弹出","\u002Fcatalog\u002Fcaption\u002Fcaption-emoji-pop","06.catalog\u002F01.caption\u002F03.caption-emoji-pop",{"title":223,"path":224,"stem":225},"故障 RGB","\u002Fcatalog\u002Fcaption\u002Fcaption-glitch-rgb","06.catalog\u002F01.caption\u002F04.caption-glitch-rgb",{"title":227,"path":228,"stem":229},"渐变填充","\u002Fcatalog\u002Fcaption\u002Fcaption-gradient-fill","06.catalog\u002F01.caption\u002F05.caption-gradient-fill",{"title":231,"path":232,"stem":233},"高亮","\u002Fcatalog\u002Fcaption\u002Fcaption-highlight","06.catalog\u002F01.caption\u002F06.caption-highlight",{"title":235,"path":236,"stem":237},"动感冲击","\u002Fcatalog\u002Fcaption\u002Fcaption-kinetic-slam","06.catalog\u002F01.caption\u002F07.caption-kinetic-slam",{"title":239,"path":240,"stem":241},"矩阵解码","\u002Fcatalog\u002Fcaption\u002Fcaption-matrix-decode","06.catalog\u002F01.caption\u002F08.caption-matrix-decode",{"title":243,"path":244,"stem":245},"霓虹强调","\u002Fcatalog\u002Fcaption\u002Fcaption-neon-accent","06.catalog\u002F01.caption\u002F09.caption-neon-accent",{"title":247,"path":248,"stem":249},"霓虹发光","\u002Fcatalog\u002Fcaption\u002Fcaption-neon-glow","06.catalog\u002F01.caption\u002F10.caption-neon-glow",{"title":251,"path":252,"stem":253},"视差图层","\u002Fcatalog\u002Fcaption\u002Fcaption-parallax-layers","06.catalog\u002F01.caption\u002F11.caption-parallax-layers",{"title":255,"path":256,"stem":257},"粒子爆发","\u002Fcatalog\u002Fcaption\u002Fcaption-particle-burst","06.catalog\u002F01.caption\u002F12.caption-particle-burst",{"title":259,"path":260,"stem":261},"胶囊卡拉OK","\u002Fcatalog\u002Fcaption\u002Fcaption-pill-karaoke","06.catalog\u002F01.caption\u002F13.caption-pill-karaoke",{"title":263,"path":264,"stem":265},"纹理","\u002Fcatalog\u002Fcaption\u002Fcaption-texture","06.catalog\u002F01.caption\u002F14.caption-texture",{"title":267,"path":268,"stem":269},"字重切换","\u002Fcatalog\u002Fcaption\u002Fcaption-weight-shift","06.catalog\u002F01.caption\u002F15.caption-weight-shift",{"title":271,"icon":272,"path":273,"stem":274,"children":275,"page":30},"HTML 画布","i-lucide-layout-dashboard","\u002Fcatalog\u002Fhtml-canvas","06.catalog\u002F02.html-canvas",[276,280,284,288,292,296,300,304,308,312,316,320],{"title":277,"path":278,"stem":279},"iOS 26 Liquid Glass 主屏幕","\u002Fcatalog\u002Fhtml-canvas\u002Fios26-liquid-glass","06.catalog\u002F02.html-canvas\u002F01.ios26-liquid-glass",{"title":281,"path":282,"stem":283},"Liquid Glass 右键菜单","\u002Fcatalog\u002Fhtml-canvas\u002Fliquid-glass-context-menu","06.catalog\u002F02.html-canvas\u002F02.liquid-glass-context-menu",{"title":285,"path":286,"stem":287},"Liquid Glass 媒体控制","\u002Fcatalog\u002Fhtml-canvas\u002Fliquid-glass-media-controls","06.catalog\u002F02.html-canvas\u002F03.liquid-glass-media-controls",{"title":289,"path":290,"stem":291},"Liquid Glass 通知","\u002Fcatalog\u002Fhtml-canvas\u002Fliquid-glass-notification","06.catalog\u002F02.html-canvas\u002F04.liquid-glass-notification",{"title":293,"path":294,"stem":295},"Liquid Glass 小组件","\u002Fcatalog\u002Fhtml-canvas\u002Fliquid-glass-widgets","06.catalog\u002F02.html-canvas\u002F05.liquid-glass-widgets",{"title":297,"path":298,"stem":299},"macOS Tahoe Liquid Glass 桌面","\u002Fcatalog\u002Fhtml-canvas\u002Fmacos-tahoe-liquid-glass","06.catalog\u002F02.html-canvas\u002F06.macos-tahoe-liquid-glass",{"title":301,"path":302,"stem":303},"iPhone & MacBook 3D 展示","\u002Fcatalog\u002Fhtml-canvas\u002Fvfx-iphone-device","06.catalog\u002F02.html-canvas\u002F07.vfx-iphone-device",{"title":305,"path":306,"stem":307},"液态背景","\u002Fcatalog\u002Fhtml-canvas\u002Fvfx-liquid-background","06.catalog\u002F02.html-canvas\u002F08.vfx-liquid-background",{"title":309,"path":310,"stem":311},"磁力效果","\u002Fcatalog\u002Fhtml-canvas\u002Fvfx-magnetic","06.catalog\u002F02.html-canvas\u002F09.vfx-magnetic",{"title":313,"path":314,"stem":315},"传送门","\u002Fcatalog\u002Fhtml-canvas\u002Fvfx-portal","06.catalog\u002F02.html-canvas\u002F10.vfx-portal",{"title":317,"path":318,"stem":319},"碎裂效果","\u002Fcatalog\u002Fhtml-canvas\u002Fvfx-shatter","06.catalog\u002F02.html-canvas\u002F11.vfx-shatter",{"title":321,"path":322,"stem":323},"VFX 文字光标","\u002Fcatalog\u002Fhtml-canvas\u002Fvfx-text-cursor","06.catalog\u002F02.html-canvas\u002F12.vfx-text-cursor",{"title":325,"icon":326,"path":327,"stem":328,"children":329,"page":30},"社交叠加层","i-lucide-share-2","\u002Fcatalog\u002Fsocial-overlays","06.catalog\u002F03.social-overlays",[330,334,338,342,346,350,354],{"title":331,"path":332,"stem":333},"Instagram 关注","\u002Fcatalog\u002Fsocial-overlays\u002Finstagram-follow","06.catalog\u002F03.social-overlays\u002F01.instagram-follow",{"title":335,"path":336,"stem":337},"macOS 通知","\u002Fcatalog\u002Fsocial-overlays\u002Fmacos-notification","06.catalog\u002F03.social-overlays\u002F02.macos-notification",{"title":339,"path":340,"stem":341},"Reddit 帖子卡片","\u002Fcatalog\u002Fsocial-overlays\u002Freddit-post","06.catalog\u002F03.social-overlays\u002F03.reddit-post",{"title":343,"path":344,"stem":345},"Spotify 正在播放","\u002Fcatalog\u002Fsocial-overlays\u002Fspotify-card","06.catalog\u002F03.social-overlays\u002F04.spotify-card",{"title":347,"path":348,"stem":349},"TikTok 关注","\u002Fcatalog\u002Fsocial-overlays\u002Ftiktok-follow","06.catalog\u002F03.social-overlays\u002F05.tiktok-follow",{"title":351,"path":352,"stem":353},"X 帖子卡片","\u002Fcatalog\u002Fsocial-overlays\u002Fx-post","06.catalog\u002F03.social-overlays\u002F06.x-post",{"title":355,"path":356,"stem":357},"YouTube 下方三分之一","\u002Fcatalog\u002Fsocial-overlays\u002Fyt-lower-third","06.catalog\u002F03.social-overlays\u002F07.yt-lower-third",{"title":359,"icon":360,"path":361,"stem":362,"children":363,"page":30},"着色器过渡","i-lucide-wand-2","\u002Fcatalog\u002Fshader-transitions","06.catalog\u002F04.shader-transitions",[364,368,372,376,380,384,388,392,396,400,404,408,412,416],{"title":365,"path":366,"stem":367},"色散径向分裂","\u002Fcatalog\u002Fshader-transitions\u002Fchromatic-radial-split","06.catalog\u002F04.shader-transitions\u002F01.chromatic-radial-split",{"title":369,"path":370,"stem":371},"电影感变焦","\u002Fcatalog\u002Fshader-transitions\u002Fcinematic-zoom","06.catalog\u002F04.shader-transitions\u002F02.cinematic-zoom",{"title":373,"path":374,"stem":375},"交叉扭曲变形","\u002Fcatalog\u002Fshader-transitions\u002Fcross-warp-morph","06.catalog\u002F04.shader-transitions\u002F03.cross-warp-morph",{"title":377,"path":378,"stem":379},"域扭曲溶解","\u002Fcatalog\u002Fshader-transitions\u002Fdomain-warp-dissolve","06.catalog\u002F04.shader-transitions\u002F04.domain-warp-dissolve",{"title":381,"path":382,"stem":383},"白色闪光过渡","\u002Fcatalog\u002Fshader-transitions\u002Fflash-through-white","06.catalog\u002F04.shader-transitions\u002F05.flash-through-white",{"title":385,"path":386,"stem":387},"故障效果","\u002Fcatalog\u002Fshader-transitions\u002Fglitch","06.catalog\u002F04.shader-transitions\u002F06.glitch",{"title":389,"path":390,"stem":391},"引力透镜","\u002Fcatalog\u002Fshader-transitions\u002Fgravitational-lens","06.catalog\u002F04.shader-transitions\u002F07.gravitational-lens",{"title":393,"path":394,"stem":395},"光线泄漏","\u002Fcatalog\u002Fshader-transitions\u002Flight-leak","06.catalog\u002F04.shader-transitions\u002F08.light-leak",{"title":397,"path":398,"stem":399},"褶皱燃烧","\u002Fcatalog\u002Fshader-transitions\u002Fridged-burn","06.catalog\u002F04.shader-transitions\u002F09.ridged-burn",{"title":401,"path":402,"stem":403},"涟漪波纹","\u002Fcatalog\u002Fshader-transitions\u002Fripple-waves","06.catalog\u002F04.shader-transitions\u002F10.ripple-waves",{"title":405,"path":406,"stem":407},"SDF 光圈","\u002Fcatalog\u002Fshader-transitions\u002Fsdf-iris","06.catalog\u002F04.shader-transitions\u002F11.sdf-iris",{"title":409,"path":410,"stem":411},"漩涡涡流","\u002Fcatalog\u002Fshader-transitions\u002Fswirl-vortex","06.catalog\u002F04.shader-transitions\u002F12.swirl-vortex",{"title":413,"path":414,"stem":415},"热浪扭曲","\u002Fcatalog\u002Fshader-transitions\u002Fthermal-distortion","06.catalog\u002F04.shader-transitions\u002F13.thermal-distortion",{"title":417,"path":418,"stem":419},"快速摇摄","\u002Fcatalog\u002Fshader-transitions\u002Fwhip-pan","06.catalog\u002F04.shader-transitions\u002F14.whip-pan",{"title":421,"icon":422,"path":423,"stem":424,"children":425,"page":30},"CSS 过渡","i-lucide-repeat","\u002Fcatalog\u002Fcss-transitions","06.catalog\u002F05.css-transitions",[426,430,434,438,442,446,450,454,458,462,466,470,474],{"title":427,"path":428,"stem":429},"3D 过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-3d","06.catalog\u002F05.css-transitions\u002F01.transitions-3d",{"title":431,"path":432,"stem":433},"模糊过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-blur","06.catalog\u002F05.css-transitions\u002F02.transitions-blur",{"title":435,"path":436,"stem":437},"覆盖过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-cover","06.catalog\u002F05.css-transitions\u002F03.transitions-cover",{"title":439,"path":440,"stem":441},"破碎过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-destruction","06.catalog\u002F05.css-transitions\u002F04.transitions-destruction",{"title":443,"path":444,"stem":445},"溶解过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-dissolve","06.catalog\u002F05.css-transitions\u002F05.transitions-dissolve",{"title":447,"path":448,"stem":449},"扭曲过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-distortion","06.catalog\u002F05.css-transitions\u002F06.transitions-distortion",{"title":451,"path":452,"stem":453},"网格过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-grid","06.catalog\u002F05.css-transitions\u002F07.transitions-grid",{"title":455,"path":456,"stem":457},"光效过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-light","06.catalog\u002F05.css-transitions\u002F08.transitions-light",{"title":459,"path":460,"stem":461},"机械过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-mechanical","06.catalog\u002F05.css-transitions\u002F09.transitions-mechanical",{"title":463,"path":464,"stem":465},"其他过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-other","06.catalog\u002F05.css-transitions\u002F10.transitions-other",{"title":467,"path":468,"stem":469},"推移过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-push","06.catalog\u002F05.css-transitions\u002F11.transitions-push",{"title":471,"path":472,"stem":473},"径向过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-radial","06.catalog\u002F05.css-transitions\u002F12.transitions-radial",{"title":475,"path":476,"stem":477},"缩放过渡","\u002Fcatalog\u002Fcss-transitions\u002Ftransitions-scale","06.catalog\u002F05.css-transitions\u002F13.transitions-scale",{"title":479,"icon":480,"path":481,"stem":482,"children":483,"page":30},"展示","i-lucide-monitor-play","\u002Fcatalog\u002Fshowcase","06.catalog\u002F06.showcase",[484,488,492,496,500,504,508],{"title":485,"path":486,"stem":487},"应用展示","\u002Fcatalog\u002Fshowcase\u002Fapp-showcase","06.catalog\u002F06.showcase\u002F01.app-showcase",{"title":489,"path":490,"stem":491},"Apple 金额计数器","\u002Fcatalog\u002Fshowcase\u002Fapple-money-count","06.catalog\u002F06.showcase\u002F02.apple-money-count",{"title":493,"path":494,"stem":495},"蓝色毛衣开场视频","\u002Fcatalog\u002Fshowcase\u002Fblue-sweater-intro-video","06.catalog\u002F06.showcase\u002F03.blue-sweater-intro-video",{"title":497,"path":498,"stem":499},"朝鲜封锁","\u002Fcatalog\u002Fshowcase\u002Fnorth-korea-locked-down","06.catalog\u002F06.showcase\u002F04.north-korea-locked-down",{"title":501,"path":502,"stem":503},"纽约巴黎航班","\u002Fcatalog\u002Fshowcase\u002Fnyc-paris-flight","06.catalog\u002F06.showcase\u002F05.nyc-paris-flight",{"title":505,"path":506,"stem":507},"3D UI 展示","\u002Fcatalog\u002Fshowcase\u002Fui-3d-reveal","06.catalog\u002F06.showcase\u002F06.ui-3d-reveal",{"title":509,"path":510,"stem":511},"VPN YouTube 广告片段","\u002Fcatalog\u002Fshowcase\u002Fvpn-youtube-spot","06.catalog\u002F06.showcase\u002F07.vpn-youtube-spot",{"title":513,"icon":514,"path":515,"stem":516,"children":517,"page":30},"数据","i-lucide-bar-chart-3","\u002Fcatalog\u002Fdata","06.catalog\u002F07.data",[518,522,526,530,534,538,542],{"title":519,"path":520,"stem":521},"数据图表","\u002Fcatalog\u002Fdata\u002Fdata-chart","06.catalog\u002F07.data\u002F01.data-chart",{"title":523,"path":524,"stem":525},"西班牙地图","\u002Fcatalog\u002Fdata\u002Fspain-map","06.catalog\u002F07.data\u002F02.spain-map",{"title":527,"path":528,"stem":529},"美国地图","\u002Fcatalog\u002Fdata\u002Fus-map","06.catalog\u002F07.data\u002F03.us-map",{"title":531,"path":532,"stem":533},"美国气泡地图","\u002Fcatalog\u002Fdata\u002Fus-map-bubble","06.catalog\u002F07.data\u002F04.us-map-bubble",{"title":535,"path":536,"stem":537},"美国流动地图","\u002Fcatalog\u002Fdata\u002Fus-map-flow","06.catalog\u002F07.data\u002F05.us-map-flow",{"title":539,"path":540,"stem":541},"美国六边形网格地图","\u002Fcatalog\u002Fdata\u002Fus-map-hex","06.catalog\u002F07.data\u002F06.us-map-hex",{"title":543,"path":544,"stem":545},"世界地图","\u002Fcatalog\u002Fdata\u002Fworld-map","06.catalog\u002F07.data\u002F07.world-map",{"title":547,"icon":548,"path":549,"stem":550,"children":551,"page":30},"效果","i-lucide-sparkles","\u002Fcatalog\u002Feffects","06.catalog\u002F08.effects",[552,556,560,564,568,572,576,580],{"title":553,"path":554,"stem":555},"差值混合","\u002Fcatalog\u002Feffects\u002Fcaption-blend-difference","06.catalog\u002F08.effects\u002F01.caption-blend-difference",{"title":557,"path":558,"stem":559},"胶片颗粒叠加","\u002Fcatalog\u002Feffects\u002Fgrain-overlay","06.catalog\u002F08.effects\u002F02.grain-overlay",{"title":561,"path":562,"stem":563},"网格像素化擦除","\u002Fcatalog\u002Feffects\u002Fgrid-pixelate-wipe","06.catalog\u002F08.effects\u002F03.grid-pixelate-wipe",{"title":565,"path":566,"stem":567},"视差缩小","\u002Fcatalog\u002Feffects\u002Fparallax-unzoom","06.catalog\u002F08.effects\u002F04.parallax-unzoom",{"title":569,"path":570,"stem":571},"视差放大","\u002Fcatalog\u002Feffects\u002Fparallax-zoom","06.catalog\u002F08.effects\u002F05.parallax-zoom",{"title":573,"path":574,"stem":575},"微光扫过","\u002Fcatalog\u002Feffects\u002Fshimmer-sweep","06.catalog\u002F08.effects\u002F06.shimmer-sweep",{"title":577,"path":578,"stem":579},"纹理遮罩文字","\u002Fcatalog\u002Feffects\u002Ftexture-mask-text","06.catalog\u002F08.effects\u002F07.texture-mask-text",{"title":581,"path":582,"stem":583},"暗角","\u002Fcatalog\u002Feffects\u002Fvignette","06.catalog\u002F08.effects\u002F08.vignette",{"title":585,"icon":586,"path":587,"stem":588,"children":589,"page":30},"区块","i-lucide-box","\u002Fcatalog\u002Fblocks","06.catalog\u002F09.blocks",[590,594],{"title":591,"path":592,"stem":593},"流程图","\u002Fcatalog\u002Fblocks\u002Fflowchart","06.catalog\u002F09.blocks\u002F01.flowchart",{"title":595,"path":596,"stem":597},"Logo 片尾","\u002Fcatalog\u002Fblocks\u002Flogo-outro","06.catalog\u002F09.blocks\u002F02.logo-outro",{"title":599,"icon":600,"path":601,"stem":602,"children":603,"page":30},"代码片段","i-lucide-code-2","\u002Fcatalog\u002Fcode-snippets","06.catalog\u002F10.code-snippets",[604,608,612,616,620,624,628,632,636,640,644,648],{"title":605,"path":606,"stem":607},"Dark 2026","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-dark-2026","06.catalog\u002F10.code-snippets\u002F01.code-snippet-dark-2026",{"title":609,"path":610,"stem":611},"Dark Modern","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-dark-modern","06.catalog\u002F10.code-snippets\u002F02.code-snippet-dark-modern",{"title":613,"path":614,"stem":615},"Dark+","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-dark-plus","06.catalog\u002F10.code-snippets\u002F03.code-snippet-dark-plus",{"title":617,"path":618,"stem":619},"High Contrast","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-high-contrast","06.catalog\u002F10.code-snippets\u002F04.code-snippet-high-contrast",{"title":621,"path":622,"stem":623},"High Contrast Light","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-high-contrast-light","06.catalog\u002F10.code-snippets\u002F05.code-snippet-high-contrast-light",{"title":625,"path":626,"stem":627},"Light 2026","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-light-2026","06.catalog\u002F10.code-snippets\u002F06.code-snippet-light-2026",{"title":629,"path":630,"stem":631},"Light Modern","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-light-modern","06.catalog\u002F10.code-snippets\u002F07.code-snippet-light-modern",{"title":633,"path":634,"stem":635},"Light+","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-light-plus","06.catalog\u002F10.code-snippets\u002F08.code-snippet-light-plus",{"title":637,"path":638,"stem":639},"Monokai","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-monokai","06.catalog\u002F10.code-snippets\u002F09.code-snippet-monokai",{"title":641,"path":642,"stem":643},"Solarized Light","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-solarized-light","06.catalog\u002F10.code-snippets\u002F10.code-snippet-solarized-light",{"title":645,"path":646,"stem":647},"Visual Studio Dark","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-visual-studio-dark","06.catalog\u002F10.code-snippets\u002F11.code-snippet-visual-studio-dark",{"title":649,"path":650,"stem":651},"Visual Studio Light","\u002Fcatalog\u002Fcode-snippets\u002Fcode-snippet-visual-studio-light","06.catalog\u002F10.code-snippets\u002F12.code-snippet-visual-studio-light",{"title":653,"icon":654,"path":655,"stem":656,"children":657,"page":30},"参考","i-lucide-book-marked","\u002Freference","07.reference",[658,662,666,670,674,678,682],{"title":659,"path":660,"stem":661},"HTML Schema 参考","\u002Freference\u002Fhtml-schema","07.reference\u002F01.html-schema",{"title":663,"path":664,"stem":665},"贡献指南","\u002Freference\u002Fcontributing","07.reference\u002F02.contributing",{"title":667,"path":668,"stem":669},"贡献到 Catalog","\u002Freference\u002Fcatalog","07.reference\u002F03.catalog",{"title":671,"path":672,"stem":673},"发布渠道","\u002Freference\u002Frelease-channels","07.reference\u002F04.release-channels",{"title":675,"path":676,"stem":677},"测试本地 CLI 变更","\u002Freference\u002Ftesting-local-changes","07.reference\u002F05.testing-local-changes",{"title":679,"path":680,"stem":681},"Studio 手动 DOM 编辑","\u002Freference\u002Fstudio-manual-dom-editing","07.reference\u002F06.studio-manual-dom-editing",{"title":683,"path":684,"stem":685},"采用者","\u002Freference\u002Fadopters","07.reference\u002F07.adopters",{"id":687,"title":187,"body":688,"description":3330,"extension":3331,"links":3332,"meta":3333,"navigation":931,"path":188,"seo":3334,"stem":189,"__hash__":3335},"docs\u002F05.packages\u002F04.producer.md",{"type":689,"value":690,"toc":3299},"minimark",[691,700,726,730,739,755,760,792,807,810,813,818,825,829,832,835,846,850,856,860,863,866,876,879,882,1038,1041,1189,1194,1201,1301,1307,1325,1329,1335,1444,1448,1501,1507,1510,1627,1630,1758,1762,1765,1821,1824,1919,1922,2002,2006,2009,2039,2043,2046,2111,2115,2118,2186,2189,2203,2210,2317,2320,2323,2479,2482,2485,2730,2747,2750,2763,3036,3045,3048,3051,3120,3123,3126,3168,3171,3179,3186,3248,3259,3262,3295],[692,693,694,695,699],"p",{},"producer 包将 ",[696,697,698],"a",{"href":180},"engine"," 的帧捕获与 FFmpeg 编码结合，提供完整的 HTML 到视频渲染管道。它支持 MP4 (h264) 和 WebM (VP9 带 alpha 透明度)，并处理运行时注入、就绪门控、音频混音和可选的基于 Docker 的确定性渲染。",[701,702,707],"pre",{"className":703,"code":704,"language":705,"meta":706,"style":706},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @hyperframes\u002Fproducer\n","bash","",[708,709,710],"code",{"__ignoreMap":706},[711,712,715,719,723],"span",{"class":713,"line":714},"line",1,[711,716,718],{"class":717},"sBMFI","npm",[711,720,722],{"class":721},"sfazB"," install",[711,724,725],{"class":721}," @hyperframes\u002Fproducer\n",[727,728,729],"h2",{"id":729},"何时使用",[692,731,732],{},[733,734,735,736,738],"strong",{},"在以下场景使用 ",[708,737,187],{},"：",[740,741,742,746,749,752],"ul",{},[743,744,745],"li",{},"在 Node.js 中以编程方式将合渲染为 MP4 或 WebM（例如在后端服务或 CI 流水线中）",[743,747,748],{},"构建具有细粒度管道控制的自定义渲染服务",[743,750,751],{},"针对黄金基线运行视觉回归测试",[743,753,754],{},"在不同配置下基准测试渲染性能",[692,756,757],{},[733,758,759],{},"如果需要以下功能，请使用其他包：",[740,761,762,772,781,786],{},[743,763,764,765,767,768,771],{},"不写代码从命令行渲染 — 使用 ",[696,766,195],{"href":196},"（",[708,769,770],{},"npx hyperframes render","）",[743,773,774,775,777,778],{},"在浏览器中预览合成 — 使用 ",[696,776,195],{"href":196}," 或 ",[696,779,780],{"href":192},"studio",[743,782,783,784],{},"不编码直接捕获帧 — 使用 ",[696,785,698],{"href":180},[743,787,788,789],{},"检查或解析合成 HTML — 使用 ",[696,790,791],{"href":176},"core",[793,794,795,801],"blockquote",{},[692,796,797,798],{},"💡 ",[733,799,800],{},"Tip",[692,802,803,804,806],{},"如果你正在构建只需要渲染视频的 Web 应用或脚本，",[696,805,195],{"href":196}," 是最快的路径。producer 包适用于需要在 Node.js 中进行编程控制的场景。",[727,808,809],{"id":809},"功能说明",[692,811,812],{},"producer 编排整个渲染管道：",[814,815,817],"h3",{"id":816},"加载合成-html","加载合成 HTML",[692,819,820,821,824],{},"读取你的 ",[708,822,823],{},"index.html"," 和所有引用的子合成。",[814,826,828],{"id":827},"注入-hyperframes-运行时","注入 Hyperframes 运行时",[692,830,831],{},"添加管理时间轴跳转、clip 生命周期和媒体播放的运行时脚本。",[814,833,834],{"id":834},"等待就绪门控",[692,836,837,838,841,842,845],{},"轮询 ",[708,839,840],{},"window.__playerReady"," 和 ",[708,843,844],{},"window.__renderReady","，确保所有资源（字体、图片、视频）在捕获开始前加载完毕。",[814,847,849],{"id":848},"通过-engine-捕获帧","通过 engine 捕获帧",[692,851,852,853,855],{},"使用 ",[696,854,698],{"href":180}," 的 BeginFrame 管道将每一帧捕获为像素缓冲区。",[814,857,859],{"id":858},"通过-ffmpeg-编码为-mp4-或-webm","通过 FFmpeg 编码为 MP4 或 WebM",[692,861,862],{},"将帧缓冲区通过管道送入 FFmpeg，使用选定的质量预设。MP4 使用 h264；WebM 使用 VP9 并支持 alpha 透明度。",[814,864,865],{"id":865},"混音音频轨道",[692,867,868,869,841,872,875],{},"从视频 clip 和音频元素中提取音频，应用 ",[708,870,871],{},"data-volume",[708,873,874],{},"data-media-start"," 偏移，并将它们混入最终的 MP4。",[727,877,878],{"id":878},"编程方式使用",[692,880,881],{},"producer 使用两步 API：创建渲染任务配置，然后执行它。",[701,883,887],{"className":884,"code":885,"language":886,"meta":706,"style":706},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createRenderJob, executeRenderJob } from '@hyperframes\u002Fproducer';\n\nconst job = createRenderJob({\nfps: 30,\nquality: 'standard',\n});\n\nawait executeRenderJob(job, '.\u002Fmy-video', '.\u002Foutput.mp4');\n","typescript",[708,888,889,926,933,955,972,989,1000,1005],{"__ignoreMap":706},[711,890,891,895,899,903,906,909,912,915,918,920,923],{"class":713,"line":714},[711,892,894],{"class":893},"s7zQu","import",[711,896,898],{"class":897},"sMK4o"," {",[711,900,902],{"class":901},"sTEyZ"," createRenderJob",[711,904,905],{"class":897},",",[711,907,908],{"class":901}," executeRenderJob",[711,910,911],{"class":897}," }",[711,913,914],{"class":893}," from",[711,916,917],{"class":897}," '",[711,919,187],{"class":721},[711,921,922],{"class":897},"'",[711,924,925],{"class":897},";\n",[711,927,929],{"class":713,"line":928},2,[711,930,932],{"emptyLinePlaceholder":931},true,"\n",[711,934,936,940,943,946,949,952],{"class":713,"line":935},3,[711,937,939],{"class":938},"spNyl","const",[711,941,942],{"class":901}," job ",[711,944,945],{"class":897},"=",[711,947,902],{"class":948},"s2Zo4",[711,950,951],{"class":901},"(",[711,953,954],{"class":897},"{\n",[711,956,958,962,965,969],{"class":713,"line":957},4,[711,959,961],{"class":960},"swJcz","fps",[711,963,964],{"class":897},":",[711,966,968],{"class":967},"sbssI"," 30",[711,970,971],{"class":897},",\n",[711,973,975,978,980,982,985,987],{"class":713,"line":974},5,[711,976,977],{"class":960},"quality",[711,979,964],{"class":897},[711,981,917],{"class":897},[711,983,984],{"class":721},"standard",[711,986,922],{"class":897},[711,988,971],{"class":897},[711,990,992,995,998],{"class":713,"line":991},6,[711,993,994],{"class":897},"}",[711,996,997],{"class":901},")",[711,999,925],{"class":897},[711,1001,1003],{"class":713,"line":1002},7,[711,1004,932],{"emptyLinePlaceholder":931},[711,1006,1008,1011,1013,1016,1018,1020,1023,1025,1027,1029,1032,1034,1036],{"class":713,"line":1007},8,[711,1009,1010],{"class":893},"await",[711,1012,908],{"class":948},[711,1014,1015],{"class":901},"(job",[711,1017,905],{"class":897},[711,1019,917],{"class":897},[711,1021,1022],{"class":721},".\u002Fmy-video",[711,1024,922],{"class":897},[711,1026,905],{"class":897},[711,1028,917],{"class":897},[711,1030,1031],{"class":721},".\u002Foutput.mp4",[711,1033,922],{"class":897},[711,1035,997],{"class":901},[711,1037,925],{"class":897},[814,1039,1040],{"id":1040},"渲染配置",[701,1042,1044],{"className":884,"code":1043,"language":886,"meta":706,"style":706},"import { createRenderJob } from '@hyperframes\u002Fproducer';\n\nconst job = createRenderJob({\nfps: 30,                   \u002F\u002F 整数，或 { num: 30000, den: 1001 } 用于 NTSC\nquality: 'standard',       \u002F\u002F 'draft'、'standard' 或 'high'\nformat: 'mp4',             \u002F\u002F 'mp4'、'webm'、'mov' 或 'png-sequence'\nworkers: 4,                \u002F\u002F 并行渲染 worker 数量 (1-8)\nuseGpu: false,             \u002F\u002F GPU 加速编码\ndebug: false,              \u002F\u002F 调试日志\n});\n",[708,1045,1046,1066,1070,1084,1098,1115,1134,1149,1165,1180],{"__ignoreMap":706},[711,1047,1048,1050,1052,1054,1056,1058,1060,1062,1064],{"class":713,"line":714},[711,1049,894],{"class":893},[711,1051,898],{"class":897},[711,1053,902],{"class":901},[711,1055,911],{"class":897},[711,1057,914],{"class":893},[711,1059,917],{"class":897},[711,1061,187],{"class":721},[711,1063,922],{"class":897},[711,1065,925],{"class":897},[711,1067,1068],{"class":713,"line":928},[711,1069,932],{"emptyLinePlaceholder":931},[711,1071,1072,1074,1076,1078,1080,1082],{"class":713,"line":935},[711,1073,939],{"class":938},[711,1075,942],{"class":901},[711,1077,945],{"class":897},[711,1079,902],{"class":948},[711,1081,951],{"class":901},[711,1083,954],{"class":897},[711,1085,1086,1088,1090,1092,1094],{"class":713,"line":957},[711,1087,961],{"class":960},[711,1089,964],{"class":897},[711,1091,968],{"class":967},[711,1093,905],{"class":897},[711,1095,1097],{"class":1096},"sHwdD","                   \u002F\u002F 整数，或 { num: 30000, den: 1001 } 用于 NTSC\n",[711,1099,1100,1102,1104,1106,1108,1110,1112],{"class":713,"line":974},[711,1101,977],{"class":960},[711,1103,964],{"class":897},[711,1105,917],{"class":897},[711,1107,984],{"class":721},[711,1109,922],{"class":897},[711,1111,905],{"class":897},[711,1113,1114],{"class":1096},"       \u002F\u002F 'draft'、'standard' 或 'high'\n",[711,1116,1117,1120,1122,1124,1127,1129,1131],{"class":713,"line":991},[711,1118,1119],{"class":960},"format",[711,1121,964],{"class":897},[711,1123,917],{"class":897},[711,1125,1126],{"class":721},"mp4",[711,1128,922],{"class":897},[711,1130,905],{"class":897},[711,1132,1133],{"class":1096},"             \u002F\u002F 'mp4'、'webm'、'mov' 或 'png-sequence'\n",[711,1135,1136,1139,1141,1144,1146],{"class":713,"line":1002},[711,1137,1138],{"class":960},"workers",[711,1140,964],{"class":897},[711,1142,1143],{"class":967}," 4",[711,1145,905],{"class":897},[711,1147,1148],{"class":1096},"                \u002F\u002F 并行渲染 worker 数量 (1-8)\n",[711,1150,1151,1154,1156,1160,1162],{"class":713,"line":1007},[711,1152,1153],{"class":960},"useGpu",[711,1155,964],{"class":897},[711,1157,1159],{"class":1158},"sfNiH"," false",[711,1161,905],{"class":897},[711,1163,1164],{"class":1096},"             \u002F\u002F GPU 加速编码\n",[711,1166,1168,1171,1173,1175,1177],{"class":713,"line":1167},9,[711,1169,1170],{"class":960},"debug",[711,1172,964],{"class":897},[711,1174,1159],{"class":1158},[711,1176,905],{"class":897},[711,1178,1179],{"class":1096},"              \u002F\u002F 调试日志\n",[711,1181,1183,1185,1187],{"class":713,"line":1182},10,[711,1184,994],{"class":897},[711,1186,997],{"class":901},[711,1188,925],{"class":897},[1190,1191,1193],"h4",{"id":1192},"webm-透明度","WebM 透明度",[692,1195,1196,1197,1200],{},"设置 ",[708,1198,1199],{},"format: 'webm'"," 使用 VP9 alpha 渲染透明背景：",[701,1202,1204],{"className":884,"code":1203,"language":886,"meta":706,"style":706},"const job = createRenderJob({\nfps: 30,\nquality: 'standard',\nformat: 'webm',\n});\n\nawait executeRenderJob(job, '.\u002Fmy-overlay', '.\u002Foverlay.webm');\n",[708,1205,1206,1220,1230,1244,1259,1267,1271],{"__ignoreMap":706},[711,1207,1208,1210,1212,1214,1216,1218],{"class":713,"line":714},[711,1209,939],{"class":938},[711,1211,942],{"class":901},[711,1213,945],{"class":897},[711,1215,902],{"class":948},[711,1217,951],{"class":901},[711,1219,954],{"class":897},[711,1221,1222,1224,1226,1228],{"class":713,"line":928},[711,1223,961],{"class":960},[711,1225,964],{"class":897},[711,1227,968],{"class":967},[711,1229,971],{"class":897},[711,1231,1232,1234,1236,1238,1240,1242],{"class":713,"line":935},[711,1233,977],{"class":960},[711,1235,964],{"class":897},[711,1237,917],{"class":897},[711,1239,984],{"class":721},[711,1241,922],{"class":897},[711,1243,971],{"class":897},[711,1245,1246,1248,1250,1252,1255,1257],{"class":713,"line":957},[711,1247,1119],{"class":960},[711,1249,964],{"class":897},[711,1251,917],{"class":897},[711,1253,1254],{"class":721},"webm",[711,1256,922],{"class":897},[711,1258,971],{"class":897},[711,1260,1261,1263,1265],{"class":713,"line":974},[711,1262,994],{"class":897},[711,1264,997],{"class":901},[711,1266,925],{"class":897},[711,1268,1269],{"class":713,"line":991},[711,1270,932],{"emptyLinePlaceholder":931},[711,1272,1273,1275,1277,1279,1281,1283,1286,1288,1290,1292,1295,1297,1299],{"class":713,"line":1002},[711,1274,1010],{"class":893},[711,1276,908],{"class":948},[711,1278,1015],{"class":901},[711,1280,905],{"class":897},[711,1282,917],{"class":897},[711,1284,1285],{"class":721},".\u002Fmy-overlay",[711,1287,922],{"class":897},[711,1289,905],{"class":897},[711,1291,917],{"class":897},[711,1293,1294],{"class":721},".\u002Foverlay.webm",[711,1296,922],{"class":897},[711,1298,997],{"class":901},[711,1300,925],{"class":897},[692,1302,1303,1304,1306],{},"当 ",[708,1305,1199],{}," 时：",[740,1308,1309,1312,1315,1322],{},[743,1310,1311],{},"帧以 PNG 格式捕获（保留 alpha 通道）",[743,1313,1314],{},"Chrome 的页面背景通过 CDP 设置为透明",[743,1316,1317,1318,1321],{},"FFmpeg 使用 VP9 + ",[708,1319,1320],{},"yuva420p"," 像素格式编码",[743,1323,1324],{},"音频编码为 Opus（而非 MP4 的 AAC）",[1190,1326,1328],{"id":1327},"hdr-输出","HDR 输出",[692,1330,1196,1331,1334],{},[708,1332,1333],{},"hdr: true"," 启用 HDR 检测。producer 会探测每个视频和图像源的 BT.2020 \u002F PQ \u002F HLG 颜色标签 — 如果发现任何 HDR 源，输出将使用 H.265 10-bit BT.2020 并带有 HDR10 静态元数据。仅 SDR 的合成不受影响。",[701,1336,1338],{"className":884,"code":1337,"language":886,"meta":706,"style":706},"const job = createRenderJob({\nfps: 30,\nquality: 'standard',\nformat: 'mp4',\nhdr: true,\n});\n\nawait executeRenderJob(job, '.\u002Fmy-video', '.\u002Foutput.mp4');\n",[708,1339,1340,1354,1364,1378,1392,1404,1412,1416],{"__ignoreMap":706},[711,1341,1342,1344,1346,1348,1350,1352],{"class":713,"line":714},[711,1343,939],{"class":938},[711,1345,942],{"class":901},[711,1347,945],{"class":897},[711,1349,902],{"class":948},[711,1351,951],{"class":901},[711,1353,954],{"class":897},[711,1355,1356,1358,1360,1362],{"class":713,"line":928},[711,1357,961],{"class":960},[711,1359,964],{"class":897},[711,1361,968],{"class":967},[711,1363,971],{"class":897},[711,1365,1366,1368,1370,1372,1374,1376],{"class":713,"line":935},[711,1367,977],{"class":960},[711,1369,964],{"class":897},[711,1371,917],{"class":897},[711,1373,984],{"class":721},[711,1375,922],{"class":897},[711,1377,971],{"class":897},[711,1379,1380,1382,1384,1386,1388,1390],{"class":713,"line":957},[711,1381,1119],{"class":960},[711,1383,964],{"class":897},[711,1385,917],{"class":897},[711,1387,1126],{"class":721},[711,1389,922],{"class":897},[711,1391,971],{"class":897},[711,1393,1394,1397,1399,1402],{"class":713,"line":974},[711,1395,1396],{"class":960},"hdr",[711,1398,964],{"class":897},[711,1400,1401],{"class":1158}," true",[711,1403,971],{"class":897},[711,1405,1406,1408,1410],{"class":713,"line":991},[711,1407,994],{"class":897},[711,1409,997],{"class":901},[711,1411,925],{"class":897},[711,1413,1414],{"class":713,"line":1002},[711,1415,932],{"emptyLinePlaceholder":931},[711,1417,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442],{"class":713,"line":1007},[711,1419,1010],{"class":893},[711,1421,908],{"class":948},[711,1423,1015],{"class":901},[711,1425,905],{"class":897},[711,1427,917],{"class":897},[711,1429,1022],{"class":721},[711,1431,922],{"class":897},[711,1433,905],{"class":897},[711,1435,917],{"class":897},[711,1437,1031],{"class":721},[711,1439,922],{"class":897},[711,1441,997],{"class":901},[711,1443,925],{"class":897},[692,1445,1303,1446,1306],{},[708,1447,1333],{},[740,1449,1450,1457,1460,1463,1474,1490],{},[743,1451,1452,1453,1456],{},"通过 ",[708,1454,1455],{},"ffprobe"," 探测源；当同时存在 PQ 和 HLG 时，PQ 优先",[743,1458,1459],{},"HDR 视频和图像提取为 16 位线性光像素并原生合成",[743,1461,1462],{},"SDR DOM 覆盖层从 sRGB 转换为 BT.2020 后叠加",[743,1464,1465,1466,1469,1470,1473],{},"输出使用 ",[708,1467,1468],{},"libx265"," 配合 ",[708,1471,1472],{},"yuv420p10le"," 和 HDR10 母版\u002F内容光照级别元数据",[743,1475,1476,1478,1479,1482,1483,841,1486,1489],{},[708,1477,1119],{}," 必须为 ",[708,1480,1481],{},"'mp4'"," — ",[708,1484,1485],{},"'mov'",[708,1487,1488],{},"'webm'"," 会回退到 SDR",[743,1491,1492,1493,1496,1497,1500],{},"HDR ",[708,1494,1495],{},"\u003Cimg>"," 支持",[733,1498,1499],{},"仅限静态图片","；动画 HDR 标签图片仅使用第一帧",[692,1502,1503,1504,1506],{},"有关源要求、回退规则和验证的完整详情，请参阅 ",[696,1505,112],{"href":113},"。",[814,1508,1509],{"id":1509},"进度回调",[701,1511,1513],{"className":884,"code":1512,"language":886,"meta":706,"style":706},"import type { ProgressCallback, RenderStatus } from '@hyperframes\u002Fproducer';\n\nconst onProgress: ProgressCallback = (status: RenderStatus) => {\nconsole.log(`Status: ${status}`);\n\u002F\u002F 状态：\"queued\" | \"preprocessing\" | \"rendering\" | \"encoding\"\n\u002F\u002F        | \"assembling\" | \"complete\" | \"failed\" | \"cancelled\"\n};\n",[708,1514,1515,1544,1548,1581,1612,1617,1622],{"__ignoreMap":706},[711,1516,1517,1519,1522,1524,1527,1529,1532,1534,1536,1538,1540,1542],{"class":713,"line":714},[711,1518,894],{"class":893},[711,1520,1521],{"class":893}," type",[711,1523,898],{"class":897},[711,1525,1526],{"class":901}," ProgressCallback",[711,1528,905],{"class":897},[711,1530,1531],{"class":901}," RenderStatus",[711,1533,911],{"class":897},[711,1535,914],{"class":893},[711,1537,917],{"class":897},[711,1539,187],{"class":721},[711,1541,922],{"class":897},[711,1543,925],{"class":897},[711,1545,1546],{"class":713,"line":928},[711,1547,932],{"emptyLinePlaceholder":931},[711,1549,1550,1552,1555,1557,1559,1562,1565,1569,1571,1573,1575,1578],{"class":713,"line":935},[711,1551,939],{"class":938},[711,1553,1554],{"class":901}," onProgress",[711,1556,964],{"class":897},[711,1558,1526],{"class":717},[711,1560,1561],{"class":897}," =",[711,1563,1564],{"class":897}," (",[711,1566,1568],{"class":1567},"sHdIc","status",[711,1570,964],{"class":897},[711,1572,1531],{"class":717},[711,1574,997],{"class":897},[711,1576,1577],{"class":938}," =>",[711,1579,1580],{"class":897}," {\n",[711,1582,1583,1586,1589,1592,1594,1597,1600,1603,1605,1608,1610],{"class":713,"line":957},[711,1584,1585],{"class":901},"console",[711,1587,1588],{"class":897},".",[711,1590,1591],{"class":948},"log",[711,1593,951],{"class":960},[711,1595,1596],{"class":897},"`",[711,1598,1599],{"class":721},"Status: ",[711,1601,1602],{"class":897},"${",[711,1604,1568],{"class":901},[711,1606,1607],{"class":897},"}`",[711,1609,997],{"class":960},[711,1611,925],{"class":897},[711,1613,1614],{"class":713,"line":974},[711,1615,1616],{"class":1096},"\u002F\u002F 状态：\"queued\" | \"preprocessing\" | \"rendering\" | \"encoding\"\n",[711,1618,1619],{"class":713,"line":991},[711,1620,1621],{"class":1096},"\u002F\u002F        | \"assembling\" | \"complete\" | \"failed\" | \"cancelled\"\n",[711,1623,1624],{"class":713,"line":1002},[711,1625,1626],{"class":897},"};\n",[814,1628,1629],{"id":1629},"取消",[701,1631,1633],{"className":884,"code":1632,"language":886,"meta":706,"style":706},"import { RenderCancelledError } from '@hyperframes\u002Fproducer';\n\nry {\nawait executeRenderJob(job);\n} catch (err) {\nif (err instanceof RenderCancelledError) {\nconsole.log(`Cancelled: ${err.reason}`);\n\u002F\u002F reason: \"user_cancelled\" | \"timeout\" | \"aborted\"\n}\n}\n",[708,1634,1635,1656,1660,1667,1682,1694,1714,1744,1749,1754],{"__ignoreMap":706},[711,1636,1637,1639,1641,1644,1646,1648,1650,1652,1654],{"class":713,"line":714},[711,1638,894],{"class":893},[711,1640,898],{"class":897},[711,1642,1643],{"class":901}," RenderCancelledError",[711,1645,911],{"class":897},[711,1647,914],{"class":893},[711,1649,917],{"class":897},[711,1651,187],{"class":721},[711,1653,922],{"class":897},[711,1655,925],{"class":897},[711,1657,1658],{"class":713,"line":928},[711,1659,932],{"emptyLinePlaceholder":931},[711,1661,1662,1665],{"class":713,"line":935},[711,1663,1664],{"class":901},"ry ",[711,1666,954],{"class":897},[711,1668,1669,1671,1673,1675,1678,1680],{"class":713,"line":957},[711,1670,1010],{"class":893},[711,1672,908],{"class":948},[711,1674,951],{"class":960},[711,1676,1677],{"class":901},"job",[711,1679,997],{"class":960},[711,1681,925],{"class":897},[711,1683,1684,1686,1689,1692],{"class":713,"line":974},[711,1685,994],{"class":897},[711,1687,1688],{"class":893}," catch",[711,1690,1691],{"class":901}," (err) ",[711,1693,954],{"class":897},[711,1695,1696,1699,1701,1704,1707,1709,1712],{"class":713,"line":991},[711,1697,1698],{"class":893},"if",[711,1700,1564],{"class":960},[711,1702,1703],{"class":901},"err",[711,1705,1706],{"class":897}," instanceof",[711,1708,1643],{"class":717},[711,1710,1711],{"class":960},") ",[711,1713,954],{"class":897},[711,1715,1716,1718,1720,1722,1724,1726,1729,1731,1733,1735,1738,1740,1742],{"class":713,"line":1002},[711,1717,1585],{"class":901},[711,1719,1588],{"class":897},[711,1721,1591],{"class":948},[711,1723,951],{"class":960},[711,1725,1596],{"class":897},[711,1727,1728],{"class":721},"Cancelled: ",[711,1730,1602],{"class":897},[711,1732,1703],{"class":901},[711,1734,1588],{"class":897},[711,1736,1737],{"class":901},"reason",[711,1739,1607],{"class":897},[711,1741,997],{"class":960},[711,1743,925],{"class":897},[711,1745,1746],{"class":713,"line":1007},[711,1747,1748],{"class":1096},"\u002F\u002F reason: \"user_cancelled\" | \"timeout\" | \"aborted\"\n",[711,1750,1751],{"class":713,"line":1167},[711,1752,1753],{"class":897},"}\n",[711,1755,1756],{"class":713,"line":1182},[711,1757,1753],{"class":897},[727,1759,1761],{"id":1760},"http-服务器","HTTP 服务器",[692,1763,1764],{},"producer 包含一个内置 HTTP 服务器，用于作为渲染服务运行：",[701,1766,1768],{"className":884,"code":1767,"language":886,"meta":706,"style":706},"import { startServer } from '@hyperframes\u002Fproducer\u002Fserver';\n\nawait startServer({ port: 8080 });\n",[708,1769,1770,1792,1796],{"__ignoreMap":706},[711,1771,1772,1774,1776,1779,1781,1783,1785,1788,1790],{"class":713,"line":714},[711,1773,894],{"class":893},[711,1775,898],{"class":897},[711,1777,1778],{"class":901}," startServer",[711,1780,911],{"class":897},[711,1782,914],{"class":893},[711,1784,917],{"class":897},[711,1786,1787],{"class":721},"@hyperframes\u002Fproducer\u002Fserver",[711,1789,922],{"class":897},[711,1791,925],{"class":897},[711,1793,1794],{"class":713,"line":928},[711,1795,932],{"emptyLinePlaceholder":931},[711,1797,1798,1800,1802,1804,1807,1810,1812,1815,1817,1819],{"class":713,"line":935},[711,1799,1010],{"class":893},[711,1801,1778],{"class":948},[711,1803,951],{"class":901},[711,1805,1806],{"class":897},"{",[711,1808,1809],{"class":960}," port",[711,1811,964],{"class":897},[711,1813,1814],{"class":967}," 8080",[711,1816,911],{"class":897},[711,1818,997],{"class":901},[711,1820,925],{"class":897},[814,1822,1823],{"id":1823},"服务器端点",[1825,1826,1827,1843],"table",{},[1828,1829,1830],"thead",{},[1831,1832,1833,1837,1840],"tr",{},[1834,1835,1836],"th",{},"方法",[1834,1838,1839],{},"路径",[1834,1841,1842],{},"描述",[1844,1845,1846,1862,1876,1890,1905],"tbody",{},[1831,1847,1848,1854,1859],{},[1849,1850,1851],"td",{},[708,1852,1853],{},"POST",[1849,1855,1856],{},[708,1857,1858],{},"\u002Frender",[1849,1860,1861],{},"阻塞渲染 — 返回 JSON 结果",[1831,1863,1864,1868,1873],{},[1849,1865,1866],{},[708,1867,1853],{},[1849,1869,1870],{},[708,1871,1872],{},"\u002Frender\u002Fstream",[1849,1874,1875],{},"使用 Server-Sent Events 的流式渲染",[1831,1877,1878,1882,1887],{},[1849,1879,1880],{},[708,1881,1853],{},[1849,1883,1884],{},[708,1885,1886],{},"\u002Flint",[1849,1888,1889],{},"检查合成的问题",[1831,1891,1892,1897,1902],{},[1849,1893,1894],{},[708,1895,1896],{},"GET",[1849,1898,1899],{},[708,1900,1901],{},"\u002Fhealth",[1849,1903,1904],{},"健康检查",[1831,1906,1907,1911,1916],{},[1849,1908,1909],{},[708,1910,1896],{},[1849,1912,1913],{},[708,1914,1915],{},"\u002Foutputs\u002F:token",[1849,1917,1918],{},"下载渲染后的 MP4",[692,1920,1921],{},"要进行自定义服务器集成，使用更底层的处理器：",[701,1923,1925],{"className":884,"code":1924,"language":886,"meta":706,"style":706},"import { createRenderHandlers, createProducerApp } from '@hyperframes\u002Fproducer\u002Fserver';\n\n\u002F\u002F 获取单个请求处理器\nconst handlers = createRenderHandlers(options);\n\n\u002F\u002F 或获取完整的 Hono 应用\nconst app = createProducerApp(options);\n",[708,1926,1927,1953,1957,1962,1978,1982,1987],{"__ignoreMap":706},[711,1928,1929,1931,1933,1936,1938,1941,1943,1945,1947,1949,1951],{"class":713,"line":714},[711,1930,894],{"class":893},[711,1932,898],{"class":897},[711,1934,1935],{"class":901}," createRenderHandlers",[711,1937,905],{"class":897},[711,1939,1940],{"class":901}," createProducerApp",[711,1942,911],{"class":897},[711,1944,914],{"class":893},[711,1946,917],{"class":897},[711,1948,1787],{"class":721},[711,1950,922],{"class":897},[711,1952,925],{"class":897},[711,1954,1955],{"class":713,"line":928},[711,1956,932],{"emptyLinePlaceholder":931},[711,1958,1959],{"class":713,"line":935},[711,1960,1961],{"class":1096},"\u002F\u002F 获取单个请求处理器\n",[711,1963,1964,1966,1969,1971,1973,1976],{"class":713,"line":957},[711,1965,939],{"class":938},[711,1967,1968],{"class":901}," handlers ",[711,1970,945],{"class":897},[711,1972,1935],{"class":948},[711,1974,1975],{"class":901},"(options)",[711,1977,925],{"class":897},[711,1979,1980],{"class":713,"line":974},[711,1981,932],{"emptyLinePlaceholder":931},[711,1983,1984],{"class":713,"line":991},[711,1985,1986],{"class":1096},"\u002F\u002F 或获取完整的 Hono 应用\n",[711,1988,1989,1991,1994,1996,1998,2000],{"class":713,"line":1002},[711,1990,939],{"class":938},[711,1992,1993],{"class":901}," app ",[711,1995,945],{"class":897},[711,1997,1940],{"class":948},[711,1999,1975],{"class":901},[711,2001,925],{"class":897},[727,2003,2005],{"id":2004},"docker-渲染","Docker 渲染",[692,2007,2008],{},"为了获得确定性输出，producer 可以在 Docker 容器中渲染，使用固定的 Chrome 版本和字体集。这保证了跨机器的输出一致 — 对 CI 流水线和生产服务至关重要。",[701,2010,2012],{"className":703,"code":2011,"language":705,"meta":706,"style":706},"# 通过 CLI（推荐）\nnpx hyperframes render --docker --output output.mp4\n",[708,2013,2014,2019],{"__ignoreMap":706},[711,2015,2016],{"class":713,"line":714},[711,2017,2018],{"class":1096},"# 通过 CLI（推荐）\n",[711,2020,2021,2024,2027,2030,2033,2036],{"class":713,"line":928},[711,2022,2023],{"class":717},"npx",[711,2025,2026],{"class":721}," hyperframes",[711,2028,2029],{"class":721}," render",[711,2031,2032],{"class":721}," --docker",[711,2034,2035],{"class":721}," --output",[711,2037,2038],{"class":721}," output.mp4\n",[2040,2041,2042],"info",{},"\nDocker 模式需要 Docker 已安装并运行。运行 `npx hyperframes doctor` 验证你的环境。有关 Docker 模式确定性的详细信息，请参阅[确定性渲染](\u002Fconcepts\u002Fdeterminism)。\n",[727,2044,2045],{"id":2045},"质量预设",[1825,2047,2048,2064],{},[1828,2049,2050],{},[1831,2051,2052,2055,2058,2061],{},[1834,2053,2054],{},"预设",[1834,2056,2057],{},"分辨率",[1834,2059,2060],{},"编码",[1834,2062,2063],{},"使用场景",[1844,2065,2066,2082,2096],{},[1831,2067,2068,2073,2076,2079],{},[1849,2069,2070],{},[708,2071,2072],{},"draft",[1849,2074,2075],{},"原始",[1849,2077,2078],{},"快速 CRF",[1849,2080,2081],{},"快速迭代，预览编辑",[1831,2083,2084,2088,2090,2093],{},[1849,2085,2086],{},[708,2087,984],{},[1849,2089,2075],{},[1849,2091,2092],{},"平衡 CRF",[1849,2094,2095],{},"生产渲染，分享",[1831,2097,2098,2103,2105,2108],{},[1849,2099,2100],{},[708,2101,2102],{},"high",[1849,2104,2075],{},[1849,2106,2107],{},"高质量 CRF",[1849,2109,2110],{},"最终交付，存档",[727,2112,2114],{"id":2113},"gpu-编码","GPU 编码",[692,2116,2117],{},"producer 支持硬件加速编码以获得更快的渲染：",[1825,2119,2120,2133],{},[1828,2121,2122],{},[1831,2123,2124,2127,2130],{},[1834,2125,2126],{},"平台",[1834,2128,2129],{},"编码器",[1834,2131,2132],{},"选择方式",[1844,2134,2135,2146,2156,2166,2176],{},[1831,2136,2137,2140,2143],{},[1849,2138,2139],{},"NVIDIA",[1849,2141,2142],{},"NVENC",[1849,2144,2145],{},"自动检测",[1831,2147,2148,2151,2154],{},[1849,2149,2150],{},"macOS",[1849,2152,2153],{},"VideoToolbox",[1849,2155,2145],{},[1831,2157,2158,2161,2164],{},[1849,2159,2160],{},"Linux",[1849,2162,2163],{},"VAAPI",[1849,2165,2145],{},[1831,2167,2168,2171,2174],{},[1849,2169,2170],{},"Intel",[1849,2172,2173],{},"QSV",[1849,2175,2145],{},[1831,2177,2178,2181,2184],{},[1849,2179,2180],{},"Windows 上的 AMD",[1849,2182,2183],{},"AMF",[1849,2185,2145],{},[692,2187,2188],{},"启用 GPU 编码时，Hyperframes 会自动检测可用的 FFmpeg 硬件编码器。要检查你的系统能力：",[701,2190,2192],{"className":703,"code":2191,"language":705,"meta":706,"style":706},"npx hyperframes doctor\n",[708,2193,2194],{"__ignoreMap":706},[711,2195,2196,2198,2200],{"class":713,"line":714},[711,2197,2023],{"class":717},[711,2199,2026],{"class":721},[711,2201,2202],{"class":721}," doctor\n",[692,2204,2205,2206,2209],{},"CLI 自动启用本地 Chrome\u002FWebGL GPU 捕获，并支持 ",[708,2207,2208],{},"--no-browser-gpu"," 作为退出选项。直接使用 producer API 时，传入引擎配置覆盖：",[701,2211,2213],{"className":884,"code":2212,"language":886,"meta":706,"style":706},"import { resolveConfig } from '@hyperframes\u002Fproducer';\n\nconst job = createRenderJob({\nfps: 30,\nquality: 'standard',\nproducerConfig: resolveConfig({ browserGpuMode: 'hardware' }),\n});\n",[708,2214,2215,2236,2240,2254,2264,2278,2309],{"__ignoreMap":706},[711,2216,2217,2219,2221,2224,2226,2228,2230,2232,2234],{"class":713,"line":714},[711,2218,894],{"class":893},[711,2220,898],{"class":897},[711,2222,2223],{"class":901}," resolveConfig",[711,2225,911],{"class":897},[711,2227,914],{"class":893},[711,2229,917],{"class":897},[711,2231,187],{"class":721},[711,2233,922],{"class":897},[711,2235,925],{"class":897},[711,2237,2238],{"class":713,"line":928},[711,2239,932],{"emptyLinePlaceholder":931},[711,2241,2242,2244,2246,2248,2250,2252],{"class":713,"line":935},[711,2243,939],{"class":938},[711,2245,942],{"class":901},[711,2247,945],{"class":897},[711,2249,902],{"class":948},[711,2251,951],{"class":901},[711,2253,954],{"class":897},[711,2255,2256,2258,2260,2262],{"class":713,"line":957},[711,2257,961],{"class":960},[711,2259,964],{"class":897},[711,2261,968],{"class":967},[711,2263,971],{"class":897},[711,2265,2266,2268,2270,2272,2274,2276],{"class":713,"line":974},[711,2267,977],{"class":960},[711,2269,964],{"class":897},[711,2271,917],{"class":897},[711,2273,984],{"class":721},[711,2275,922],{"class":897},[711,2277,971],{"class":897},[711,2279,2280,2283,2285,2287,2289,2291,2294,2296,2298,2301,2303,2305,2307],{"class":713,"line":991},[711,2281,2282],{"class":960},"producerConfig",[711,2284,964],{"class":897},[711,2286,2223],{"class":948},[711,2288,951],{"class":901},[711,2290,1806],{"class":897},[711,2292,2293],{"class":960}," browserGpuMode",[711,2295,964],{"class":897},[711,2297,917],{"class":897},[711,2299,2300],{"class":721},"hardware",[711,2302,922],{"class":897},[711,2304,911],{"class":897},[711,2306,997],{"class":901},[711,2308,971],{"class":897},[711,2310,2311,2313,2315],{"class":713,"line":1002},[711,2312,994],{"class":897},[711,2314,997],{"class":901},[711,2316,925],{"class":897},[727,2318,2319],{"id":2319},"附加导出",[692,2321,2322],{},"producer 还为了方便重新导出了关键的 engine 功能：",[1825,2324,2325,2334],{},[1828,2326,2327],{},[1831,2328,2329,2332],{},[1834,2330,2331],{},"导出",[1834,2333,1842],{},[1844,2335,2336,2346,2356,2370,2380,2390,2400,2410,2420,2433,2446,2456,2466],{},[1831,2337,2338,2343],{},[1849,2339,2340],{},[708,2341,2342],{},"createCaptureSession()",[1849,2344,2345],{},"创建帧捕获会话",[1831,2347,2348,2353],{},[1849,2349,2350],{},[708,2351,2352],{},"initializeSession()",[1849,2354,2355],{},"用合成初始化会话",[1831,2357,2358,2367],{},[1849,2359,2360,2363,2364],{},[708,2361,2362],{},"captureFrame()"," \u002F ",[708,2365,2366],{},"captureFrameToBuffer()",[1849,2368,2369],{},"捕获单个帧",[1831,2371,2372,2377],{},[1849,2373,2374],{},[708,2375,2376],{},"closeCaptureSession()",[1849,2378,2379],{},"清理捕获会话",[1831,2381,2382,2387],{},[1849,2383,2384],{},[708,2385,2386],{},"getCompositionDuration()",[1849,2388,2389],{},"获取总合成时长",[1831,2391,2392,2397],{},[1849,2393,2394],{},[708,2395,2396],{},"getCapturePerfSummary()",[1849,2398,2399],{},"获取捕获性能指标",[1831,2401,2402,2407],{},[1849,2403,2404],{},[708,2405,2406],{},"createFileServer()",[1849,2408,2409],{},"创建 HTTP 文件服务器以提供资源",[1831,2411,2412,2417],{},[1849,2413,2414],{},[708,2415,2416],{},"createVideoFrameInjector()",[1849,2418,2419],{},"为页面创建视频帧注入器",[1831,2421,2422,2430],{},[1849,2423,2424,2363,2427],{},[708,2425,2426],{},"resolveConfig()",[708,2428,2429],{},"DEFAULT_CONFIG",[1849,2431,2432],{},"Producer 配置",[1831,2434,2435,2443],{},[1849,2436,2437,2363,2440],{},[708,2438,2439],{},"createConsoleLogger()",[708,2441,2442],{},"defaultLogger",[1849,2444,2445],{},"日志工具",[1831,2447,2448,2453],{},[1849,2449,2450],{},[708,2451,2452],{},"quantizeTimeToFrame()",[1849,2454,2455],{},"将时间转换为帧边界",[1831,2457,2458,2463],{},[1849,2459,2460],{},[708,2461,2462],{},"resolveRenderPaths()",[1849,2464,2465],{},"解析渲染目录路径",[1831,2467,2468,2476],{},[1849,2469,2470,2363,2473],{},[708,2471,2472],{},"prepareHyperframeLintBody()",[708,2474,2475],{},"runHyperframeLint()",[1849,2477,2478],{},"Lint 工具",[727,2480,2481],{"id":2481},"日志",[692,2483,2484],{},"producer 提供了一个小型可插拔的日志记录器，调用者可以注入 Pino、Winston 或任何结构化后端，而无需对其进行依赖。",[701,2486,2490],{"className":2487,"code":2488,"language":2489,"meta":706,"style":706},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export type LogLevel = \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport interface ProducerLogger {\nerror(message: string, meta?: Record\u003Cstring, unknown>): void;\nwarn(message: string, meta?: Record\u003Cstring, unknown>): void;\ninfo(message: string, meta?: Record\u003Cstring, unknown>): void;\ndebug(message: string, meta?: Record\u003Cstring, unknown>): void;\nisLevelEnabled?(level: LogLevel): boolean;\n}\n","ts",[708,2491,2492,2541,2545,2557,2601,2635,2669,2703,2726],{"__ignoreMap":706},[711,2493,2494,2497,2499,2502,2504,2507,2510,2513,2516,2518,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539],{"class":713,"line":714},[711,2495,2496],{"class":893},"export",[711,2498,1521],{"class":938},[711,2500,2501],{"class":717}," LogLevel",[711,2503,1561],{"class":897},[711,2505,2506],{"class":897}," \"",[711,2508,2509],{"class":721},"error",[711,2511,2512],{"class":897},"\"",[711,2514,2515],{"class":897}," |",[711,2517,2506],{"class":897},[711,2519,2520],{"class":721},"warn",[711,2522,2512],{"class":897},[711,2524,2515],{"class":897},[711,2526,2506],{"class":897},[711,2528,2040],{"class":721},[711,2530,2512],{"class":897},[711,2532,2515],{"class":897},[711,2534,2506],{"class":897},[711,2536,1170],{"class":721},[711,2538,2512],{"class":897},[711,2540,925],{"class":897},[711,2542,2543],{"class":713,"line":928},[711,2544,932],{"emptyLinePlaceholder":931},[711,2546,2547,2549,2552,2555],{"class":713,"line":935},[711,2548,2496],{"class":893},[711,2550,2551],{"class":938}," interface",[711,2553,2554],{"class":717}," ProducerLogger",[711,2556,1580],{"class":897},[711,2558,2559,2561,2563,2566,2568,2571,2573,2576,2579,2582,2585,2588,2590,2593,2596,2599],{"class":713,"line":957},[711,2560,2509],{"class":960},[711,2562,951],{"class":897},[711,2564,2565],{"class":1567},"message",[711,2567,964],{"class":897},[711,2569,2570],{"class":717}," string",[711,2572,905],{"class":897},[711,2574,2575],{"class":1567}," meta",[711,2577,2578],{"class":897},"?:",[711,2580,2581],{"class":717}," Record",[711,2583,2584],{"class":897},"\u003C",[711,2586,2587],{"class":717},"string",[711,2589,905],{"class":897},[711,2591,2592],{"class":717}," unknown",[711,2594,2595],{"class":897},">):",[711,2597,2598],{"class":717}," void",[711,2600,925],{"class":897},[711,2602,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633],{"class":713,"line":974},[711,2604,2520],{"class":960},[711,2606,951],{"class":897},[711,2608,2565],{"class":1567},[711,2610,964],{"class":897},[711,2612,2570],{"class":717},[711,2614,905],{"class":897},[711,2616,2575],{"class":1567},[711,2618,2578],{"class":897},[711,2620,2581],{"class":717},[711,2622,2584],{"class":897},[711,2624,2587],{"class":717},[711,2626,905],{"class":897},[711,2628,2592],{"class":717},[711,2630,2595],{"class":897},[711,2632,2598],{"class":717},[711,2634,925],{"class":897},[711,2636,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667],{"class":713,"line":991},[711,2638,2040],{"class":960},[711,2640,951],{"class":897},[711,2642,2565],{"class":1567},[711,2644,964],{"class":897},[711,2646,2570],{"class":717},[711,2648,905],{"class":897},[711,2650,2575],{"class":1567},[711,2652,2578],{"class":897},[711,2654,2581],{"class":717},[711,2656,2584],{"class":897},[711,2658,2587],{"class":717},[711,2660,905],{"class":897},[711,2662,2592],{"class":717},[711,2664,2595],{"class":897},[711,2666,2598],{"class":717},[711,2668,925],{"class":897},[711,2670,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701],{"class":713,"line":1002},[711,2672,1170],{"class":960},[711,2674,951],{"class":897},[711,2676,2565],{"class":1567},[711,2678,964],{"class":897},[711,2680,2570],{"class":717},[711,2682,905],{"class":897},[711,2684,2575],{"class":1567},[711,2686,2578],{"class":897},[711,2688,2581],{"class":717},[711,2690,2584],{"class":897},[711,2692,2587],{"class":717},[711,2694,905],{"class":897},[711,2696,2592],{"class":717},[711,2698,2595],{"class":897},[711,2700,2598],{"class":717},[711,2702,925],{"class":897},[711,2704,2705,2708,2711,2714,2716,2718,2721,2724],{"class":713,"line":1007},[711,2706,2707],{"class":960},"isLevelEnabled",[711,2709,2710],{"class":897},"?(",[711,2712,2713],{"class":1567},"level",[711,2715,964],{"class":897},[711,2717,2501],{"class":717},[711,2719,2720],{"class":897},"):",[711,2722,2723],{"class":717}," boolean",[711,2725,925],{"class":897},[711,2727,2728],{"class":713,"line":1167},[711,2729,1753],{"class":897},[692,2731,2732,2735,2736,2739,2740,2742,2743,2746],{},[708,2733,2734],{},"createConsoleLogger(level)"," 返回一个基于控制台的实现，按级别过滤并对可选的 ",[708,2737,2738],{},"meta"," 对象进行 JSON 序列化。",[708,2741,2442],{}," 是 ",[708,2744,2745],{},"level=\"info\""," 的单例。",[814,2748,2749],{"id":2749},"在热路径中跳过昂贵的元数据构建",[692,2751,2752,2754,2755,2758,2759,2762],{},[708,2753,2707],{}," 是",[733,2756,2757],{},"可选的","，这样现有的自定义日志记录器可以继续正常工作。当你在热循环中构建一个非平凡的 meta 对象只是为了附加到调试日志时，使用空值合并模式来保护构造过程，这样生产运行（",[708,2760,2761],{},"level=info","）不会产生任何开销，而没有此方法的日志记录器行为完全不变：",[701,2764,2766],{"className":2487,"code":2765,"language":2489,"meta":706,"style":706},"\u002F\u002F 在编码管道的每帧循环中：\nif (i % 30 === 0 && (log.isLevelEnabled?.(\"debug\") ?? true)) {\nconst hdrEl = stackingInfo.find((e) => e.isHdr);\nlog.debug(\"[Render] HDR layer composite frame\", {\nframe: i,\nime: time.toFixed(2),\nhdrElement: hdrEl\n? { z: hdrEl.zIndex, visible: hdrEl.visible, width: hdrEl.width }\n: null,\nstackingCount: stackingInfo.length,\nactiveTransition: activeTransition?.shader,\n});\n}\n",[708,2767,2768,2773,2824,2864,2885,2897,2921,2931,2981,2988,3004,3022,3031],{"__ignoreMap":706},[711,2769,2770],{"class":713,"line":714},[711,2771,2772],{"class":1096},"\u002F\u002F 在编码管道的每帧循环中：\n",[711,2774,2775,2777,2780,2783,2785,2788,2791,2794,2797,2799,2801,2804,2806,2808,2810,2812,2814,2817,2819,2822],{"class":713,"line":928},[711,2776,1698],{"class":893},[711,2778,2779],{"class":901}," (i ",[711,2781,2782],{"class":897},"%",[711,2784,968],{"class":967},[711,2786,2787],{"class":897}," ===",[711,2789,2790],{"class":967}," 0",[711,2792,2793],{"class":897}," &&",[711,2795,2796],{"class":901}," (log",[711,2798,1588],{"class":897},[711,2800,2707],{"class":948},[711,2802,2803],{"class":897},"?.",[711,2805,951],{"class":901},[711,2807,2512],{"class":897},[711,2809,1170],{"class":721},[711,2811,2512],{"class":897},[711,2813,1711],{"class":901},[711,2815,2816],{"class":897},"??",[711,2818,1401],{"class":1158},[711,2820,2821],{"class":901},")) ",[711,2823,954],{"class":897},[711,2825,2826,2828,2831,2833,2836,2838,2841,2843,2845,2848,2850,2852,2855,2857,2860,2862],{"class":713,"line":935},[711,2827,939],{"class":938},[711,2829,2830],{"class":901}," hdrEl",[711,2832,1561],{"class":897},[711,2834,2835],{"class":901}," stackingInfo",[711,2837,1588],{"class":897},[711,2839,2840],{"class":948},"find",[711,2842,951],{"class":960},[711,2844,951],{"class":897},[711,2846,2847],{"class":1567},"e",[711,2849,997],{"class":897},[711,2851,1577],{"class":938},[711,2853,2854],{"class":901}," e",[711,2856,1588],{"class":897},[711,2858,2859],{"class":901},"isHdr",[711,2861,997],{"class":960},[711,2863,925],{"class":897},[711,2865,2866,2868,2870,2872,2874,2876,2879,2881,2883],{"class":713,"line":957},[711,2867,1591],{"class":901},[711,2869,1588],{"class":897},[711,2871,1170],{"class":948},[711,2873,951],{"class":960},[711,2875,2512],{"class":897},[711,2877,2878],{"class":721},"[Render] HDR layer composite frame",[711,2880,2512],{"class":897},[711,2882,905],{"class":897},[711,2884,1580],{"class":897},[711,2886,2887,2890,2892,2895],{"class":713,"line":974},[711,2888,2889],{"class":960},"frame",[711,2891,964],{"class":897},[711,2893,2894],{"class":901}," i",[711,2896,971],{"class":897},[711,2898,2899,2902,2904,2907,2909,2912,2914,2917,2919],{"class":713,"line":991},[711,2900,2901],{"class":960},"ime",[711,2903,964],{"class":897},[711,2905,2906],{"class":901}," time",[711,2908,1588],{"class":897},[711,2910,2911],{"class":948},"toFixed",[711,2913,951],{"class":960},[711,2915,2916],{"class":967},"2",[711,2918,997],{"class":960},[711,2920,971],{"class":897},[711,2922,2923,2926,2928],{"class":713,"line":1002},[711,2924,2925],{"class":960},"hdrElement",[711,2927,964],{"class":897},[711,2929,2930],{"class":901}," hdrEl\n",[711,2932,2933,2936,2938,2941,2943,2945,2947,2950,2952,2955,2957,2959,2961,2964,2966,2969,2971,2973,2975,2978],{"class":713,"line":1007},[711,2934,2935],{"class":897},"?",[711,2937,898],{"class":897},[711,2939,2940],{"class":960}," z",[711,2942,964],{"class":897},[711,2944,2830],{"class":901},[711,2946,1588],{"class":897},[711,2948,2949],{"class":901},"zIndex",[711,2951,905],{"class":897},[711,2953,2954],{"class":960}," visible",[711,2956,964],{"class":897},[711,2958,2830],{"class":901},[711,2960,1588],{"class":897},[711,2962,2963],{"class":901},"visible",[711,2965,905],{"class":897},[711,2967,2968],{"class":960}," width",[711,2970,964],{"class":897},[711,2972,2830],{"class":901},[711,2974,1588],{"class":897},[711,2976,2977],{"class":901},"width",[711,2979,2980],{"class":897}," }\n",[711,2982,2983,2985],{"class":713,"line":1167},[711,2984,964],{"class":897},[711,2986,2987],{"class":897}," null,\n",[711,2989,2990,2993,2995,2997,2999,3002],{"class":713,"line":1182},[711,2991,2992],{"class":960},"stackingCount",[711,2994,964],{"class":897},[711,2996,2835],{"class":901},[711,2998,1588],{"class":897},[711,3000,3001],{"class":901},"length",[711,3003,971],{"class":897},[711,3005,3007,3010,3012,3015,3017,3020],{"class":713,"line":3006},11,[711,3008,3009],{"class":960},"activeTransition",[711,3011,964],{"class":897},[711,3013,3014],{"class":901}," activeTransition",[711,3016,2803],{"class":897},[711,3018,3019],{"class":901},"shader",[711,3021,971],{"class":897},[711,3023,3025,3027,3029],{"class":713,"line":3024},12,[711,3026,994],{"class":897},[711,3028,997],{"class":960},[711,3030,925],{"class":897},[711,3032,3034],{"class":713,"line":3033},13,[711,3035,1753],{"class":897},[692,3037,3038,3041,3042,3044],{},[708,3039,3040],{},"?? true"," 回退意味着使用未实现 ",[708,3043,2707],{}," 的自定义日志记录器的调用者继续构建和传递 meta 对象 — 此优化是日志记录器实现的可选功能。",[727,3046,3047],{"id":3047},"回归测试",[692,3049,3050],{},"producer 包含一个回归测试工具，用于将渲染输出与黄金基线进行比较。这在更改运行时、engine 或渲染管道时捕获视觉回归非常有用。",[701,3052,3054],{"className":703,"code":3053,"language":705,"meta":706,"style":706},"cd packages\u002Fproducer\n\n# 构建测试 Docker 镜像\nbun run docker:build:test\n\n# 运行回归测试（将输出与黄金基线进行比较）\nbun run docker:test\n\n# 在有意更改后重新生成黄金基线\nbun run docker:test:update\n",[708,3055,3056,3064,3068,3073,3084,3088,3093,3102,3106,3111],{"__ignoreMap":706},[711,3057,3058,3061],{"class":713,"line":714},[711,3059,3060],{"class":948},"cd",[711,3062,3063],{"class":721}," packages\u002Fproducer\n",[711,3065,3066],{"class":713,"line":928},[711,3067,932],{"emptyLinePlaceholder":931},[711,3069,3070],{"class":713,"line":935},[711,3071,3072],{"class":1096},"# 构建测试 Docker 镜像\n",[711,3074,3075,3078,3081],{"class":713,"line":957},[711,3076,3077],{"class":717},"bun",[711,3079,3080],{"class":721}," run",[711,3082,3083],{"class":721}," docker:build:test\n",[711,3085,3086],{"class":713,"line":974},[711,3087,932],{"emptyLinePlaceholder":931},[711,3089,3090],{"class":713,"line":991},[711,3091,3092],{"class":1096},"# 运行回归测试（将输出与黄金基线进行比较）\n",[711,3094,3095,3097,3099],{"class":713,"line":1002},[711,3096,3077],{"class":717},[711,3098,3080],{"class":721},[711,3100,3101],{"class":721}," docker:test\n",[711,3103,3104],{"class":713,"line":1007},[711,3105,932],{"emptyLinePlaceholder":931},[711,3107,3108],{"class":713,"line":1167},[711,3109,3110],{"class":1096},"# 在有意更改后重新生成黄金基线\n",[711,3112,3113,3115,3117],{"class":713,"line":1182},[711,3114,3077],{"class":717},[711,3116,3080],{"class":721},[711,3118,3119],{"class":721}," docker:test:update\n",[727,3121,3122],{"id":3122},"基准测试",[692,3124,3125],{},"为你的硬件找到最优的渲染设置：",[701,3127,3129],{"className":703,"code":3128,"language":705,"meta":706,"style":706},"# 通过 CLI\nnpx hyperframes benchmark\n\n# 直接从 producer 包\ncd packages\u002Fproducer\nbun run benchmark\n",[708,3130,3131,3136,3145,3149,3154,3160],{"__ignoreMap":706},[711,3132,3133],{"class":713,"line":714},[711,3134,3135],{"class":1096},"# 通过 CLI\n",[711,3137,3138,3140,3142],{"class":713,"line":928},[711,3139,2023],{"class":717},[711,3141,2026],{"class":721},[711,3143,3144],{"class":721}," benchmark\n",[711,3146,3147],{"class":713,"line":935},[711,3148,932],{"emptyLinePlaceholder":931},[711,3150,3151],{"class":713,"line":957},[711,3152,3153],{"class":1096},"# 直接从 producer 包\n",[711,3155,3156,3158],{"class":713,"line":974},[711,3157,3060],{"class":948},[711,3159,3063],{"class":721},[711,3161,3162,3164,3166],{"class":713,"line":991},[711,3163,3077],{"class":717},[711,3165,3080],{"class":721},[711,3167,3144],{"class":721},[692,3169,3170],{},"基准测试使用不同的质量和 FPS 设置运行多个合成，并报告每种组合的耗时。",[727,3172,3174,3175,3178],{"id":3173},"外部资源projectdir-外的文件","外部资源（",[708,3176,3177],{},"projectDir"," 外的文件）",[692,3180,3181,3182,3185],{},"合成可以引用项目目录之外的资源绝对路径 — ",[708,3183,3184],{},"~\u002FDownloads"," 中的本地旁白、共享驱动器上的图片、绝对路径上的生成 fixture。producer 通过以下方式处理这些资源：",[3187,3188,3189,3216,3238],"ol",{},[743,3190,3191,3194,3195,2363,3198,841,3201,3204,3205,3208,3209,3211,3212,3215],{},[733,3192,3193],{},"检测。"," 在编译期间，HTML 编译器遍历每个 ",[708,3196,3197],{},"[src]",[708,3199,3200],{},"[href]",[708,3202,3203],{},"\u003Cstyle>"," 中的每个 ",[708,3206,3207],{},"url(...)","。解析到 ",[708,3210,3177],{}," 之外文件的路径被收集到 ",[708,3213,3214],{},"externalAssets"," 映射中。",[743,3217,3218,3221,3222,3225,3226,3229,3230,3233,3234,3237],{},[733,3219,3220],{},"清理的键名。"," 每个绝对路径被转换为安全的、跨平台的相对键名，前缀为 ",[708,3223,3224],{},"hf-ext\u002F","。Windows 驱动器字母冒号被去除（",[708,3227,3228],{},"D:\\foo\\x.wav"," → ",[708,3231,3232],{},"hf-ext\u002FD\u002Ffoo\u002Fx.wav","），这样 ",[708,3235,3236],{},"path.join(compileDir, key)"," 在每个操作系统上都保持在编译目录内。",[743,3239,3240,3243,3244,3247],{},[733,3241,3242],{},"复制 + 重写。"," 编排器将文件复制到 ",[708,3245,3246],{},"\u003CcompileDir>\u002Fhf-ext\u002F..."," 下，HTML 被重写为指向清理后的键名。文件服务器随后从同一根目录提供项目内部和外部资源。",[692,3249,3250,3251,3254,3255,3258],{},"包含性检查使用 ",[708,3252,3253],{},"path.relative()"," 而非硬编码的分隔符，因此外部资源在 macOS、Linux 和 Windows 上的行为完全相同。参见 ",[708,3256,3257],{},"packages\u002Fproducer\u002Fsrc\u002Futils\u002Fpaths.ts"," 了解辅助函数。",[727,3260,3261],{"id":3261},"相关包",[740,3263,3264,3271,3279,3287],{},[743,3265,3266,3270],{},[733,3267,3268],{},[696,3269,195],{"href":196},"\n命令行界面，封装了 producer 用于渲染、预览等功能。",[743,3272,3273,3278],{},[733,3274,3275],{},[696,3276,3277],{"href":180},"Engine","\nproducer 用于抓取帧的底层捕获管道。",[743,3280,3281,3286],{},[733,3282,3283],{},[696,3284,3285],{"href":176},"Core","\nproducer 所依赖的类型、运行时和 Linter。",[743,3288,3289,3294],{},[733,3290,3291],{},[696,3292,3293],{"href":192},"Studio","\n在使用 producer 渲染之前构建合成的可视化编辑器。",[3296,3297,3298],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":706,"searchDepth":714,"depth":928,"links":3300},[3301,3302,3310,3315,3318,3319,3320,3321,3322,3325,3326,3327,3329],{"id":729,"depth":928,"text":729},{"id":809,"depth":928,"text":809,"children":3303},[3304,3305,3306,3307,3308,3309],{"id":816,"depth":935,"text":817},{"id":827,"depth":935,"text":828},{"id":834,"depth":935,"text":834},{"id":848,"depth":935,"text":849},{"id":858,"depth":935,"text":859},{"id":865,"depth":935,"text":865},{"id":878,"depth":928,"text":878,"children":3311},[3312,3313,3314],{"id":1040,"depth":935,"text":1040},{"id":1509,"depth":935,"text":1509},{"id":1629,"depth":935,"text":1629},{"id":1760,"depth":928,"text":1761,"children":3316},[3317],{"id":1823,"depth":935,"text":1823},{"id":2004,"depth":928,"text":2005},{"id":2045,"depth":928,"text":2045},{"id":2113,"depth":928,"text":2114},{"id":2319,"depth":928,"text":2319},{"id":2481,"depth":928,"text":2481,"children":3323},[3324],{"id":2749,"depth":935,"text":2749},{"id":3047,"depth":928,"text":3047},{"id":3122,"depth":928,"text":3122},{"id":3173,"depth":928,"text":3328},"外部资源（projectDir 外的文件）",{"id":3261,"depth":928,"text":3261},"完整的 HTML 到视频渲染管道，支持编码、音频混音和 Docker。","md",null,{},{"title":187,"description":3330},"UIMnG4iiJOlahpFwS7LyYm8FDu0KOMDuhNQmrCpQdSg",[3337,3339],{"title":183,"path":184,"stem":185,"description":3338,"children":-1},"可嵌入的 Web 组件，用于在任何网页中播放 HyperFrames 合成。",{"title":191,"path":192,"stem":193,"description":3340,"children":-1},"可视化合成编辑器，支持实时预览、时间轴视图和热重载。",1780322245085]