@mevdragon/vidfarm-devcli 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/embedded-captions/CATALOG.md +93 -0
- package/.agents/skills/embedded-captions/SKILL.md +286 -0
- package/.agents/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
- package/.agents/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
- package/.agents/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/.agents/skills/embedded-captions/dna/README.md +148 -0
- package/.agents/skills/embedded-captions/dna/chrome.json +68 -0
- package/.agents/skills/embedded-captions/dna/cream.json +69 -0
- package/.agents/skills/embedded-captions/dna/documentary.json +62 -0
- package/.agents/skills/embedded-captions/dna/editorial.json +70 -0
- package/.agents/skills/embedded-captions/dna/glitch.json +82 -0
- package/.agents/skills/embedded-captions/dna/ink.json +65 -0
- package/.agents/skills/embedded-captions/dna/keynote.json +62 -0
- package/.agents/skills/embedded-captions/dna/loud.json +75 -0
- package/.agents/skills/embedded-captions/dna/neon.json +58 -0
- package/.agents/skills/embedded-captions/dna/velocity.json +89 -0
- package/.agents/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/.agents/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/.agents/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
- package/.agents/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/.agents/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
- package/.agents/skills/embedded-captions/references/aesthetic-principles.md +168 -0
- package/.agents/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/.agents/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/.agents/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/.agents/skills/embedded-captions/references/composition-craft.md +522 -0
- package/.agents/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/.agents/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/.agents/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/.agents/skills/embedded-captions/references/failure-modes.md +145 -0
- package/.agents/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/.agents/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/.agents/skills/embedded-captions/references/rail.md +68 -0
- package/.agents/skills/embedded-captions/references/reference-bar.md +47 -0
- package/.agents/skills/embedded-captions/references/scene-types.md +94 -0
- package/.agents/skills/embedded-captions/references/test-set.md +66 -0
- package/.agents/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/.agents/skills/embedded-captions/references/typography-presets.md +63 -0
- package/.agents/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
- package/.agents/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
- package/.agents/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
- package/.agents/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
- package/.agents/skills/embedded-captions/scripts/check-timing.cjs +173 -0
- package/.agents/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
- package/.agents/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
- package/.agents/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
- package/.agents/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
- package/.agents/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
- package/.agents/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
- package/.agents/skills/embedded-captions/scripts/make-composition.cjs +404 -0
- package/.agents/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
- package/.agents/skills/embedded-captions/scripts/matte.cjs +294 -0
- package/.agents/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
- package/.agents/skills/embedded-captions/scripts/prepare.sh +39 -0
- package/.agents/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
- package/.agents/skills/embedded-captions/scripts/render-and-composite.sh +509 -0
- package/.agents/skills/embedded-captions/scripts/render-theme.sh +34 -0
- package/.agents/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
- package/.agents/skills/embedded-captions/scripts/transcribe.cjs +349 -0
- package/.agents/skills/embedded-captions/themes/PORTING.md +49 -0
- package/.agents/skills/embedded-captions/themes/README.md +244 -0
- package/.agents/skills/embedded-captions/themes/anchor.json +27 -0
- package/.agents/skills/embedded-captions/themes/arcade.json +51 -0
- package/.agents/skills/embedded-captions/themes/aurora.json +41 -0
- package/.agents/skills/embedded-captions/themes/biolume.json +35 -0
- package/.agents/skills/embedded-captions/themes/brush.json +74 -0
- package/.agents/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/.agents/skills/embedded-captions/themes/dossier.json +56 -0
- package/.agents/skills/embedded-captions/themes/graffiti.json +62 -0
- package/.agents/skills/embedded-captions/themes/hologram.json +41 -0
- package/.agents/skills/embedded-captions/themes/inkwater.json +43 -0
- package/.agents/skills/embedded-captions/themes/laser.json +46 -0
- package/.agents/skills/embedded-captions/themes/lastpage.json +33 -0
- package/.agents/skills/embedded-captions/themes/neonsign.json +53 -0
- package/.agents/skills/embedded-captions/themes/nightcity.json +56 -0
- package/.agents/skills/embedded-captions/themes/ordnance.json +54 -0
- package/.agents/skills/embedded-captions/themes/papercut.json +37 -0
- package/.agents/skills/embedded-captions/themes/popup.json +46 -0
- package/.agents/skills/embedded-captions/themes/ransom.json +62 -0
- package/.agents/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/.agents/skills/embedded-captions/themes/spectrum.json +46 -0
- package/.agents/skills/embedded-captions/themes/stardust.json +29 -0
- package/.agents/skills/embedded-captions/themes/stomp.json +43 -0
- package/.agents/skills/embedded-captions/themes/terminal.json +49 -0
- package/.agents/skills/embedded-captions/themes/thunder.json +44 -0
- package/.agents/skills/embedded-captions/themes/transit.json +44 -0
- package/.agents/skills/embedded-captions/themes/vhs.json +47 -0
- package/.agents/skills/faceless-explainer/SKILL.md +209 -0
- package/.agents/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/.agents/skills/faceless-explainer/references/motion-language.md +156 -0
- package/.agents/skills/faceless-explainer/references/story-design.md +248 -0
- package/.agents/skills/faceless-explainer/references/visual-design.md +146 -0
- package/.agents/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
- package/.agents/skills/faceless-explainer/scripts/audio.mjs +260 -0
- package/.agents/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
- package/.agents/skills/faceless-explainer/scripts/captions.mjs +508 -0
- package/.agents/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
- package/.agents/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
- package/.agents/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
- package/.agents/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
- package/.agents/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
- package/.agents/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
- package/.agents/skills/faceless-explainer/scripts/transitions.mjs +320 -0
- package/.agents/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
- package/.agents/skills/flockposter/LICENSE +17 -0
- package/.agents/skills/flockposter/README.md +72 -0
- package/.agents/skills/flockposter/SKILL.md +562 -0
- package/.agents/skills/flockposter/examples/cli-instagram-reel.sh +21 -0
- package/.agents/skills/flockposter/examples/cli-multi-platform.json +69 -0
- package/.agents/skills/flockposter/examples/cli-tiktok-upload-only.sh +22 -0
- package/.agents/skills/flockposter/examples/cli-x-thread.sh +17 -0
- package/.agents/skills/flockposter/examples/cli-youtube-short.sh +21 -0
- package/.agents/skills/flockposter/examples/public-api-instagram-reel.json +28 -0
- package/.agents/skills/general-video/SKILL.md +143 -0
- package/.agents/skills/hyperframes/SKILL.md +160 -0
- package/.agents/skills/hyperframes-animation/SKILL.md +84 -0
- package/.agents/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/.agents/skills/hyperframes-animation/adapters/animejs.md +114 -0
- package/.agents/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/.agents/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/.agents/skills/hyperframes-animation/adapters/lottie.md +117 -0
- package/.agents/skills/hyperframes-animation/adapters/three.md +131 -0
- package/.agents/skills/hyperframes-animation/adapters/typegpu.md +178 -0
- package/.agents/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/.agents/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/.agents/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
- package/.agents/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
- package/.agents/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
- package/.agents/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
- package/.agents/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
- package/.agents/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
- package/.agents/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
- package/.agents/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
- package/.agents/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
- package/.agents/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/.agents/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/.agents/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
- package/.agents/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/.agents/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/.agents/skills/hyperframes-animation/blueprints-index.md +146 -0
- package/.agents/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/.agents/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/.agents/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/.agents/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/.agents/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/.agents/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/.agents/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/.agents/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/.agents/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/.agents/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/.agents/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/.agents/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/.agents/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/.agents/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
- package/.agents/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
- package/.agents/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
- package/.agents/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
- package/.agents/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
- package/.agents/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
- package/.agents/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
- package/.agents/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
- package/.agents/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
- package/.agents/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
- package/.agents/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
- package/.agents/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
- package/.agents/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
- package/.agents/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
- package/.agents/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
- package/.agents/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
- package/.agents/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
- package/.agents/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
- package/.agents/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
- package/.agents/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
- package/.agents/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
- package/.agents/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
- package/.agents/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
- package/.agents/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
- package/.agents/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
- package/.agents/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
- package/.agents/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
- package/.agents/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
- package/.agents/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
- package/.agents/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
- package/.agents/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
- package/.agents/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
- package/.agents/skills/hyperframes-animation/rules/viewport-change.md +349 -0
- package/.agents/skills/hyperframes-animation/rules-index.md +86 -0
- package/.agents/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
- package/.agents/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
- package/.agents/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
- package/.agents/skills/hyperframes-animation/techniques.md +507 -0
- package/.agents/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
- package/.agents/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/.agents/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/.agents/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/.agents/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/.agents/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/.agents/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/.agents/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/.agents/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/.agents/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/.agents/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/.agents/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/.agents/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/.agents/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/.agents/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/.agents/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/.agents/skills/hyperframes-cli/SKILL.md +113 -0
- package/.agents/skills/hyperframes-cli/references/doctor-browser.md +45 -0
- package/.agents/skills/hyperframes-cli/references/init-and-scaffold.md +55 -0
- package/.agents/skills/hyperframes-cli/references/lambda.md +132 -0
- package/.agents/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
- package/.agents/skills/hyperframes-cli/references/preview-render.md +149 -0
- package/.agents/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
- package/.agents/skills/hyperframes-core/SKILL.md +78 -0
- package/.agents/skills/hyperframes-core/references/composition-patterns.md +263 -0
- package/.agents/skills/hyperframes-core/references/data-attributes.md +70 -0
- package/.agents/skills/hyperframes-core/references/determinism-rules.md +68 -0
- package/.agents/skills/hyperframes-core/references/full-screen-motion.md +62 -0
- package/.agents/skills/hyperframes-core/references/minimal-composition.md +66 -0
- package/.agents/skills/hyperframes-core/references/script-format.md +49 -0
- package/.agents/skills/hyperframes-core/references/storyboard-format.md +95 -0
- package/.agents/skills/hyperframes-core/references/sub-compositions.md +237 -0
- package/.agents/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
- package/.agents/skills/hyperframes-core/references/tailwind.md +125 -0
- package/.agents/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
- package/.agents/skills/hyperframes-core/references/variables-and-media.md +90 -0
- package/.agents/skills/hyperframes-creative/SKILL.md +70 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/.agents/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/.agents/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/.agents/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/.agents/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/.agents/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/.agents/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/.agents/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/.agents/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/.agents/skills/hyperframes-creative/references/house-style.md +73 -0
- package/.agents/skills/hyperframes-creative/references/motion-principles.md +150 -0
- package/.agents/skills/hyperframes-creative/references/narration.md +92 -0
- package/.agents/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/.agents/skills/hyperframes-creative/references/typography.md +218 -0
- package/.agents/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/.agents/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/.agents/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
- package/.agents/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
- package/.agents/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
- package/.agents/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
- package/.agents/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/.agents/skills/hyperframes-keyframes/SKILL.md +237 -0
- package/.agents/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/.agents/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
- package/.agents/skills/motion-graphics/SKILL.md +172 -0
- package/.agents/skills/motion-graphics/agents/builder.md +40 -0
- package/.agents/skills/motion-graphics/agents/director.md +53 -0
- package/.agents/skills/motion-graphics/agents/finalize.md +17 -0
- package/.agents/skills/motion-graphics/catalog-map.md +40 -0
- package/.agents/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/.agents/skills/motion-graphics/categories/charts/module.md +21 -0
- package/.agents/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/.agents/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/.agents/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
- package/.agents/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
- package/.agents/skills/motion-graphics/categories/maps/module.md +61 -0
- package/.agents/skills/motion-graphics/categories/news/module.md +56 -0
- package/.agents/skills/motion-graphics/categories/stat/module.md +21 -0
- package/.agents/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/.agents/skills/motion-graphics/categories/webpage/module.md +21 -0
- package/.agents/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/.agents/skills/motion-graphics/grounding/locate.mjs +227 -0
- package/.agents/skills/motion-graphics/phases/source/guide.md +21 -0
- package/.agents/skills/motion-graphics/references/builder-contract.md +38 -0
- package/.agents/skills/motion-graphics/references/motion-vocabulary.md +43 -0
- package/.agents/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/.agents/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/.agents/skills/product-launch-video/SKILL.md +208 -0
- package/.agents/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/.agents/skills/product-launch-video/references/motion-language.md +156 -0
- package/.agents/skills/product-launch-video/references/story-design.md +373 -0
- package/.agents/skills/product-launch-video/references/visual-design.md +126 -0
- package/.agents/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
- package/.agents/skills/product-launch-video/scripts/audio.mjs +260 -0
- package/.agents/skills/product-launch-video/scripts/build-frame.mjs +536 -0
- package/.agents/skills/product-launch-video/scripts/captions.mjs +508 -0
- package/.agents/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
- package/.agents/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
- package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
- package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
- package/.agents/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
- package/.agents/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
- package/.agents/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
- package/.agents/skills/product-launch-video/scripts/lib/transitions.json +71 -0
- package/.agents/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
- package/.agents/skills/product-launch-video/scripts/transitions.mjs +327 -0
- package/.agents/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
- package/.agents/skills/slideshow/SKILL.md +550 -0
- package/.agents/skills/slideshow/references/standalone-harness.md +1020 -0
- package/.agents/skills/talking-head-recut/NOTICE.md +39 -0
- package/.agents/skills/talking-head-recut/SKILL.md +1195 -0
- package/.agents/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
- package/.agents/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/.agents/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/.agents/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/.agents/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/.agents/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/.agents/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/.agents/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/.agents/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/.agents/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/.agents/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/.agents/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/.agents/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/.agents/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/.agents/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/.agents/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/.agents/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/.agents/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/.agents/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/.agents/skills/vidfarm-media/SKILL.md +85 -0
- package/.agents/skills/vidfarm-media/references/tts.md +54 -0
- package/.agents/skills/vidfarm-media/scripts/audio.mjs +628 -0
- package/.agents/skills/vidfarm-media/scripts/wait-bgm.mjs +31 -0
- package/.agents/skills/website-to-video/SKILL.md +145 -0
- package/.agents/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
- package/.agents/skills/website-to-video/assets/sfx/manifest.json +97 -0
- package/.agents/skills/website-to-video/references/beat-builder-guide.md +263 -0
- package/.agents/skills/website-to-video/references/capabilities.md +713 -0
- package/.agents/skills/website-to-video/references/step-0-capture.md +55 -0
- package/.agents/skills/website-to-video/references/step-1-design.md +333 -0
- package/.agents/skills/website-to-video/references/step-2-brief.md +178 -0
- package/.agents/skills/website-to-video/references/step-3-storyboard.md +572 -0
- package/.agents/skills/website-to-video/references/step-4-vo.md +225 -0
- package/.agents/skills/website-to-video/references/step-5-build.md +483 -0
- package/.agents/skills/website-to-video/references/step-6-validate.md +341 -0
- package/.agents/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
- package/SKILL.director.md +60 -4
- package/SKILL.platform.md +7 -2
- package/demo/dist/app.css +1 -1
- package/demo/dist/app.js +485 -86
- package/dist/src/account-pages-legacy.js +9 -14
- package/dist/src/app.js +659 -159
- package/dist/src/cli.js +618 -17
- package/dist/src/composition-runtime.js +286 -6
- package/dist/src/devcli/composition-edit.js +176 -8
- package/dist/src/devcli/doctor.js +192 -0
- package/dist/src/devcli/hyperframes-cli.js +118 -0
- package/dist/src/devcli/skills.js +476 -0
- package/dist/src/devcli/stills.js +249 -0
- package/dist/src/devcli/transitions.js +205 -0
- package/dist/src/editor-chat.js +260 -4
- package/dist/src/frontend/template-editor-chat.js +6 -5
- package/dist/src/homepage.js +2 -48
- package/dist/src/hyperframes/composition.js +188 -7
- package/dist/src/services/composition-lint.js +199 -0
- package/dist/src/services/hyperframes.js +127 -28
- package/dist/src/services/serverless-records.js +7 -0
- package/dist/src/template-editor-shell.js +87 -48
- package/package.json +2 -1
- package/public/assets/page-runtime-client-app.js +31 -31
|
@@ -13,7 +13,7 @@ import ffprobeStatic from "ffprobe-static";
|
|
|
13
13
|
import { parseHTML } from "linkedom";
|
|
14
14
|
import { config } from "../config.js";
|
|
15
15
|
import { devErrorFields, devLog } from "../lib/dev-log.js";
|
|
16
|
-
import { CAPTION_ANIM_CSS, CAPTION_STYLE_MARKER, KEN_BURNS_CSS, KEN_BURNS_STYLE_MARKER, TRANSITION_ADJACENCY_EPSILON, TRANSITION_CSS, TRANSITION_PRESETS, TRANSITION_STYLE_MARKER, buildHyperframeCompositionHtml, clampTransitionDuration } from "../hyperframes/composition.js";
|
|
16
|
+
import { CAPTION_ANIM_CSS, CAPTION_STYLE_MARKER, KEN_BURNS_CSS, KEN_BURNS_STYLE_MARKER, LEGACY_TRANSITION_CSS_V1, TRANSITION_ADJACENCY_EPSILON, TRANSITION_CSS, TRANSITION_OUT_PRESETS, TRANSITION_PRESETS, TRANSITION_STYLE_MARKER, buildHyperframeCompositionHtml, clampTransitionDuration, transitionOutDelaySeconds } from "../hyperframes/composition.js";
|
|
17
17
|
import { applyMarkupUsd } from "./billing-pricing.js";
|
|
18
18
|
// The scene-annotation pass reuses the clip library's controlled vocabulary and
|
|
19
19
|
// embedding-text recipe verbatim so a source scene's clip-match query is
|
|
@@ -65,6 +65,13 @@ function shouldRenderLocally() {
|
|
|
65
65
|
(config.HYPERFRAMES_RENDER_BUCKET_NAME || config.HYPERFRAMES_LAMBDA_BUCKET_NAME));
|
|
66
66
|
return !hasCloudStack;
|
|
67
67
|
}
|
|
68
|
+
// The bundled producer/aws-lambda libraries embed upstream-vendor doc links in
|
|
69
|
+
// some error messages (font resolution, large-variables). Those URLs surface in
|
|
70
|
+
// job logs and the export modal, so rewrite them to vidfarm's docs before the
|
|
71
|
+
// message leaves the render layer.
|
|
72
|
+
function scrubVendorDocLinks(text) {
|
|
73
|
+
return text.replace(/https?:\/\/[a-z0-9.-]*heygen\.com[^\s"')\]]*/gi, "https://vidfarm.cc/skill/vidfarm-director");
|
|
74
|
+
}
|
|
68
75
|
export class HyperframesService {
|
|
69
76
|
async render(input) {
|
|
70
77
|
const compositionHtml = normalizePublishHtml(input.compositionHtml || (input.composition ? buildHyperframeCompositionHtml(input.composition) : ""));
|
|
@@ -205,7 +212,7 @@ export class HyperframesService {
|
|
|
205
212
|
duration_ms: Date.now() - startedAtMs,
|
|
206
213
|
errors: Array.isArray(progress.errors) ? progress.errors.slice(0, 3) : progress.errors
|
|
207
214
|
}, "error");
|
|
208
|
-
throw new Error(`HyperFrames render ${handle.renderId} failed: ${JSON.stringify(progress.errors)}`);
|
|
215
|
+
throw new Error(`HyperFrames render ${handle.renderId} failed: ${scrubVendorDocLinks(JSON.stringify(progress.errors))}`);
|
|
209
216
|
}
|
|
210
217
|
if (Date.now() - startedAtMs > timeoutMs) {
|
|
211
218
|
devLog("hyperframes.render.timeout", {
|
|
@@ -263,16 +270,21 @@ export class HyperframesService {
|
|
|
263
270
|
format: input.format || "mp4"
|
|
264
271
|
});
|
|
265
272
|
let lastStatus = null;
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
try {
|
|
274
|
+
await executeRenderJob(job, projectDir, outputLocation, (progressJob, message) => {
|
|
275
|
+
if (progressJob.status !== lastStatus) {
|
|
276
|
+
devLog("hyperframes.render_local.progress", {
|
|
277
|
+
render_id: renderId,
|
|
278
|
+
status: progressJob.status,
|
|
279
|
+
message
|
|
280
|
+
});
|
|
281
|
+
lastStatus = progressJob.status;
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
throw new Error(scrubVendorDocLinks(error instanceof Error ? error.message : String(error)), { cause: error });
|
|
287
|
+
}
|
|
276
288
|
// Single-segment encoded key — matches the `/storage/:key` route which
|
|
277
289
|
// decodeURIComponent's one param (slashes ride through as %2F).
|
|
278
290
|
const outputUrl = `${config.PUBLIC_BASE_URL}/storage/${encodeURIComponent(outputKey)}`;
|
|
@@ -338,7 +350,12 @@ export class HyperframesService {
|
|
|
338
350
|
// png-sequence writes outputPath as a DIRECTORY of frame_000001.png … files.
|
|
339
351
|
const job = createRenderJob({ fps: 30, quality: "high", format: "png-sequence" });
|
|
340
352
|
try {
|
|
341
|
-
|
|
353
|
+
try {
|
|
354
|
+
await executeRenderJob(job, projectDir, framesDir);
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
throw new Error(scrubVendorDocLinks(error instanceof Error ? error.message : String(error)), { cause: error });
|
|
358
|
+
}
|
|
342
359
|
const frameFiles = (await readdir(framesDir))
|
|
343
360
|
.filter((name) => name.toLowerCase().endsWith(".png"))
|
|
344
361
|
.sort();
|
|
@@ -2309,6 +2326,18 @@ function compositionHasCoverageGap(intervals, total, minGap = 0.2) {
|
|
|
2309
2326
|
// neighbor back). Stored drafts stay butt-cut; only publish/render output
|
|
2310
2327
|
// carries the overlap. The preview runtime applies the same window live.
|
|
2311
2328
|
function materializeTransitionOverlaps(document) {
|
|
2329
|
+
const upsertStyleVar = (el, name, value) => {
|
|
2330
|
+
const styleValue = el.getAttribute("style") || "";
|
|
2331
|
+
const decl = `${name}:${value}`;
|
|
2332
|
+
const pattern = new RegExp(`(^|;)\\s*${name.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&")}\\s*:[^;]*`, "i");
|
|
2333
|
+
const nextStyle = pattern.test(styleValue)
|
|
2334
|
+
? styleValue.replace(pattern, (_match, lead) => `${lead}${decl}`)
|
|
2335
|
+
: styleValue.length === 0 || styleValue.endsWith(";")
|
|
2336
|
+
? `${styleValue}${decl}`
|
|
2337
|
+
: `${styleValue};${decl}`;
|
|
2338
|
+
if (nextStyle !== styleValue)
|
|
2339
|
+
el.setAttribute("style", nextStyle);
|
|
2340
|
+
};
|
|
2312
2341
|
const clips = [];
|
|
2313
2342
|
for (const el of Array.from(document.querySelectorAll("[data-start]"))) {
|
|
2314
2343
|
if (el.hasAttribute("data-composition-id"))
|
|
@@ -2331,6 +2360,23 @@ function materializeTransitionOverlaps(document) {
|
|
|
2331
2360
|
return;
|
|
2332
2361
|
for (const clip of clips) {
|
|
2333
2362
|
const transitionEl = clip.el;
|
|
2363
|
+
const tagName = transitionEl.tagName?.toLowerCase?.() ?? "";
|
|
2364
|
+
// Exit transitions: validate/clamp here; the tail-positioning delay var is
|
|
2365
|
+
// re-derived in the final loop below once holds are known (the animation
|
|
2366
|
+
// must end at the clip's rendered end, nominal + hold).
|
|
2367
|
+
const outPreset = transitionEl.getAttribute("data-transition-out");
|
|
2368
|
+
if (outPreset) {
|
|
2369
|
+
if (!TRANSITION_OUT_PRESETS.includes(outPreset) || tagName === "audio") {
|
|
2370
|
+
transitionEl.removeAttribute("data-transition-out");
|
|
2371
|
+
transitionEl.removeAttribute("data-transition-out-duration");
|
|
2372
|
+
}
|
|
2373
|
+
else {
|
|
2374
|
+
const outDuration = Math.min(clampTransitionDuration(transitionEl.getAttribute("data-transition-out-duration")), clip.nominal);
|
|
2375
|
+
const outDurationValue = Number(outDuration.toFixed(3));
|
|
2376
|
+
transitionEl.setAttribute("data-transition-out-duration", String(outDurationValue));
|
|
2377
|
+
upsertStyleVar(transitionEl, "--vf-tr-out-dur", `${outDurationValue}s`);
|
|
2378
|
+
}
|
|
2379
|
+
}
|
|
2334
2380
|
const preset = transitionEl.getAttribute("data-transition");
|
|
2335
2381
|
if (!preset)
|
|
2336
2382
|
continue;
|
|
@@ -2341,7 +2387,6 @@ function materializeTransitionOverlaps(document) {
|
|
|
2341
2387
|
transitionEl.removeAttribute("data-transition-duration");
|
|
2342
2388
|
continue;
|
|
2343
2389
|
}
|
|
2344
|
-
const tagName = transitionEl.tagName?.toLowerCase?.() ?? "";
|
|
2345
2390
|
if (tagName === "audio") {
|
|
2346
2391
|
transitionEl.removeAttribute("data-transition");
|
|
2347
2392
|
transitionEl.removeAttribute("data-transition-duration");
|
|
@@ -2353,15 +2398,7 @@ function materializeTransitionOverlaps(document) {
|
|
|
2353
2398
|
transitionEl.setAttribute("data-transition-duration", String(durationValue));
|
|
2354
2399
|
// Keep the inline var (which drives animation-duration) in lockstep, same
|
|
2355
2400
|
// as the --vf-kb-dur re-derivation above.
|
|
2356
|
-
|
|
2357
|
-
const durDecl = `--vf-tr-dur:${durationValue}s`;
|
|
2358
|
-
const nextStyle = /(^|;)\s*--vf-tr-dur\s*:[^;]*/i.test(styleValue)
|
|
2359
|
-
? styleValue.replace(/(^|;)\s*--vf-tr-dur\s*:[^;]*/i, (_match, lead) => `${lead}${durDecl}`)
|
|
2360
|
-
: styleValue.length === 0 || styleValue.endsWith(";")
|
|
2361
|
-
? `${styleValue}${durDecl}`
|
|
2362
|
-
: `${styleValue};${durDecl}`;
|
|
2363
|
-
if (nextStyle !== styleValue)
|
|
2364
|
-
transitionEl.setAttribute("style", nextStyle);
|
|
2401
|
+
upsertStyleVar(transitionEl, "--vf-tr-dur", `${durationValue}s`);
|
|
2365
2402
|
// Grant the hold to the clip this one cuts away from: same track, nominal
|
|
2366
2403
|
// end at (within epsilon of) this clip's start.
|
|
2367
2404
|
for (const candidate of clips) {
|
|
@@ -2390,6 +2427,13 @@ function materializeTransitionOverlaps(document) {
|
|
|
2390
2427
|
else {
|
|
2391
2428
|
clip.el.removeAttribute("data-transition-hold");
|
|
2392
2429
|
}
|
|
2430
|
+
// Position the exit animation at the clip's rendered tail. Timeline edits
|
|
2431
|
+
// touch data-duration only, so this re-derivation (like --vf-kb-dur) is
|
|
2432
|
+
// what keeps stored delays honest after retimes.
|
|
2433
|
+
if (clip.el.getAttribute("data-transition-out")) {
|
|
2434
|
+
const outDuration = clampTransitionDuration(clip.el.getAttribute("data-transition-out-duration"));
|
|
2435
|
+
upsertStyleVar(clip.el, "--vf-tr-out-delay", `${transitionOutDelaySeconds(nextDuration, outDuration)}s`);
|
|
2436
|
+
}
|
|
2393
2437
|
}
|
|
2394
2438
|
}
|
|
2395
2439
|
export function normalizePublishHtml(html) {
|
|
@@ -2483,6 +2527,31 @@ export function normalizePublishHtml(html) {
|
|
|
2483
2527
|
continue;
|
|
2484
2528
|
html.style.zIndex = String(trackIndex);
|
|
2485
2529
|
}
|
|
2530
|
+
// HyperFrames contract: visible timed elements (div/img) carry class="clip" —
|
|
2531
|
+
// the upstream runtime keeps clip-less timed elements visible for the whole
|
|
2532
|
+
// composition. video/audio deliberately stay bare (framework-managed), so the
|
|
2533
|
+
// class is STRIPPED there (the editor's add-layer paths set it universally).
|
|
2534
|
+
// Only promote layers with a valid timing window: a clip-less element with a
|
|
2535
|
+
// missing/invalid data-duration historically stayed visible full-length, and
|
|
2536
|
+
// promoting it would silently hide it on re-renders of older compositions.
|
|
2537
|
+
for (const el of Array.from(document.querySelectorAll("[data-start]"))) {
|
|
2538
|
+
if (el.hasAttribute("data-composition-id"))
|
|
2539
|
+
continue;
|
|
2540
|
+
const tag = el.tagName.toLowerCase();
|
|
2541
|
+
if (tag === "video" || tag === "audio") {
|
|
2542
|
+
el.classList.remove("clip");
|
|
2543
|
+
if (!el.getAttribute("class"))
|
|
2544
|
+
el.removeAttribute("class");
|
|
2545
|
+
continue;
|
|
2546
|
+
}
|
|
2547
|
+
const start = Number.parseFloat(el.getAttribute("data-start") || "");
|
|
2548
|
+
const clipDuration = Number.parseFloat(el.getAttribute("data-duration") || "");
|
|
2549
|
+
if (!Number.isFinite(start) || start < 0 || !Number.isFinite(clipDuration) || clipDuration <= 0)
|
|
2550
|
+
continue;
|
|
2551
|
+
if (!el.classList.contains("clip")) {
|
|
2552
|
+
el.classList.add("clip");
|
|
2553
|
+
}
|
|
2554
|
+
}
|
|
2486
2555
|
// Ken Burns motion must span exactly the clip: timeline edits touch
|
|
2487
2556
|
// data-duration only, so re-derive the inline --vf-kb-dur (which drives
|
|
2488
2557
|
// animation-duration) from data-duration on every [data-kenburns] layer.
|
|
@@ -2519,10 +2588,28 @@ export function normalizePublishHtml(html) {
|
|
|
2519
2588
|
(document.head ?? document.documentElement)?.appendChild(styleEl);
|
|
2520
2589
|
}
|
|
2521
2590
|
materializeTransitionOverlaps(document);
|
|
2522
|
-
if (document.querySelector("[data-transition]") && !html.includes(TRANSITION_STYLE_MARKER)) {
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2591
|
+
if (document.querySelector("[data-transition], [data-transition-out]") && !html.includes(TRANSITION_STYLE_MARKER)) {
|
|
2592
|
+
// Compositions stored before V2 carry the V1 block inline: upgrade it in
|
|
2593
|
+
// place (exact string swap) instead of stacking a second stylesheet. If the
|
|
2594
|
+
// legacy block drifted, append after it — later source order wins the
|
|
2595
|
+
// equal-specificity animation-name battle, so V2 still takes effect.
|
|
2596
|
+
let upgradedLegacy = false;
|
|
2597
|
+
if (html.includes("__VF_TRANSITIONS_V1__")) {
|
|
2598
|
+
for (const styleEl of Array.from(document.querySelectorAll("style"))) {
|
|
2599
|
+
const text = styleEl.textContent || "";
|
|
2600
|
+
if (!text.includes("__VF_TRANSITIONS_V1__"))
|
|
2601
|
+
continue;
|
|
2602
|
+
styleEl.textContent = text.includes(LEGACY_TRANSITION_CSS_V1)
|
|
2603
|
+
? text.split(LEGACY_TRANSITION_CSS_V1).join(TRANSITION_CSS)
|
|
2604
|
+
: `${text}\n${TRANSITION_CSS}`;
|
|
2605
|
+
upgradedLegacy = true;
|
|
2606
|
+
}
|
|
2607
|
+
}
|
|
2608
|
+
if (!upgradedLegacy) {
|
|
2609
|
+
const styleEl = document.createElement("style");
|
|
2610
|
+
styleEl.textContent = TRANSITION_CSS;
|
|
2611
|
+
(document.head ?? document.documentElement)?.appendChild(styleEl);
|
|
2612
|
+
}
|
|
2526
2613
|
}
|
|
2527
2614
|
// Editor sessions occasionally leave inline style attributes with double
|
|
2528
2615
|
// quotes inside CSS values (font-family: "TikTok Sans"). When serialized into
|
|
@@ -2598,7 +2685,7 @@ function extractCompositionMetadata(html, input) {
|
|
|
2598
2685
|
const compositionId = safeIdentifier(input.compositionId || htmlAttribute(html, "data-composition-id") || input.composition?.compositionId || "composition");
|
|
2599
2686
|
const width = positiveInteger(input.width || htmlAttribute(html, "data-width") || input.composition?.width, 720);
|
|
2600
2687
|
const height = positiveInteger(input.height || htmlAttribute(html, "data-height") || input.composition?.height, 1280);
|
|
2601
|
-
const fps = positiveInteger(input.fps || 30, 30);
|
|
2688
|
+
const fps = positiveInteger(input.fps || rootTagAttribute(html, "data-fps") || 30, 30);
|
|
2602
2689
|
const duration = Number.parseFloat(htmlAttribute(html, "data-duration") || String(input.composition?.duration || ""));
|
|
2603
2690
|
return {
|
|
2604
2691
|
compositionId,
|
|
@@ -2628,6 +2715,18 @@ function forceEvenCompositionDimensions(html) {
|
|
|
2628
2715
|
return `data-${dim}=${quote}${n - 1}${quote}`;
|
|
2629
2716
|
});
|
|
2630
2717
|
}
|
|
2718
|
+
// Reads an attribute from the SAME opening tag that carries
|
|
2719
|
+
// data-composition-id (the composition root). htmlAttribute matches the first
|
|
2720
|
+
// occurrence anywhere in the document, which nested sub-compositions or
|
|
2721
|
+
// embedded snippets could hijack — fps must come from the root only.
|
|
2722
|
+
function rootTagAttribute(html, name) {
|
|
2723
|
+
const rootTag = html.match(/<[a-zA-Z][^>]*\bdata-composition-id\s*=[^>]*>/);
|
|
2724
|
+
if (!rootTag) {
|
|
2725
|
+
return "";
|
|
2726
|
+
}
|
|
2727
|
+
const value = rootTag[0].match(new RegExp(`\\b${name}\\s*=\\s*["']([^"']*)["']`, "i"));
|
|
2728
|
+
return value ? value[1] : "";
|
|
2729
|
+
}
|
|
2631
2730
|
function htmlAttribute(html, name) {
|
|
2632
2731
|
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2633
2732
|
const match = html.match(new RegExp(`${escaped}=(["'])(.*?)\\1`, "i"));
|
|
@@ -44,6 +44,7 @@ const METHOD_COLLECTIONS = {
|
|
|
44
44
|
createTemplateRelease: "template_release",
|
|
45
45
|
createTemplateSource: "template_source",
|
|
46
46
|
createUserAttachment: "user_attachment",
|
|
47
|
+
updateUserAttachmentNotes: "user_attachment",
|
|
47
48
|
createUserFileFolder: "user_file_folder",
|
|
48
49
|
createUserTemporaryFile: "user_temporary_file",
|
|
49
50
|
deleteEmailChannel: "email_channel",
|
|
@@ -797,9 +798,15 @@ class ServerlessRecordsServiceImpl {
|
|
|
797
798
|
storageKey: input.storageKey,
|
|
798
799
|
folderPath: normalizeFolder(input.folderPath),
|
|
799
800
|
publicUrl: input.publicUrl ?? null,
|
|
801
|
+
notes: input.notes ?? null,
|
|
802
|
+
notesEmbedding: input.notesEmbedding ?? null,
|
|
803
|
+
notesEmbeddingModel: input.notesEmbeddingModel ?? null,
|
|
800
804
|
createdAt: input.createdAt ?? timestamp
|
|
801
805
|
});
|
|
802
806
|
}
|
|
807
|
+
async updateUserAttachmentNotes(customerId, attachmentId, patch) {
|
|
808
|
+
return this.mergeByIdForCustomer("user_attachment", customerId, attachmentId, patch);
|
|
809
|
+
}
|
|
803
810
|
async listUserAttachments(customerId) {
|
|
804
811
|
return this.listByCustomer("user_attachment", customerId);
|
|
805
812
|
}
|
|
@@ -307,6 +307,7 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
307
307
|
|
|
308
308
|
.vf-editor-chat-mobile-fab,
|
|
309
309
|
.vf-editor-chat-minimize,
|
|
310
|
+
.vf-editor-chat-expand,
|
|
310
311
|
.vf-editor-chat-back-button--header {
|
|
311
312
|
display: none;
|
|
312
313
|
}
|
|
@@ -2634,18 +2635,25 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
2634
2635
|
pointer-events: none;
|
|
2635
2636
|
}
|
|
2636
2637
|
|
|
2638
|
+
/* Chat opens as a floating popup card anchored above the FAB; the expand
|
|
2639
|
+
toggle promotes it to a full-screen sheet (data-mobile-expanded). */
|
|
2637
2640
|
.vf-editor-chat-thread {
|
|
2638
2641
|
position: fixed;
|
|
2639
|
-
|
|
2642
|
+
top: auto;
|
|
2643
|
+
left: auto;
|
|
2644
|
+
right: 12px;
|
|
2645
|
+
bottom: calc(12px + env(safe-area-inset-bottom));
|
|
2640
2646
|
z-index: 1;
|
|
2641
2647
|
display: none;
|
|
2642
|
-
width:
|
|
2643
|
-
height:
|
|
2644
|
-
border
|
|
2648
|
+
width: min(430px, calc(100vw - 24px));
|
|
2649
|
+
height: min(72svh, 640px);
|
|
2650
|
+
border: 1px solid rgba(219, 193, 122, 0.46);
|
|
2651
|
+
border-radius: 24px;
|
|
2652
|
+
overflow: hidden;
|
|
2645
2653
|
background:
|
|
2646
2654
|
radial-gradient(circle at top right, rgba(219, 193, 122, 0.12), transparent 30%),
|
|
2647
2655
|
linear-gradient(180deg, rgba(255, 252, 247, 0.99), rgba(252, 247, 238, 0.98));
|
|
2648
|
-
box-shadow:
|
|
2656
|
+
box-shadow: 0 30px 72px rgba(37, 45, 61, 0.34);
|
|
2649
2657
|
pointer-events: auto;
|
|
2650
2658
|
}
|
|
2651
2659
|
|
|
@@ -2653,6 +2661,22 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
2653
2661
|
display: flex;
|
|
2654
2662
|
}
|
|
2655
2663
|
|
|
2664
|
+
/* Outranks the desktop brainstorm thread rule (display:grid), which has
|
|
2665
|
+
higher specificity than the plain .vf-editor-chat-thread hide above. */
|
|
2666
|
+
.vf-editor-chat-shell:not([data-mobile-open="true"]) .vf-editor-chat-thread {
|
|
2667
|
+
display: none;
|
|
2668
|
+
}
|
|
2669
|
+
|
|
2670
|
+
.vf-editor-chat-shell[data-mobile-expanded="true"] .vf-editor-chat-thread {
|
|
2671
|
+
inset: 0;
|
|
2672
|
+
width: 100%;
|
|
2673
|
+
height: 100svh;
|
|
2674
|
+
border: 0;
|
|
2675
|
+
border-radius: 0;
|
|
2676
|
+
box-shadow: none;
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
.vf-editor-chat-expand,
|
|
2656
2680
|
.vf-editor-chat-minimize {
|
|
2657
2681
|
all: unset;
|
|
2658
2682
|
display: inline-flex;
|
|
@@ -2681,10 +2705,21 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
2681
2705
|
}
|
|
2682
2706
|
|
|
2683
2707
|
.vf-editor-chat-new-thread,
|
|
2708
|
+
.vf-editor-chat-expand,
|
|
2684
2709
|
.vf-editor-chat-minimize {
|
|
2685
2710
|
flex: 0 0 auto;
|
|
2686
2711
|
}
|
|
2687
2712
|
|
|
2713
|
+
.vf-editor-chat-expand svg {
|
|
2714
|
+
width: 16px;
|
|
2715
|
+
height: 16px;
|
|
2716
|
+
fill: none;
|
|
2717
|
+
stroke: currentColor;
|
|
2718
|
+
stroke-width: 1.9;
|
|
2719
|
+
stroke-linecap: round;
|
|
2720
|
+
stroke-linejoin: round;
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2688
2723
|
.vf-editor-chat-header,
|
|
2689
2724
|
.vf-editor-chat-tracer-bar,
|
|
2690
2725
|
.vf-editor-chat-footer {
|
|
@@ -2701,31 +2736,59 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
2701
2736
|
max-width: 72vw;
|
|
2702
2737
|
}
|
|
2703
2738
|
|
|
2739
|
+
/* iOS auto-zooms the viewport when focusing sub-16px inputs; the chat
|
|
2740
|
+
composer is the page's primary interaction on phones. */
|
|
2741
|
+
.vf-editor-chat-input,
|
|
2742
|
+
.vf-editor-upload-folder-dialog input {
|
|
2743
|
+
font-size: 16px;
|
|
2744
|
+
}
|
|
2745
|
+
|
|
2746
|
+
.vf-editor-chat-shell[data-layout="brainstorm"] .editor-chat-panel,
|
|
2704
2747
|
.vf-editor-chat-shell[data-layout="brainstorm"] {
|
|
2705
|
-
|
|
2748
|
+
background: transparent;
|
|
2706
2749
|
}
|
|
2707
2750
|
|
|
2708
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-
|
|
2709
|
-
|
|
2751
|
+
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-brainstorm-layout {
|
|
2752
|
+
grid-template-columns: minmax(0, 1fr);
|
|
2710
2753
|
}
|
|
2711
2754
|
|
|
2712
|
-
/*
|
|
2713
|
-
|
|
2714
|
-
.vf-editor-chat-
|
|
2755
|
+
/* On narrow screens the persistent history sidebar collapses; the
|
|
2756
|
+
overlay history toggle in the header takes over instead. */
|
|
2757
|
+
.vf-editor-chat-brainstorm-layout.has-sidebar > .vf-editor-chat-history-pane {
|
|
2715
2758
|
display: none;
|
|
2716
2759
|
}
|
|
2717
2760
|
|
|
2718
|
-
/*
|
|
2719
|
-
|
|
2720
|
-
.vf-editor-chat-
|
|
2721
|
-
|
|
2722
|
-
|
|
2761
|
+
/* Brainstorm surfaces (Discover/Library/Clips) use the same FAB + popup
|
|
2762
|
+
dock as everything else; the thread just lays out as a grid. */
|
|
2763
|
+
.vf-editor-chat-shell[data-layout="brainstorm"][data-mobile-open="true"] .vf-editor-chat-thread {
|
|
2764
|
+
display: grid;
|
|
2765
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
2723
2766
|
}
|
|
2724
2767
|
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2768
|
+
.vf-editor-chat-history-close,
|
|
2769
|
+
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-history-toggle {
|
|
2770
|
+
display: inline-flex;
|
|
2771
|
+
}
|
|
2772
|
+
|
|
2773
|
+
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-viewport {
|
|
2774
|
+
padding-left: 12px;
|
|
2775
|
+
padding-right: 12px;
|
|
2776
|
+
}
|
|
2777
|
+
|
|
2778
|
+
/* /chat is the one surface where the chat IS the page: no FAB, no
|
|
2779
|
+
minimize/expand, thread pinned full-screen, with a back-to-Discover
|
|
2780
|
+
escape hatch in the header (the page has no topbar on phones). */
|
|
2781
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] {
|
|
2782
|
+
pointer-events: auto;
|
|
2783
|
+
}
|
|
2784
|
+
|
|
2785
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-mobile-fab,
|
|
2786
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-minimize,
|
|
2787
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-expand {
|
|
2788
|
+
display: none;
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2791
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-back-button--header {
|
|
2729
2792
|
display: inline-flex;
|
|
2730
2793
|
align-items: center;
|
|
2731
2794
|
justify-content: center;
|
|
@@ -2739,27 +2802,12 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
2739
2802
|
color: #617087;
|
|
2740
2803
|
}
|
|
2741
2804
|
|
|
2742
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-back-button--header svg {
|
|
2805
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-back-button--header svg {
|
|
2743
2806
|
width: 18px;
|
|
2744
2807
|
height: 18px;
|
|
2745
2808
|
}
|
|
2746
2809
|
|
|
2747
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .editor-chat-
|
|
2748
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] {
|
|
2749
|
-
background: transparent;
|
|
2750
|
-
}
|
|
2751
|
-
|
|
2752
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-brainstorm-layout {
|
|
2753
|
-
grid-template-columns: minmax(0, 1fr);
|
|
2754
|
-
}
|
|
2755
|
-
|
|
2756
|
-
/* On narrow screens the persistent history sidebar collapses; the
|
|
2757
|
-
overlay history toggle in the header takes over instead. */
|
|
2758
|
-
.vf-editor-chat-brainstorm-layout.has-sidebar > .vf-editor-chat-history-pane {
|
|
2759
|
-
display: none;
|
|
2760
|
-
}
|
|
2761
|
-
|
|
2762
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-thread {
|
|
2810
|
+
.is-chat-page .vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-thread {
|
|
2763
2811
|
position: relative;
|
|
2764
2812
|
inset: auto;
|
|
2765
2813
|
display: grid;
|
|
@@ -2767,18 +2815,9 @@ export const TEMPLATE_EDITOR_SHELL_STYLES = `
|
|
|
2767
2815
|
width: 100%;
|
|
2768
2816
|
height: 100%;
|
|
2769
2817
|
min-height: 0;
|
|
2818
|
+
border: 0;
|
|
2770
2819
|
border-radius: 0;
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
.vf-editor-chat-history-close,
|
|
2775
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-history-toggle {
|
|
2776
|
-
display: inline-flex;
|
|
2777
|
-
}
|
|
2778
|
-
|
|
2779
|
-
.vf-editor-chat-shell[data-layout="brainstorm"] .vf-editor-chat-viewport {
|
|
2780
|
-
padding-left: 12px;
|
|
2781
|
-
padding-right: 12px;
|
|
2820
|
+
box-shadow: none;
|
|
2782
2821
|
}
|
|
2783
2822
|
}
|
|
2784
2823
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mevdragon/vidfarm-devcli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Local bridge for the Vidfarm Trackpad Editor. `vidfarm serve <template_id>` boots the FULL editor on localhost (disk-backed records/storage, free in-process render); edit composition.html on disk (Claude Code, Codex, etc.) and the browser live-morphs it.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"demo/dist/**",
|
|
14
14
|
"public/assets/**",
|
|
15
15
|
"src/assets/**",
|
|
16
|
+
".agents/skills/**",
|
|
16
17
|
"README.md",
|
|
17
18
|
"SKILL.director.md",
|
|
18
19
|
"SKILL.platform.md",
|