@amg555/frameforge-mcp 2.7.3 → 2.7.7
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/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +33 -0
- package/CHANGELOG.md +49 -0
- package/CLAUDE.md +17 -6
- package/GEMINI.md +63 -0
- package/README.md +216 -426
- package/START_HERE.md +4 -2
- package/package.json +5 -3
- package/plugins/ai-video-editor/README.md +32 -0
- package/plugins/ai-video-editor/SKILL.md +152 -0
- package/plugins/ai-video-editor/assets/fonts/fonts.css +2409 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/anton-400.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/archivo-800.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/cabin-sketch-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/dm-sans-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/fraunces-600.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/fraunces-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/fredoka-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/inter-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/inter-800.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/inter-tight-800.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/kalam-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/ttf/noto-sans-devanagari-700.ttf +0 -0
- package/plugins/ai-video-editor/assets/fonts/web/noto-sans-devanagari-devanagari-400-normal.woff2 +0 -0
- package/plugins/ai-video-editor/assets/fonts/web/noto-sans-devanagari-devanagari-500-normal.woff2 +0 -0
- package/plugins/ai-video-editor/assets/fonts/web/noto-sans-devanagari-devanagari-600-normal.woff2 +0 -0
- package/plugins/ai-video-editor/assets/fonts/web/noto-sans-devanagari-devanagari-700-normal.woff2 +0 -0
- package/plugins/ai-video-editor/assets/fonts/web/noto-sans-devanagari-devanagari-800-normal.woff2 +0 -0
- package/plugins/ai-video-editor/engine/hidpi.js +117 -0
- package/plugins/ai-video-editor/engine/page.html +43 -0
- package/plugins/ai-video-editor/engine/player.js +145 -0
- package/plugins/ai-video-editor/references/example-story-warm-canvas.js +95 -0
- package/plugins/ai-video-editor/references/story-guide.md +112 -0
- package/plugins/ai-video-editor/requirements.txt +4 -0
- package/plugins/ai-video-editor/styles/chalk-talk/base.js +490 -0
- package/plugins/ai-video-editor/styles/chalk-talk/style.json +14 -0
- package/plugins/ai-video-editor/styles/chalk-talk/style.md +41 -0
- package/plugins/ai-video-editor/styles/clean-tech/base.js +447 -0
- package/plugins/ai-video-editor/styles/clean-tech/style.json +15 -0
- package/plugins/ai-video-editor/styles/clean-tech/style.md +38 -0
- package/plugins/ai-video-editor/styles/creator-motion-graphics/base.js +698 -0
- package/plugins/ai-video-editor/styles/creator-motion-graphics/style.json +16 -0
- package/plugins/ai-video-editor/styles/creator-motion-graphics/style.md +39 -0
- package/plugins/ai-video-editor/styles/data-story/base.js +432 -0
- package/plugins/ai-video-editor/styles/data-story/style.json +14 -0
- package/plugins/ai-video-editor/styles/data-story/style.md +38 -0
- package/plugins/ai-video-editor/styles/index.json +103 -0
- package/plugins/ai-video-editor/styles/pop-info/base.js +570 -0
- package/plugins/ai-video-editor/styles/pop-info/style.json +13 -0
- package/plugins/ai-video-editor/styles/pop-info/style.md +37 -0
- package/plugins/ai-video-editor/styles/software-walkthrough/base.js +544 -0
- package/plugins/ai-video-editor/styles/software-walkthrough/style.json +15 -0
- package/plugins/ai-video-editor/styles/software-walkthrough/style.md +38 -0
- package/plugins/ai-video-editor/styles/warm-canvas/base.js +610 -0
- package/plugins/ai-video-editor/styles/warm-canvas/style.json +14 -0
- package/plugins/ai-video-editor/styles/warm-canvas/style.md +37 -0
- package/plugins/aiinsight-shorts/CHANGELOG.md +6 -0
- package/plugins/aiinsight-shorts/README.md +43 -0
- package/plugins/aiinsight-shorts/SKILL.md +138 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/STYLE.md +58 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/data/cues.json +140 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/data/lines.json +67 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/data/words.json +614 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/data/words.txt +102 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/fonts/Inter-Black.otf +0 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/fonts/Inter-ExtraBold.otf +0 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/index.html +17 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/script.json +27 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/sheet.html +11 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/board.js +62 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/captions.js +68 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/engine.js +65 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/human.js +128 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/lib.js +44 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/look2d.js +33 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/sdf.js +79 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/sets.js +107 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/core/timing.js +23 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/main.js +56 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/sheet.js +79 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/src/shots.js +136 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/tools/capture.mjs +122 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/tools/mix.py +172 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/LICENSE-three.txt +21 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/environments/RoomEnvironment.js +144 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/BokehPass.js +141 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/EffectComposer.js +231 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/MaskPass.js +104 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/OutputPass.js +97 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/Pass.js +95 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/RenderPass.js +99 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/ShaderPass.js +77 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/postprocessing/UnrealBloomPass.js +415 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/shaders/BokehShader.js +145 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/shaders/CopyShader.js +45 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/shaders/LuminosityHighPassShader.js +64 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/addons/shaders/OutputShader.js +85 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/example/vendor/three.module.js +6 -0
- package/plugins/aiinsight-shorts/styles/deep-dive/style-sheet.png +0 -0
- package/plugins/aiinsight-shorts/styles/inside-out/STYLE.md +97 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/data/cues.json +178 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/data/lines.json +73 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/data/words.json +662 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/fonts/Inter-Black.otf +0 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/index.html +17 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/script.json +26 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/src/core/captions.js +68 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/src/core/kit.js +345 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/src/core/lib.js +44 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/src/core/timing.js +23 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/src/main.js +62 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/src/shots.js +195 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/tools/capture.mjs +122 -0
- package/plugins/aiinsight-shorts/styles/inside-out/example/tools/mix.py +172 -0
- package/plugins/aiinsight-shorts/styles/inside-out/style-sheet.png +0 -0
- package/plugins/aiinsight-shorts/styles/night-file/STYLE.md +36 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/data/cues.json +146 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/data/lines.json +73 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/data/words.json +572 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/data/words.txt +95 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/fonts/FreeMonoBold.ttf +0 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/fonts/Inter-Black.otf +0 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/index.html +18 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/script.json +26 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/sheet.html +13 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/board.js +62 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/captions.js +49 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/engine.js +65 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/human.js +128 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/kit.js +151 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/lib.js +44 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/sdf.js +79 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/sets3d.js +106 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/core/timing.js +23 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/main.js +56 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/sheet.js +86 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/src/shots.js +130 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/tools/capture.mjs +122 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/tools/mix.py +172 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/LICENSE-three.txt +21 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/environments/RoomEnvironment.js +144 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/BokehPass.js +141 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/EffectComposer.js +231 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/MaskPass.js +104 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/OutputPass.js +97 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/Pass.js +95 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/RenderPass.js +99 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/ShaderPass.js +77 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/postprocessing/UnrealBloomPass.js +415 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/shaders/BokehShader.js +145 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/shaders/CopyShader.js +45 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/shaders/LuminosityHighPassShader.js +64 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/addons/shaders/OutputShader.js +85 -0
- package/plugins/aiinsight-shorts/styles/night-file/example/vendor/three.module.js +6 -0
- package/plugins/aiinsight-shorts/styles/night-file/style-sheet.png +0 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/STYLE.md +30 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/data/cues.json +167 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/data/lines.json +67 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/data/words.json +614 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/data/words.txt +102 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/fonts/Caladea-Bold.ttf +0 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/fonts/Inter-Black.otf +0 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/index.html +15 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/script.json +26 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/sheet.html +12 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/core/board.js +62 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/core/captions.js +47 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/core/kit.js +152 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/core/lib.js +44 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/core/timing.js +23 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/main.js +62 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/sheet.js +61 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/src/shots.js +139 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/tools/capture.mjs +122 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/example/tools/mix.py +172 -0
- package/plugins/aiinsight-shorts/styles/paper-atlas/style-sheet.png +0 -0
- package/plugins/aiinsight-shorts/styles/stick-story/STYLE.md +32 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/data/cues.json +182 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/data/lines.json +79 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/data/words.json +662 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/data/words.txt +110 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/fonts/Inter-Black.otf +0 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/fonts/Inter-ExtraBold.otf +0 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/index.html +13 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/script.json +27 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/sheet.html +10 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/core/board.js +62 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/core/captions.js +47 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/core/kit.js +166 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/core/lib.js +44 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/core/timing.js +23 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/main.js +62 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/sheet.js +64 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/src/shots.js +148 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/tools/capture.mjs +122 -0
- package/plugins/aiinsight-shorts/styles/stick-story/example/tools/mix.py +172 -0
- package/plugins/aiinsight-shorts/styles/stick-story/style-sheet.png +0 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/STYLE.md +51 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/data/cues.json +271 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/data/lines.json +127 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/data/words.json +908 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/data/words.txt +151 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/fonts/Caladea-Bold.ttf +0 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/fonts/Inter-Black.otf +0 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/fonts/Inter-ExtraBold.otf +0 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/index.html +19 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/script.json +37 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/sheet.html +13 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/board.js +62 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/captions.js +56 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/engine.js +65 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/lib.js +44 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/props.js +166 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/timing.js +23 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/toon.js +352 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/core/world.js +340 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/main.js +56 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/sheet.js +99 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/src/shots.js +377 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/tools/capture.mjs +122 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/tools/mix.py +204 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/LICENSE-three.txt +21 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/environments/RoomEnvironment.js +144 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/BokehPass.js +141 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/EffectComposer.js +231 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/MaskPass.js +104 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/OutputPass.js +97 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/Pass.js +95 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/RenderPass.js +99 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/ShaderPass.js +77 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/postprocessing/UnrealBloomPass.js +415 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/shaders/BokehShader.js +145 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/shaders/CopyShader.js +45 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/shaders/LuminosityHighPassShader.js +64 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/addons/shaders/OutputShader.js +85 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/example/vendor/three.module.js +6 -0
- package/plugins/aiinsight-shorts/styles/tall-tale/style-sheet.png +0 -0
- package/plugins/faceless-shorts/README.md +34 -0
- package/plugins/faceless-shorts/SKILL.md +124 -0
- package/plugins/faceless-shorts/styles/deep-dive/STYLE.md +58 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/data/cues.json +140 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/data/lines.json +67 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/data/words.json +614 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/data/words.txt +102 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/fonts/Inter-Black.otf +0 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/fonts/Inter-ExtraBold.otf +0 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/index.html +16 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/script.json +27 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/sheet.html +10 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/board.js +62 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/captions.js +68 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/engine.js +65 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/human.js +128 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/lib.js +44 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/look2d.js +33 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/sdf.js +79 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/sets.js +107 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/core/timing.js +23 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/main.js +56 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/sheet.js +79 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/src/shots.js +136 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/tools/capture.mjs +122 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/tools/mix.py +172 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/LICENSE-three.txt +21 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/environments/RoomEnvironment.js +144 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/BokehPass.js +141 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/EffectComposer.js +231 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/MaskPass.js +104 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/OutputPass.js +97 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/Pass.js +95 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/RenderPass.js +99 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/ShaderPass.js +77 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/postprocessing/UnrealBloomPass.js +415 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/shaders/BokehShader.js +145 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/shaders/CopyShader.js +45 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/shaders/LuminosityHighPassShader.js +64 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/addons/shaders/OutputShader.js +85 -0
- package/plugins/faceless-shorts/styles/deep-dive/example/vendor/three.module.js +6 -0
- package/plugins/faceless-shorts/styles/deep-dive/style-sheet.png +0 -0
- package/plugins/faceless-shorts/styles/inside-out/STYLE.md +97 -0
- package/plugins/faceless-shorts/styles/inside-out/example/data/cues.json +178 -0
- package/plugins/faceless-shorts/styles/inside-out/example/data/lines.json +73 -0
- package/plugins/faceless-shorts/styles/inside-out/example/data/words.json +662 -0
- package/plugins/faceless-shorts/styles/inside-out/example/fonts/Inter-Black.otf +0 -0
- package/plugins/faceless-shorts/styles/inside-out/example/index.html +16 -0
- package/plugins/faceless-shorts/styles/inside-out/example/script.json +26 -0
- package/plugins/faceless-shorts/styles/inside-out/example/src/core/captions.js +68 -0
- package/plugins/faceless-shorts/styles/inside-out/example/src/core/kit.js +345 -0
- package/plugins/faceless-shorts/styles/inside-out/example/src/core/lib.js +44 -0
- package/plugins/faceless-shorts/styles/inside-out/example/src/core/timing.js +23 -0
- package/plugins/faceless-shorts/styles/inside-out/example/src/main.js +62 -0
- package/plugins/faceless-shorts/styles/inside-out/example/src/shots.js +195 -0
- package/plugins/faceless-shorts/styles/inside-out/example/tools/capture.mjs +122 -0
- package/plugins/faceless-shorts/styles/inside-out/example/tools/mix.py +172 -0
- package/plugins/faceless-shorts/styles/inside-out/style-sheet.png +0 -0
- package/plugins/faceless-shorts/styles/night-file/STYLE.md +36 -0
- package/plugins/faceless-shorts/styles/night-file/example/data/cues.json +146 -0
- package/plugins/faceless-shorts/styles/night-file/example/data/lines.json +73 -0
- package/plugins/faceless-shorts/styles/night-file/example/data/words.json +572 -0
- package/plugins/faceless-shorts/styles/night-file/example/data/words.txt +95 -0
- package/plugins/faceless-shorts/styles/night-file/example/fonts/FreeMonoBold.ttf +0 -0
- package/plugins/faceless-shorts/styles/night-file/example/fonts/Inter-Black.otf +0 -0
- package/plugins/faceless-shorts/styles/night-file/example/index.html +16 -0
- package/plugins/faceless-shorts/styles/night-file/example/script.json +26 -0
- package/plugins/faceless-shorts/styles/night-file/example/sheet.html +11 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/board.js +62 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/captions.js +49 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/engine.js +65 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/human.js +128 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/kit.js +151 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/lib.js +44 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/sdf.js +79 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/sets3d.js +106 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/core/timing.js +23 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/main.js +56 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/sheet.js +86 -0
- package/plugins/faceless-shorts/styles/night-file/example/src/shots.js +130 -0
- package/plugins/faceless-shorts/styles/night-file/example/tools/capture.mjs +122 -0
- package/plugins/faceless-shorts/styles/night-file/example/tools/mix.py +172 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/LICENSE-three.txt +21 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/environments/RoomEnvironment.js +144 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/BokehPass.js +141 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/EffectComposer.js +231 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/MaskPass.js +104 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/OutputPass.js +97 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/Pass.js +95 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/RenderPass.js +99 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/ShaderPass.js +77 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/postprocessing/UnrealBloomPass.js +415 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/shaders/BokehShader.js +145 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/shaders/CopyShader.js +45 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/shaders/LuminosityHighPassShader.js +64 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/shaders/OutputShader.js +85 -0
- package/plugins/faceless-shorts/styles/night-file/example/vendor/three.module.js +6 -0
- package/plugins/faceless-shorts/styles/night-file/style-sheet.png +0 -0
- package/plugins/faceless-shorts/styles/paper-atlas/STYLE.md +30 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/data/cues.json +167 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/data/lines.json +67 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/data/words.json +614 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/data/words.txt +102 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/fonts/Caladea-Bold.ttf +0 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/fonts/Inter-Black.otf +0 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/index.html +13 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/script.json +26 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/sheet.html +10 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/core/board.js +62 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/core/captions.js +47 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/core/kit.js +152 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/core/lib.js +44 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/core/timing.js +23 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/main.js +62 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/sheet.js +61 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/src/shots.js +139 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/tools/capture.mjs +122 -0
- package/plugins/faceless-shorts/styles/paper-atlas/example/tools/mix.py +172 -0
- package/plugins/faceless-shorts/styles/paper-atlas/style-sheet.png +0 -0
- package/plugins/faceless-shorts/styles/stick-story/STYLE.md +32 -0
- package/plugins/faceless-shorts/styles/stick-story/example/data/cues.json +182 -0
- package/plugins/faceless-shorts/styles/stick-story/example/data/lines.json +79 -0
- package/plugins/faceless-shorts/styles/stick-story/example/data/words.json +662 -0
- package/plugins/faceless-shorts/styles/stick-story/example/data/words.txt +110 -0
- package/plugins/faceless-shorts/styles/stick-story/example/fonts/Inter-Black.otf +0 -0
- package/plugins/faceless-shorts/styles/stick-story/example/fonts/Inter-ExtraBold.otf +0 -0
- package/plugins/faceless-shorts/styles/stick-story/example/index.html +12 -0
- package/plugins/faceless-shorts/styles/stick-story/example/script.json +27 -0
- package/plugins/faceless-shorts/styles/stick-story/example/sheet.html +9 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/core/board.js +62 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/core/captions.js +47 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/core/kit.js +166 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/core/lib.js +44 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/core/timing.js +23 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/main.js +62 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/sheet.js +64 -0
- package/plugins/faceless-shorts/styles/stick-story/example/src/shots.js +148 -0
- package/plugins/faceless-shorts/styles/stick-story/example/tools/capture.mjs +122 -0
- package/plugins/faceless-shorts/styles/stick-story/example/tools/mix.py +172 -0
- package/plugins/faceless-shorts/styles/stick-story/style-sheet.png +0 -0
- package/plugins/faceless-shorts/styles/tall-tale/STYLE.md +51 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/data/cues.json +271 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/data/lines.json +127 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/data/words.json +908 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/data/words.txt +151 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/fonts/Caladea-Bold.ttf +0 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/fonts/Inter-Black.otf +0 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/fonts/Inter-ExtraBold.otf +0 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/index.html +17 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/script.json +37 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/sheet.html +11 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/board.js +62 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/captions.js +56 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/engine.js +65 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/lib.js +44 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/props.js +166 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/timing.js +23 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/toon.js +352 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/core/world.js +340 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/main.js +56 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/sheet.js +99 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/src/shots.js +377 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/tools/capture.mjs +122 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/tools/mix.py +204 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/LICENSE-three.txt +21 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/environments/RoomEnvironment.js +144 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/BokehPass.js +141 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/EffectComposer.js +231 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/MaskPass.js +104 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/OutputPass.js +97 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/Pass.js +95 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/RenderPass.js +99 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/ShaderPass.js +77 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/postprocessing/UnrealBloomPass.js +415 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/shaders/BokehShader.js +145 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/shaders/CopyShader.js +45 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/shaders/LuminosityHighPassShader.js +64 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/addons/shaders/OutputShader.js +85 -0
- package/plugins/faceless-shorts/styles/tall-tale/example/vendor/three.module.js +6 -0
- package/plugins/faceless-shorts/styles/tall-tale/style-sheet.png +0 -0
- package/plugins/motion-styles/LIBRARY.md +896 -0
- package/plugins/motion-styles/README.md +29 -0
- package/plugins/motion-styles/SKILL.md +70 -0
- package/plugins/motion-styles/catalog.json +2253 -0
- package/plugins/motion-styles/prompts/bio-glow.md +149 -0
- package/plugins/motion-styles/prompts/blueprint.md +145 -0
- package/plugins/motion-styles/prompts/breaking-desk.md +147 -0
- package/plugins/motion-styles/prompts/callout-kit.md +147 -0
- package/plugins/motion-styles/prompts/chalk-talk.md +153 -0
- package/plugins/motion-styles/prompts/chat-story.md +143 -0
- package/plugins/motion-styles/prompts/clay-diorama.md +149 -0
- package/plugins/motion-styles/prompts/clean-tech.md +147 -0
- package/plugins/motion-styles/prompts/comic-panels.md +145 -0
- package/plugins/motion-styles/prompts/cosmic-scale.md +147 -0
- package/plugins/motion-styles/prompts/creator-motion.md +149 -0
- package/plugins/motion-styles/prompts/data-city.md +149 -0
- package/plugins/motion-styles/prompts/data-story.md +147 -0
- package/plugins/motion-styles/prompts/deep-layers.md +147 -0
- package/plugins/motion-styles/prompts/doc-cinema.md +145 -0
- package/plugins/motion-styles/prompts/evidence-board.md +145 -0
- package/plugins/motion-styles/prompts/exploded-view.md +149 -0
- package/plugins/motion-styles/prompts/glass-icons.md +147 -0
- package/plugins/motion-styles/prompts/glitch-pack.md +145 -0
- package/plugins/motion-styles/prompts/globe-arcs.md +147 -0
- package/plugins/motion-styles/prompts/headline-backdrop.md +145 -0
- package/plugins/motion-styles/prompts/iso-cutaway.md +147 -0
- package/plugins/motion-styles/prompts/isotype.md +145 -0
- package/plugins/motion-styles/prompts/karaoke-subs.md +145 -0
- package/plugins/motion-styles/prompts/low-poly-atlas.md +149 -0
- package/plugins/motion-styles/prompts/lower-thirds.md +147 -0
- package/plugins/motion-styles/prompts/marker-board.md +145 -0
- package/plugins/motion-styles/prompts/market-tape.md +145 -0
- package/plugins/motion-styles/prompts/math-canvas.md +145 -0
- package/plugins/motion-styles/prompts/myth-or-fact.md +145 -0
- package/plugins/motion-styles/prompts/neon-line.md +145 -0
- package/plugins/motion-styles/prompts/paper-craft.md +145 -0
- package/plugins/motion-styles/prompts/parchment-map.md +147 -0
- package/plugins/motion-styles/prompts/physics-toybox.md +147 -0
- package/plugins/motion-styles/prompts/pixel-quest.md +145 -0
- package/plugins/motion-styles/prompts/podcast-clip.md +147 -0
- package/plugins/motion-styles/prompts/pop-info.md +145 -0
- package/plugins/motion-styles/prompts/product-turntable.md +149 -0
- package/plugins/motion-styles/prompts/punch-captions.md +145 -0
- package/plugins/motion-styles/prompts/quiz-countdown.md +145 -0
- package/plugins/motion-styles/prompts/quote-cinema.md +145 -0
- package/plugins/motion-styles/prompts/recipe-steps.md +145 -0
- package/plugins/motion-styles/prompts/rubber-hose-reel.md +145 -0
- package/plugins/motion-styles/prompts/shadow-puppets.md +145 -0
- package/plugins/motion-styles/prompts/size-lineup.md +149 -0
- package/plugins/motion-styles/prompts/software-walkthrough.md +147 -0
- package/plugins/motion-styles/prompts/stack-split.md +145 -0
- package/plugins/motion-styles/prompts/sticker-pop.md +145 -0
- package/plugins/motion-styles/prompts/storybook.md +145 -0
- package/plugins/motion-styles/prompts/swiss-grid.md +145 -0
- package/plugins/motion-styles/prompts/synth-grid.md +147 -0
- package/plugins/motion-styles/prompts/tactics-board.md +145 -0
- package/plugins/motion-styles/prompts/terminal.md +145 -0
- package/plugins/motion-styles/prompts/tier-list.md +143 -0
- package/plugins/motion-styles/prompts/timeline-rail.md +145 -0
- package/plugins/motion-styles/prompts/top-5-countdown.md +145 -0
- package/plugins/motion-styles/prompts/versus-split.md +145 -0
- package/plugins/motion-styles/prompts/vhs-camcorder.md +145 -0
- package/plugins/motion-styles/prompts/visual-novel.md +145 -0
- package/plugins/motion-styles/prompts/warm-canvas.md +145 -0
- package/plugins/motion-styles/prompts/woodcut-tale.md +145 -0
- package/plugins/motion-styles/prompts/zine-collage.md +145 -0
- package/plugins/motion-styles/sources/bio-glow.html +639 -0
- package/plugins/motion-styles/sources/blueprint.html +617 -0
- package/plugins/motion-styles/sources/breaking-desk.html +585 -0
- package/plugins/motion-styles/sources/callout-kit.html +586 -0
- package/plugins/motion-styles/sources/chalk-talk.html +597 -0
- package/plugins/motion-styles/sources/chat-story.html +597 -0
- package/plugins/motion-styles/sources/clay-diorama.html +681 -0
- package/plugins/motion-styles/sources/clean-tech.html +554 -0
- package/plugins/motion-styles/sources/comic-panels.html +608 -0
- package/plugins/motion-styles/sources/cosmic-scale.html +628 -0
- package/plugins/motion-styles/sources/creator-motion.html +805 -0
- package/plugins/motion-styles/sources/data-city.html +613 -0
- package/plugins/motion-styles/sources/data-story.html +539 -0
- package/plugins/motion-styles/sources/deep-layers.html +624 -0
- package/plugins/motion-styles/sources/doc-cinema.html +590 -0
- package/plugins/motion-styles/sources/evidence-board.html +610 -0
- package/plugins/motion-styles/sources/exploded-view.html +618 -0
- package/plugins/motion-styles/sources/glass-icons.html +612 -0
- package/plugins/motion-styles/sources/glitch-pack.html +583 -0
- package/plugins/motion-styles/sources/globe-arcs.html +621 -0
- package/plugins/motion-styles/sources/headline-backdrop.html +584 -0
- package/plugins/motion-styles/sources/iso-cutaway.html +621 -0
- package/plugins/motion-styles/sources/isotype.html +588 -0
- package/plugins/motion-styles/sources/karaoke-subs.html +577 -0
- package/plugins/motion-styles/sources/low-poly-atlas.html +621 -0
- package/plugins/motion-styles/sources/lower-thirds.html +582 -0
- package/plugins/motion-styles/sources/marker-board.html +598 -0
- package/plugins/motion-styles/sources/market-tape.html +598 -0
- package/plugins/motion-styles/sources/math-canvas.html +592 -0
- package/plugins/motion-styles/sources/myth-or-fact.html +587 -0
- package/plugins/motion-styles/sources/neon-line.html +597 -0
- package/plugins/motion-styles/sources/paper-craft.html +612 -0
- package/plugins/motion-styles/sources/parchment-map.html +624 -0
- package/plugins/motion-styles/sources/physics-toybox.html +617 -0
- package/plugins/motion-styles/sources/pixel-quest.html +609 -0
- package/plugins/motion-styles/sources/podcast-clip.html +585 -0
- package/plugins/motion-styles/sources/pop-info.html +677 -0
- package/plugins/motion-styles/sources/product-turntable.html +611 -0
- package/plugins/motion-styles/sources/punch-captions.html +583 -0
- package/plugins/motion-styles/sources/quiz-countdown.html +593 -0
- package/plugins/motion-styles/sources/quote-cinema.html +581 -0
- package/plugins/motion-styles/sources/recipe-steps.html +599 -0
- package/plugins/motion-styles/sources/rubber-hose-reel.html +627 -0
- package/plugins/motion-styles/sources/shadow-puppets.html +609 -0
- package/plugins/motion-styles/sources/size-lineup.html +620 -0
- package/plugins/motion-styles/sources/software-walkthrough.html +651 -0
- package/plugins/motion-styles/sources/stack-split.html +588 -0
- package/plugins/motion-styles/sources/sticker-pop.html +587 -0
- package/plugins/motion-styles/sources/storybook.html +600 -0
- package/plugins/motion-styles/sources/swiss-grid.html +590 -0
- package/plugins/motion-styles/sources/synth-grid.html +614 -0
- package/plugins/motion-styles/sources/tactics-board.html +608 -0
- package/plugins/motion-styles/sources/terminal.html +593 -0
- package/plugins/motion-styles/sources/tier-list.html +600 -0
- package/plugins/motion-styles/sources/timeline-rail.html +598 -0
- package/plugins/motion-styles/sources/top-5-countdown.html +589 -0
- package/plugins/motion-styles/sources/versus-split.html +592 -0
- package/plugins/motion-styles/sources/vhs-camcorder.html +587 -0
- package/plugins/motion-styles/sources/visual-novel.html +623 -0
- package/plugins/motion-styles/sources/warm-canvas.html +742 -0
- package/plugins/motion-styles/sources/woodcut-tale.html +598 -0
- package/plugins/motion-styles/sources/zine-collage.html +594 -0
- package/plugins/video-pipeline/.claude-plugin/plugin.json +2 -2
- package/plugins/video-pipeline/skills/.upstream-skills.json +156 -143
- package/plugins/video-pipeline/skills/video-pipeline/references/mcp-tools.md +3 -3
- package/scripts/deep-validate.js +3 -2
- package/src/audio-mixer/mixer.js +69 -0
- package/src/cli/make.js +19 -0
- package/src/harness/lib/browser.mjs +22 -1
- package/src/harness/lib/capture.mjs +33 -11
- package/src/harness/lib/jobs.mjs +16 -1
- package/src/mcp-server/server.js +726 -10
- package/src/pipeline/providers.js +77 -17
- package/src/skills/sync-upstream.js +15 -3
- package/src/utils/media-downloader.js +7 -0
- package/src/utils/tool-installer.js +212 -0
- package/src/utils/transcribe.js +9 -1
- package/src/video-renderer/renderer.js +68 -38
- package/src/video-renderer/scene-animator.js +50 -15
- package/src/workflows/assets.js +49 -5
- package/src/workflows/render.js +2 -0
- package/src/workflows/script.js +14 -3
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AdditiveBlending,
|
|
3
|
+
Color,
|
|
4
|
+
HalfFloatType,
|
|
5
|
+
MeshBasicMaterial,
|
|
6
|
+
ShaderMaterial,
|
|
7
|
+
UniformsUtils,
|
|
8
|
+
Vector2,
|
|
9
|
+
Vector3,
|
|
10
|
+
WebGLRenderTarget
|
|
11
|
+
} from 'three';
|
|
12
|
+
import { Pass, FullScreenQuad } from './Pass.js';
|
|
13
|
+
import { CopyShader } from '../shaders/CopyShader.js';
|
|
14
|
+
import { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* UnrealBloomPass is inspired by the bloom pass of Unreal Engine. It creates a
|
|
18
|
+
* mip map chain of bloom textures and blurs them with different radii. Because
|
|
19
|
+
* of the weighted combination of mips, and because larger blurs are done on
|
|
20
|
+
* higher mips, this effect provides good quality and performance.
|
|
21
|
+
*
|
|
22
|
+
* Reference:
|
|
23
|
+
* - https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/
|
|
24
|
+
*/
|
|
25
|
+
class UnrealBloomPass extends Pass {
|
|
26
|
+
|
|
27
|
+
constructor( resolution, strength, radius, threshold ) {
|
|
28
|
+
|
|
29
|
+
super();
|
|
30
|
+
|
|
31
|
+
this.strength = ( strength !== undefined ) ? strength : 1;
|
|
32
|
+
this.radius = radius;
|
|
33
|
+
this.threshold = threshold;
|
|
34
|
+
this.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );
|
|
35
|
+
|
|
36
|
+
// create color only once here, reuse it later inside the render function
|
|
37
|
+
this.clearColor = new Color( 0, 0, 0 );
|
|
38
|
+
|
|
39
|
+
// render targets
|
|
40
|
+
this.renderTargetsHorizontal = [];
|
|
41
|
+
this.renderTargetsVertical = [];
|
|
42
|
+
this.nMips = 5;
|
|
43
|
+
let resx = Math.round( this.resolution.x / 2 );
|
|
44
|
+
let resy = Math.round( this.resolution.y / 2 );
|
|
45
|
+
|
|
46
|
+
this.renderTargetBright = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
|
|
47
|
+
this.renderTargetBright.texture.name = 'UnrealBloomPass.bright';
|
|
48
|
+
this.renderTargetBright.texture.generateMipmaps = false;
|
|
49
|
+
|
|
50
|
+
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
51
|
+
|
|
52
|
+
const renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
|
|
53
|
+
|
|
54
|
+
renderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;
|
|
55
|
+
renderTargetHorizontal.texture.generateMipmaps = false;
|
|
56
|
+
|
|
57
|
+
this.renderTargetsHorizontal.push( renderTargetHorizontal );
|
|
58
|
+
|
|
59
|
+
const renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
|
|
60
|
+
|
|
61
|
+
renderTargetVertical.texture.name = 'UnrealBloomPass.v' + i;
|
|
62
|
+
renderTargetVertical.texture.generateMipmaps = false;
|
|
63
|
+
|
|
64
|
+
this.renderTargetsVertical.push( renderTargetVertical );
|
|
65
|
+
|
|
66
|
+
resx = Math.round( resx / 2 );
|
|
67
|
+
|
|
68
|
+
resy = Math.round( resy / 2 );
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// luminosity high pass material
|
|
73
|
+
|
|
74
|
+
const highPassShader = LuminosityHighPassShader;
|
|
75
|
+
this.highPassUniforms = UniformsUtils.clone( highPassShader.uniforms );
|
|
76
|
+
|
|
77
|
+
this.highPassUniforms[ 'luminosityThreshold' ].value = threshold;
|
|
78
|
+
this.highPassUniforms[ 'smoothWidth' ].value = 0.01;
|
|
79
|
+
|
|
80
|
+
this.materialHighPassFilter = new ShaderMaterial( {
|
|
81
|
+
uniforms: this.highPassUniforms,
|
|
82
|
+
vertexShader: highPassShader.vertexShader,
|
|
83
|
+
fragmentShader: highPassShader.fragmentShader
|
|
84
|
+
} );
|
|
85
|
+
|
|
86
|
+
// gaussian blur materials
|
|
87
|
+
|
|
88
|
+
this.separableBlurMaterials = [];
|
|
89
|
+
const kernelSizeArray = [ 3, 5, 7, 9, 11 ];
|
|
90
|
+
resx = Math.round( this.resolution.x / 2 );
|
|
91
|
+
resy = Math.round( this.resolution.y / 2 );
|
|
92
|
+
|
|
93
|
+
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
94
|
+
|
|
95
|
+
this.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );
|
|
96
|
+
|
|
97
|
+
this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
|
|
98
|
+
|
|
99
|
+
resx = Math.round( resx / 2 );
|
|
100
|
+
|
|
101
|
+
resy = Math.round( resy / 2 );
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// composite material
|
|
106
|
+
|
|
107
|
+
this.compositeMaterial = this.getCompositeMaterial( this.nMips );
|
|
108
|
+
this.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;
|
|
109
|
+
this.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;
|
|
110
|
+
this.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;
|
|
111
|
+
this.compositeMaterial.uniforms[ 'blurTexture4' ].value = this.renderTargetsVertical[ 3 ].texture;
|
|
112
|
+
this.compositeMaterial.uniforms[ 'blurTexture5' ].value = this.renderTargetsVertical[ 4 ].texture;
|
|
113
|
+
this.compositeMaterial.uniforms[ 'bloomStrength' ].value = strength;
|
|
114
|
+
this.compositeMaterial.uniforms[ 'bloomRadius' ].value = 0.1;
|
|
115
|
+
|
|
116
|
+
const bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];
|
|
117
|
+
this.compositeMaterial.uniforms[ 'bloomFactors' ].value = bloomFactors;
|
|
118
|
+
this.bloomTintColors = [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ];
|
|
119
|
+
this.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;
|
|
120
|
+
|
|
121
|
+
// blend material
|
|
122
|
+
|
|
123
|
+
const copyShader = CopyShader;
|
|
124
|
+
|
|
125
|
+
this.copyUniforms = UniformsUtils.clone( copyShader.uniforms );
|
|
126
|
+
|
|
127
|
+
this.blendMaterial = new ShaderMaterial( {
|
|
128
|
+
uniforms: this.copyUniforms,
|
|
129
|
+
vertexShader: copyShader.vertexShader,
|
|
130
|
+
fragmentShader: copyShader.fragmentShader,
|
|
131
|
+
blending: AdditiveBlending,
|
|
132
|
+
depthTest: false,
|
|
133
|
+
depthWrite: false,
|
|
134
|
+
transparent: true
|
|
135
|
+
} );
|
|
136
|
+
|
|
137
|
+
this.enabled = true;
|
|
138
|
+
this.needsSwap = false;
|
|
139
|
+
|
|
140
|
+
this._oldClearColor = new Color();
|
|
141
|
+
this.oldClearAlpha = 1;
|
|
142
|
+
|
|
143
|
+
this.basic = new MeshBasicMaterial();
|
|
144
|
+
|
|
145
|
+
this.fsQuad = new FullScreenQuad( null );
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
dispose() {
|
|
150
|
+
|
|
151
|
+
for ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {
|
|
152
|
+
|
|
153
|
+
this.renderTargetsHorizontal[ i ].dispose();
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
for ( let i = 0; i < this.renderTargetsVertical.length; i ++ ) {
|
|
158
|
+
|
|
159
|
+
this.renderTargetsVertical[ i ].dispose();
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
this.renderTargetBright.dispose();
|
|
164
|
+
|
|
165
|
+
//
|
|
166
|
+
|
|
167
|
+
for ( let i = 0; i < this.separableBlurMaterials.length; i ++ ) {
|
|
168
|
+
|
|
169
|
+
this.separableBlurMaterials[ i ].dispose();
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
this.compositeMaterial.dispose();
|
|
174
|
+
this.blendMaterial.dispose();
|
|
175
|
+
this.basic.dispose();
|
|
176
|
+
|
|
177
|
+
//
|
|
178
|
+
|
|
179
|
+
this.fsQuad.dispose();
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
setSize( width, height ) {
|
|
184
|
+
|
|
185
|
+
let resx = Math.round( width / 2 );
|
|
186
|
+
let resy = Math.round( height / 2 );
|
|
187
|
+
|
|
188
|
+
this.renderTargetBright.setSize( resx, resy );
|
|
189
|
+
|
|
190
|
+
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
191
|
+
|
|
192
|
+
this.renderTargetsHorizontal[ i ].setSize( resx, resy );
|
|
193
|
+
this.renderTargetsVertical[ i ].setSize( resx, resy );
|
|
194
|
+
|
|
195
|
+
this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
|
|
196
|
+
|
|
197
|
+
resx = Math.round( resx / 2 );
|
|
198
|
+
resy = Math.round( resy / 2 );
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
|
|
205
|
+
|
|
206
|
+
renderer.getClearColor( this._oldClearColor );
|
|
207
|
+
this.oldClearAlpha = renderer.getClearAlpha();
|
|
208
|
+
const oldAutoClear = renderer.autoClear;
|
|
209
|
+
renderer.autoClear = false;
|
|
210
|
+
|
|
211
|
+
renderer.setClearColor( this.clearColor, 0 );
|
|
212
|
+
|
|
213
|
+
if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
|
|
214
|
+
|
|
215
|
+
// Render input to screen
|
|
216
|
+
|
|
217
|
+
if ( this.renderToScreen ) {
|
|
218
|
+
|
|
219
|
+
this.fsQuad.material = this.basic;
|
|
220
|
+
this.basic.map = readBuffer.texture;
|
|
221
|
+
|
|
222
|
+
renderer.setRenderTarget( null );
|
|
223
|
+
renderer.clear();
|
|
224
|
+
this.fsQuad.render( renderer );
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// 1. Extract Bright Areas
|
|
229
|
+
|
|
230
|
+
this.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;
|
|
231
|
+
this.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;
|
|
232
|
+
this.fsQuad.material = this.materialHighPassFilter;
|
|
233
|
+
|
|
234
|
+
renderer.setRenderTarget( this.renderTargetBright );
|
|
235
|
+
renderer.clear();
|
|
236
|
+
this.fsQuad.render( renderer );
|
|
237
|
+
|
|
238
|
+
// 2. Blur All the mips progressively
|
|
239
|
+
|
|
240
|
+
let inputRenderTarget = this.renderTargetBright;
|
|
241
|
+
|
|
242
|
+
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
243
|
+
|
|
244
|
+
this.fsQuad.material = this.separableBlurMaterials[ i ];
|
|
245
|
+
|
|
246
|
+
this.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;
|
|
247
|
+
this.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;
|
|
248
|
+
renderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );
|
|
249
|
+
renderer.clear();
|
|
250
|
+
this.fsQuad.render( renderer );
|
|
251
|
+
|
|
252
|
+
this.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;
|
|
253
|
+
this.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;
|
|
254
|
+
renderer.setRenderTarget( this.renderTargetsVertical[ i ] );
|
|
255
|
+
renderer.clear();
|
|
256
|
+
this.fsQuad.render( renderer );
|
|
257
|
+
|
|
258
|
+
inputRenderTarget = this.renderTargetsVertical[ i ];
|
|
259
|
+
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Composite All the mips
|
|
263
|
+
|
|
264
|
+
this.fsQuad.material = this.compositeMaterial;
|
|
265
|
+
this.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;
|
|
266
|
+
this.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;
|
|
267
|
+
this.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;
|
|
268
|
+
|
|
269
|
+
renderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );
|
|
270
|
+
renderer.clear();
|
|
271
|
+
this.fsQuad.render( renderer );
|
|
272
|
+
|
|
273
|
+
// Blend it additively over the input texture
|
|
274
|
+
|
|
275
|
+
this.fsQuad.material = this.blendMaterial;
|
|
276
|
+
this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;
|
|
277
|
+
|
|
278
|
+
if ( maskActive ) renderer.state.buffers.stencil.setTest( true );
|
|
279
|
+
|
|
280
|
+
if ( this.renderToScreen ) {
|
|
281
|
+
|
|
282
|
+
renderer.setRenderTarget( null );
|
|
283
|
+
this.fsQuad.render( renderer );
|
|
284
|
+
|
|
285
|
+
} else {
|
|
286
|
+
|
|
287
|
+
renderer.setRenderTarget( readBuffer );
|
|
288
|
+
this.fsQuad.render( renderer );
|
|
289
|
+
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Restore renderer settings
|
|
293
|
+
|
|
294
|
+
renderer.setClearColor( this._oldClearColor, this.oldClearAlpha );
|
|
295
|
+
renderer.autoClear = oldAutoClear;
|
|
296
|
+
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
getSeperableBlurMaterial( kernelRadius ) {
|
|
300
|
+
|
|
301
|
+
const coefficients = [];
|
|
302
|
+
|
|
303
|
+
for ( let i = 0; i < kernelRadius; i ++ ) {
|
|
304
|
+
|
|
305
|
+
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return new ShaderMaterial( {
|
|
310
|
+
|
|
311
|
+
defines: {
|
|
312
|
+
'KERNEL_RADIUS': kernelRadius
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
uniforms: {
|
|
316
|
+
'colorTexture': { value: null },
|
|
317
|
+
'invSize': { value: new Vector2( 0.5, 0.5 ) }, // inverse texture size
|
|
318
|
+
'direction': { value: new Vector2( 0.5, 0.5 ) },
|
|
319
|
+
'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients
|
|
320
|
+
},
|
|
321
|
+
|
|
322
|
+
vertexShader:
|
|
323
|
+
`varying vec2 vUv;
|
|
324
|
+
void main() {
|
|
325
|
+
vUv = uv;
|
|
326
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
327
|
+
}`,
|
|
328
|
+
|
|
329
|
+
fragmentShader:
|
|
330
|
+
`#include <common>
|
|
331
|
+
varying vec2 vUv;
|
|
332
|
+
uniform sampler2D colorTexture;
|
|
333
|
+
uniform vec2 invSize;
|
|
334
|
+
uniform vec2 direction;
|
|
335
|
+
uniform float gaussianCoefficients[KERNEL_RADIUS];
|
|
336
|
+
|
|
337
|
+
void main() {
|
|
338
|
+
float weightSum = gaussianCoefficients[0];
|
|
339
|
+
vec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;
|
|
340
|
+
for( int i = 1; i < KERNEL_RADIUS; i ++ ) {
|
|
341
|
+
float x = float(i);
|
|
342
|
+
float w = gaussianCoefficients[i];
|
|
343
|
+
vec2 uvOffset = direction * invSize * x;
|
|
344
|
+
vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
|
|
345
|
+
vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
|
|
346
|
+
diffuseSum += (sample1 + sample2) * w;
|
|
347
|
+
weightSum += 2.0 * w;
|
|
348
|
+
}
|
|
349
|
+
gl_FragColor = vec4(diffuseSum/weightSum, 1.0);
|
|
350
|
+
}`
|
|
351
|
+
} );
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
getCompositeMaterial( nMips ) {
|
|
356
|
+
|
|
357
|
+
return new ShaderMaterial( {
|
|
358
|
+
|
|
359
|
+
defines: {
|
|
360
|
+
'NUM_MIPS': nMips
|
|
361
|
+
},
|
|
362
|
+
|
|
363
|
+
uniforms: {
|
|
364
|
+
'blurTexture1': { value: null },
|
|
365
|
+
'blurTexture2': { value: null },
|
|
366
|
+
'blurTexture3': { value: null },
|
|
367
|
+
'blurTexture4': { value: null },
|
|
368
|
+
'blurTexture5': { value: null },
|
|
369
|
+
'bloomStrength': { value: 1.0 },
|
|
370
|
+
'bloomFactors': { value: null },
|
|
371
|
+
'bloomTintColors': { value: null },
|
|
372
|
+
'bloomRadius': { value: 0.0 }
|
|
373
|
+
},
|
|
374
|
+
|
|
375
|
+
vertexShader:
|
|
376
|
+
`varying vec2 vUv;
|
|
377
|
+
void main() {
|
|
378
|
+
vUv = uv;
|
|
379
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
380
|
+
}`,
|
|
381
|
+
|
|
382
|
+
fragmentShader:
|
|
383
|
+
`varying vec2 vUv;
|
|
384
|
+
uniform sampler2D blurTexture1;
|
|
385
|
+
uniform sampler2D blurTexture2;
|
|
386
|
+
uniform sampler2D blurTexture3;
|
|
387
|
+
uniform sampler2D blurTexture4;
|
|
388
|
+
uniform sampler2D blurTexture5;
|
|
389
|
+
uniform float bloomStrength;
|
|
390
|
+
uniform float bloomRadius;
|
|
391
|
+
uniform float bloomFactors[NUM_MIPS];
|
|
392
|
+
uniform vec3 bloomTintColors[NUM_MIPS];
|
|
393
|
+
|
|
394
|
+
float lerpBloomFactor(const in float factor) {
|
|
395
|
+
float mirrorFactor = 1.2 - factor;
|
|
396
|
+
return mix(factor, mirrorFactor, bloomRadius);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
void main() {
|
|
400
|
+
gl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +
|
|
401
|
+
lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +
|
|
402
|
+
lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +
|
|
403
|
+
lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +
|
|
404
|
+
lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );
|
|
405
|
+
}`
|
|
406
|
+
} );
|
|
407
|
+
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
UnrealBloomPass.BlurDirectionX = new Vector2( 1.0, 0.0 );
|
|
413
|
+
UnrealBloomPass.BlurDirectionY = new Vector2( 0.0, 1.0 );
|
|
414
|
+
|
|
415
|
+
export { UnrealBloomPass };
|
package/plugins/faceless-shorts/styles/night-file/example/vendor/addons/shaders/BokehShader.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Depth-of-field shader with bokeh
|
|
3
|
+
* ported from GLSL shader by Martins Upitis
|
|
4
|
+
* http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const BokehShader = {
|
|
8
|
+
|
|
9
|
+
name: 'BokehShader',
|
|
10
|
+
|
|
11
|
+
defines: {
|
|
12
|
+
'DEPTH_PACKING': 1,
|
|
13
|
+
'PERSPECTIVE_CAMERA': 1,
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
uniforms: {
|
|
17
|
+
|
|
18
|
+
'tColor': { value: null },
|
|
19
|
+
'tDepth': { value: null },
|
|
20
|
+
'focus': { value: 1.0 },
|
|
21
|
+
'aspect': { value: 1.0 },
|
|
22
|
+
'aperture': { value: 0.025 },
|
|
23
|
+
'maxblur': { value: 0.01 },
|
|
24
|
+
'nearClip': { value: 1.0 },
|
|
25
|
+
'farClip': { value: 1000.0 },
|
|
26
|
+
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
vertexShader: /* glsl */`
|
|
30
|
+
|
|
31
|
+
varying vec2 vUv;
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
|
|
35
|
+
vUv = uv;
|
|
36
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
37
|
+
|
|
38
|
+
}`,
|
|
39
|
+
|
|
40
|
+
fragmentShader: /* glsl */`
|
|
41
|
+
|
|
42
|
+
#include <common>
|
|
43
|
+
|
|
44
|
+
varying vec2 vUv;
|
|
45
|
+
|
|
46
|
+
uniform sampler2D tColor;
|
|
47
|
+
uniform sampler2D tDepth;
|
|
48
|
+
|
|
49
|
+
uniform float maxblur; // max blur amount
|
|
50
|
+
uniform float aperture; // aperture - bigger values for shallower depth of field
|
|
51
|
+
|
|
52
|
+
uniform float nearClip;
|
|
53
|
+
uniform float farClip;
|
|
54
|
+
|
|
55
|
+
uniform float focus;
|
|
56
|
+
uniform float aspect;
|
|
57
|
+
|
|
58
|
+
#include <packing>
|
|
59
|
+
|
|
60
|
+
float getDepth( const in vec2 screenPosition ) {
|
|
61
|
+
#if DEPTH_PACKING == 1
|
|
62
|
+
return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );
|
|
63
|
+
#else
|
|
64
|
+
return texture2D( tDepth, screenPosition ).x;
|
|
65
|
+
#endif
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
float getViewZ( const in float depth ) {
|
|
69
|
+
#if PERSPECTIVE_CAMERA == 1
|
|
70
|
+
return perspectiveDepthToViewZ( depth, nearClip, farClip );
|
|
71
|
+
#else
|
|
72
|
+
return orthographicDepthToViewZ( depth, nearClip, farClip );
|
|
73
|
+
#endif
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
void main() {
|
|
78
|
+
|
|
79
|
+
vec2 aspectcorrect = vec2( 1.0, aspect );
|
|
80
|
+
|
|
81
|
+
float viewZ = getViewZ( getDepth( vUv ) );
|
|
82
|
+
|
|
83
|
+
float factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation
|
|
84
|
+
|
|
85
|
+
vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );
|
|
86
|
+
|
|
87
|
+
vec2 dofblur9 = dofblur * 0.9;
|
|
88
|
+
vec2 dofblur7 = dofblur * 0.7;
|
|
89
|
+
vec2 dofblur4 = dofblur * 0.4;
|
|
90
|
+
|
|
91
|
+
vec4 col = vec4( 0.0 );
|
|
92
|
+
|
|
93
|
+
col += texture2D( tColor, vUv.xy );
|
|
94
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );
|
|
95
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );
|
|
96
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );
|
|
97
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );
|
|
98
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );
|
|
99
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );
|
|
100
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );
|
|
101
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );
|
|
102
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );
|
|
103
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );
|
|
104
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );
|
|
105
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );
|
|
106
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );
|
|
107
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );
|
|
108
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );
|
|
109
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );
|
|
110
|
+
|
|
111
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );
|
|
112
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );
|
|
113
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );
|
|
114
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );
|
|
115
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );
|
|
116
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );
|
|
117
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );
|
|
118
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );
|
|
119
|
+
|
|
120
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );
|
|
121
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );
|
|
122
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );
|
|
123
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );
|
|
124
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );
|
|
125
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );
|
|
126
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );
|
|
127
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );
|
|
128
|
+
|
|
129
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );
|
|
130
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );
|
|
131
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );
|
|
132
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );
|
|
133
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );
|
|
134
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );
|
|
135
|
+
col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );
|
|
136
|
+
col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );
|
|
137
|
+
|
|
138
|
+
gl_FragColor = col / 41.0;
|
|
139
|
+
gl_FragColor.a = 1.0;
|
|
140
|
+
|
|
141
|
+
}`
|
|
142
|
+
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export { BokehShader };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-screen textured quad shader
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const CopyShader = {
|
|
6
|
+
|
|
7
|
+
name: 'CopyShader',
|
|
8
|
+
|
|
9
|
+
uniforms: {
|
|
10
|
+
|
|
11
|
+
'tDiffuse': { value: null },
|
|
12
|
+
'opacity': { value: 1.0 }
|
|
13
|
+
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
vertexShader: /* glsl */`
|
|
17
|
+
|
|
18
|
+
varying vec2 vUv;
|
|
19
|
+
|
|
20
|
+
void main() {
|
|
21
|
+
|
|
22
|
+
vUv = uv;
|
|
23
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
24
|
+
|
|
25
|
+
}`,
|
|
26
|
+
|
|
27
|
+
fragmentShader: /* glsl */`
|
|
28
|
+
|
|
29
|
+
uniform float opacity;
|
|
30
|
+
|
|
31
|
+
uniform sampler2D tDiffuse;
|
|
32
|
+
|
|
33
|
+
varying vec2 vUv;
|
|
34
|
+
|
|
35
|
+
void main() {
|
|
36
|
+
|
|
37
|
+
vec4 texel = texture2D( tDiffuse, vUv );
|
|
38
|
+
gl_FragColor = opacity * texel;
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
}`
|
|
42
|
+
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { CopyShader };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Color
|
|
3
|
+
} from 'three';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Luminosity
|
|
7
|
+
* http://en.wikipedia.org/wiki/Luminosity
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const LuminosityHighPassShader = {
|
|
11
|
+
|
|
12
|
+
name: 'LuminosityHighPassShader',
|
|
13
|
+
|
|
14
|
+
shaderID: 'luminosityHighPass',
|
|
15
|
+
|
|
16
|
+
uniforms: {
|
|
17
|
+
|
|
18
|
+
'tDiffuse': { value: null },
|
|
19
|
+
'luminosityThreshold': { value: 1.0 },
|
|
20
|
+
'smoothWidth': { value: 1.0 },
|
|
21
|
+
'defaultColor': { value: new Color( 0x000000 ) },
|
|
22
|
+
'defaultOpacity': { value: 0.0 }
|
|
23
|
+
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
vertexShader: /* glsl */`
|
|
27
|
+
|
|
28
|
+
varying vec2 vUv;
|
|
29
|
+
|
|
30
|
+
void main() {
|
|
31
|
+
|
|
32
|
+
vUv = uv;
|
|
33
|
+
|
|
34
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
35
|
+
|
|
36
|
+
}`,
|
|
37
|
+
|
|
38
|
+
fragmentShader: /* glsl */`
|
|
39
|
+
|
|
40
|
+
uniform sampler2D tDiffuse;
|
|
41
|
+
uniform vec3 defaultColor;
|
|
42
|
+
uniform float defaultOpacity;
|
|
43
|
+
uniform float luminosityThreshold;
|
|
44
|
+
uniform float smoothWidth;
|
|
45
|
+
|
|
46
|
+
varying vec2 vUv;
|
|
47
|
+
|
|
48
|
+
void main() {
|
|
49
|
+
|
|
50
|
+
vec4 texel = texture2D( tDiffuse, vUv );
|
|
51
|
+
|
|
52
|
+
float v = luminance( texel.xyz );
|
|
53
|
+
|
|
54
|
+
vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );
|
|
55
|
+
|
|
56
|
+
float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );
|
|
57
|
+
|
|
58
|
+
gl_FragColor = mix( outputColor, texel, alpha );
|
|
59
|
+
|
|
60
|
+
}`
|
|
61
|
+
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export { LuminosityHighPassShader };
|