voxflow 1.14.0 → 1.15.1
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/README.md +69 -2
- package/bin/voxflow.js +27 -0
- package/dist/index.js +1 -1
- package/dist/remotion-bundle/02a2fb2eb80bc7bf.woff2 +0 -0
- package/dist/remotion-bundle/052ca5351e5e06ba.woff2 +0 -0
- package/dist/remotion-bundle/05853dd28f4019cb.woff2 +0 -0
- package/dist/remotion-bundle/072ead3737f7c0d0.woff2 +0 -0
- package/dist/remotion-bundle/07d4248613c86a2e.woff2 +0 -0
- package/dist/remotion-bundle/0884a5c2d1d2d99b.woff2 +0 -0
- package/dist/remotion-bundle/0b0e185b2752095e.woff2 +0 -0
- package/dist/remotion-bundle/0e66c11bde067d91.woff2 +0 -0
- package/dist/remotion-bundle/0f7794cfba2c5d21.woff2 +0 -0
- package/dist/remotion-bundle/0fdbae5a4365783a.woff2 +0 -0
- package/dist/remotion-bundle/112.bundle.js +11 -0
- package/dist/remotion-bundle/112.bundle.js.map +1 -0
- package/dist/remotion-bundle/113.bundle.js +11 -0
- package/dist/remotion-bundle/113.bundle.js.map +1 -0
- package/dist/remotion-bundle/119cae0c4c16f7ed.woff2 +0 -0
- package/dist/remotion-bundle/14725f649fd1e78c.woff2 +0 -0
- package/dist/remotion-bundle/14abe9e3f95f7888.woff2 +0 -0
- package/dist/remotion-bundle/163.bundle.js +14678 -0
- package/dist/remotion-bundle/163.bundle.js.map +1 -0
- package/dist/remotion-bundle/1808c54072bf6d14.woff2 +0 -0
- package/dist/remotion-bundle/18948bec3e3012fe.woff2 +0 -0
- package/dist/remotion-bundle/1a661c60d0fc84fc.woff2 +0 -0
- package/dist/remotion-bundle/1af94941e1bc7e1e.woff2 +0 -0
- package/dist/remotion-bundle/1bee0219595f606c.woff2 +0 -0
- package/dist/remotion-bundle/1bfd5da7ce9d4ec4.woff2 +0 -0
- package/dist/remotion-bundle/1c158d56f1884f3f.woff2 +0 -0
- package/dist/remotion-bundle/1cf5e88e667610eb.woff2 +0 -0
- package/dist/remotion-bundle/1d431bd10f53c481.woff2 +0 -0
- package/dist/remotion-bundle/1d701a81a7670db2.woff2 +0 -0
- package/dist/remotion-bundle/1da0fecad4240f16.woff2 +0 -0
- package/dist/remotion-bundle/1ed14d3d0c5c63fe.woff2 +0 -0
- package/dist/remotion-bundle/1edfecf40e586f53.woff2 +0 -0
- package/dist/remotion-bundle/1f479711bc34b054.woff +0 -0
- package/dist/remotion-bundle/1f86e54a0ff5fcd1.woff2 +0 -0
- package/dist/remotion-bundle/2043ea87d9aabd11.woff2 +0 -0
- package/dist/remotion-bundle/20563c39ee8a0e40.woff2 +0 -0
- package/dist/remotion-bundle/20c231590fd12c44.woff2 +0 -0
- package/dist/remotion-bundle/20ce61713f754c07.woff2 +0 -0
- package/dist/remotion-bundle/21eb9306fce24bb1.woff2 +0 -0
- package/dist/remotion-bundle/244bf71c0cc851af.woff2 +0 -0
- package/dist/remotion-bundle/274d4cfc02bffbcb.woff2 +0 -0
- package/dist/remotion-bundle/275.bundle.js +21 -0
- package/dist/remotion-bundle/275.bundle.js.map +1 -0
- package/dist/remotion-bundle/2958f540b39513dc.woff2 +0 -0
- package/dist/remotion-bundle/2a168b98fd97722e.woff2 +0 -0
- package/dist/remotion-bundle/2d1f6373937ab55f.woff2 +0 -0
- package/dist/remotion-bundle/2d213ae47ff6daa9.woff2 +0 -0
- package/dist/remotion-bundle/2e4b1f04fcd05047.woff2 +0 -0
- package/dist/remotion-bundle/304170d98f4c4563.woff2 +0 -0
- package/dist/remotion-bundle/30d02e136e7a5642.woff2 +0 -0
- package/dist/remotion-bundle/3135562b52a714cd.woff2 +0 -0
- package/dist/remotion-bundle/313713af2c8144e9.woff2 +0 -0
- package/dist/remotion-bundle/325fa4108d2285b9.woff2 +0 -0
- package/dist/remotion-bundle/338e927ed3345e0c.woff2 +0 -0
- package/dist/remotion-bundle/35fc6b190365bc17.woff2 +0 -0
- package/dist/remotion-bundle/37a51f1122d4efc5.woff2 +0 -0
- package/dist/remotion-bundle/39a4d63e02736f5e.woff2 +0 -0
- package/dist/remotion-bundle/3a00e0d62dfc4171.woff2 +0 -0
- package/dist/remotion-bundle/3a6955e6561affe1.woff2 +0 -0
- package/dist/remotion-bundle/3c573945aef49b89.woff2 +0 -0
- package/dist/remotion-bundle/3cdbfbfa23b516a5.woff2 +0 -0
- package/dist/remotion-bundle/3e42f85a9e64ca8a.woff2 +0 -0
- package/dist/remotion-bundle/3e83eaf1ec859415.woff2 +0 -0
- package/dist/remotion-bundle/3f3c8c90de1250ee.woff2 +0 -0
- package/dist/remotion-bundle/434.bundle.js +205 -0
- package/dist/remotion-bundle/434.bundle.js.map +1 -0
- package/dist/remotion-bundle/44ffc6ca4d781692.woff2 +0 -0
- package/dist/remotion-bundle/4670d9c4580b09eb.woff2 +0 -0
- package/dist/remotion-bundle/479756881b302824.woff2 +0 -0
- package/dist/remotion-bundle/481b82134bfa9c82.woff2 +0 -0
- package/dist/remotion-bundle/48d27029626f4328.woff2 +0 -0
- package/dist/remotion-bundle/49b7b2a30329c511.woff2 +0 -0
- package/dist/remotion-bundle/4c8b25a1a9337045.woff2 +0 -0
- package/dist/remotion-bundle/4cba14788ca9259b.woff2 +0 -0
- package/dist/remotion-bundle/4cd6c589c004a6a7.woff2 +0 -0
- package/dist/remotion-bundle/4cd8d79c1021608d.woff2 +0 -0
- package/dist/remotion-bundle/4d8fa99b3f00f9f0.woff2 +0 -0
- package/dist/remotion-bundle/4e7805a643f86d53.woff2 +0 -0
- package/dist/remotion-bundle/4ff91be454542e3f.woff2 +0 -0
- package/dist/remotion-bundle/504cbcba1f63591b.woff2 +0 -0
- package/dist/remotion-bundle/5202d792e5791d6c.woff2 +0 -0
- package/dist/remotion-bundle/534db5ad4770cc1d.woff2 +0 -0
- package/dist/remotion-bundle/53b9568eb85f866b.woff2 +0 -0
- package/dist/remotion-bundle/543ad386ca171de9.woff2 +0 -0
- package/dist/remotion-bundle/54798e55bbf7976e.woff2 +0 -0
- package/dist/remotion-bundle/580.bundle.js +11 -0
- package/dist/remotion-bundle/580.bundle.js.map +1 -0
- package/dist/remotion-bundle/58d174d1193af6d1.woff2 +0 -0
- package/dist/remotion-bundle/591d29ff3ff53c80.woff2 +0 -0
- package/dist/remotion-bundle/5c28c4f4824383c6.woff2 +0 -0
- package/dist/remotion-bundle/5da9740d2ce894c8.woff2 +0 -0
- package/dist/remotion-bundle/6197735364642360.woff2 +0 -0
- package/dist/remotion-bundle/6265a4335724080f.woff2 +0 -0
- package/dist/remotion-bundle/633f5e4f6394daa7.woff2 +0 -0
- package/dist/remotion-bundle/637d95ace6a69c49.woff2 +0 -0
- package/dist/remotion-bundle/648e04a04dacff8f.woff2 +0 -0
- package/dist/remotion-bundle/64a6e83045a008b2.woff2 +0 -0
- package/dist/remotion-bundle/651.bundle.js +11 -0
- package/dist/remotion-bundle/651.bundle.js.map +1 -0
- package/dist/remotion-bundle/65e2a988c070facc.woff2 +0 -0
- package/dist/remotion-bundle/66a2f6ce5cc69105.woff2 +0 -0
- package/dist/remotion-bundle/690.bundle.js +3479 -0
- package/dist/remotion-bundle/690.bundle.js.map +1 -0
- package/dist/remotion-bundle/690ff55252ca715d.woff2 +0 -0
- package/dist/remotion-bundle/6a01a1cff49314fc.woff2 +0 -0
- package/dist/remotion-bundle/6cbc32670982986c.woff2 +0 -0
- package/dist/remotion-bundle/6d3cc42ae547f454.woff2 +0 -0
- package/dist/remotion-bundle/6d8f4cfa1ddc0830.woff2 +0 -0
- package/dist/remotion-bundle/6e4d7c6ae65e2dc3.woff2 +0 -0
- package/dist/remotion-bundle/6e86418bbcefb2e8.woff2 +0 -0
- package/dist/remotion-bundle/6ee02884b29cf7fb.woff2 +0 -0
- package/dist/remotion-bundle/6f436a74c9e3252c.woff2 +0 -0
- package/dist/remotion-bundle/78c8022f1657618b.woff2 +0 -0
- package/dist/remotion-bundle/7c5444169792bca4.woff2 +0 -0
- package/dist/remotion-bundle/7c86bddd9d997212.woff2 +0 -0
- package/dist/remotion-bundle/7e1284684767f584.woff2 +0 -0
- package/dist/remotion-bundle/7e81c17522d182b2.woff2 +0 -0
- package/dist/remotion-bundle/7eb87be198f7858c.woff2 +0 -0
- package/dist/remotion-bundle/8060c928f948aab5.woff2 +0 -0
- package/dist/remotion-bundle/80bc9dfbea2b35ae.woff2 +0 -0
- package/dist/remotion-bundle/811b83f69963bb48.woff2 +0 -0
- package/dist/remotion-bundle/813.bundle.js +117511 -0
- package/dist/remotion-bundle/813.bundle.js.map +1 -0
- package/dist/remotion-bundle/84df492e349f82e9.woff2 +0 -0
- package/dist/remotion-bundle/8501bfd73eb36f2b.woff2 +0 -0
- package/dist/remotion-bundle/854236a8376093fe.woff2 +0 -0
- package/dist/remotion-bundle/8571d74529082753.woff2 +0 -0
- package/dist/remotion-bundle/860bf44f8e6f4b5d.woff2 +0 -0
- package/dist/remotion-bundle/879.bundle.js +64 -0
- package/dist/remotion-bundle/879.bundle.js.map +1 -0
- package/dist/remotion-bundle/887dd482f848d56f.woff2 +0 -0
- package/dist/remotion-bundle/89b2132e85fbbb5a.woff2 +0 -0
- package/dist/remotion-bundle/8ba60d6c306010c2.woff2 +0 -0
- package/dist/remotion-bundle/8c7c4dadea897806.woff2 +0 -0
- package/dist/remotion-bundle/8c943f9999706f61.woff2 +0 -0
- package/dist/remotion-bundle/8f2a718c90575cc9.woff2 +0 -0
- package/dist/remotion-bundle/906b6edb3e1772c9.woff2 +0 -0
- package/dist/remotion-bundle/930ff9daccdf14eb.woff2 +0 -0
- package/dist/remotion-bundle/934db2f1c403c4d0.woff2 +0 -0
- package/dist/remotion-bundle/938.bundle.js +451 -0
- package/dist/remotion-bundle/938.bundle.js.map +1 -0
- package/dist/remotion-bundle/967.bundle.js +4462 -0
- package/dist/remotion-bundle/967.bundle.js.map +1 -0
- package/dist/remotion-bundle/9684a1093d3c02ce.woff2 +0 -0
- package/dist/remotion-bundle/973dcd0faa6116cc.woff2 +0 -0
- package/dist/remotion-bundle/9745400694e76cd8.woff2 +0 -0
- package/dist/remotion-bundle/999ef957bed3bdca.woff2 +0 -0
- package/dist/remotion-bundle/99a3d67c8b0f43e3.woff2 +0 -0
- package/dist/remotion-bundle/a0586c3e03127283.woff2 +0 -0
- package/dist/remotion-bundle/a0eb654fdae46269.woff2 +0 -0
- package/dist/remotion-bundle/a20e35d3b08f7994.woff2 +0 -0
- package/dist/remotion-bundle/a2dcaced7c8c25ab.woff2 +0 -0
- package/dist/remotion-bundle/a79255a972a2681a.woff2 +0 -0
- package/dist/remotion-bundle/a804b352cb9fec1a.woff2 +0 -0
- package/dist/remotion-bundle/aae7117164e1eabc.woff2 +0 -0
- package/dist/remotion-bundle/affd121385d0442d.woff2 +0 -0
- package/dist/remotion-bundle/b19a6083987ee0d7.woff2 +0 -0
- package/dist/remotion-bundle/b1b2bd04d8637981.woff2 +0 -0
- package/dist/remotion-bundle/b2c07f341486be87.woff2 +0 -0
- package/dist/remotion-bundle/b33d8f82e575c4ce.woff2 +0 -0
- package/dist/remotion-bundle/b366c0bed35ef491.woff2 +0 -0
- package/dist/remotion-bundle/b41e857ec1b85642.woff2 +0 -0
- package/dist/remotion-bundle/b420bb34ccf23e7f.woff2 +0 -0
- package/dist/remotion-bundle/b4f7bf4efb0c0ccf.woff2 +0 -0
- package/dist/remotion-bundle/b60fe5eca03cff93.woff2 +0 -0
- package/dist/remotion-bundle/b6bd31a336e64bce.woff2 +0 -0
- package/dist/remotion-bundle/b6d2befba3dfefeb.woff2 +0 -0
- package/dist/remotion-bundle/b75f39ab06c43bf4.woff2 +0 -0
- package/dist/remotion-bundle/b77880e8c413d4fd.woff2 +0 -0
- package/dist/remotion-bundle/b7e38ec441e4a77a.woff2 +0 -0
- package/dist/remotion-bundle/b83baa383ff0bf2b.woff2 +0 -0
- package/dist/remotion-bundle/b9ad7b6c0a11450a.woff2 +0 -0
- package/dist/remotion-bundle/baf84486e8ae3aaf.woff2 +0 -0
- package/dist/remotion-bundle/bc047b1f6869cffa.woff2 +0 -0
- package/dist/remotion-bundle/bf4f3ac6e93f33aa.woff2 +0 -0
- package/dist/remotion-bundle/bf6835ffec5897a2.woff2 +0 -0
- package/dist/remotion-bundle/bf8885f581eb1724.woff2 +0 -0
- package/dist/remotion-bundle/bundle.js +83376 -0
- package/dist/remotion-bundle/bundle.js.map +1 -0
- package/dist/remotion-bundle/c03f046bccd789d0.woff2 +0 -0
- package/dist/remotion-bundle/c0bb1f8962b73bc3.woff2 +0 -0
- package/dist/remotion-bundle/c1003f9a7db6e1cf.woff2 +0 -0
- package/dist/remotion-bundle/c15d83fb1e199515.woff2 +0 -0
- package/dist/remotion-bundle/c28e7e5d310f73ef.woff2 +0 -0
- package/dist/remotion-bundle/c2b840274db78aea.woff2 +0 -0
- package/dist/remotion-bundle/c3000e3299d4e45f.woff2 +0 -0
- package/dist/remotion-bundle/c83ce886e5288510.woff2 +0 -0
- package/dist/remotion-bundle/c87a5a64d4ac0918.woff2 +0 -0
- package/dist/remotion-bundle/c8a7e0d049e965fa.woff2 +0 -0
- package/dist/remotion-bundle/c949a35d3a3b1faf.woff2 +0 -0
- package/dist/remotion-bundle/c9618c9b9ac2bc78.woff2 +0 -0
- package/dist/remotion-bundle/ca3add3b84152d5b.woff2 +0 -0
- package/dist/remotion-bundle/cad9dd036408d707.woff2 +0 -0
- package/dist/remotion-bundle/cbb24916619df439.woff2 +0 -0
- package/dist/remotion-bundle/cc054f0b5514e177.woff2 +0 -0
- package/dist/remotion-bundle/ccc248ed9312bc71.woff2 +0 -0
- package/dist/remotion-bundle/cd9d623aa07af925.woff2 +0 -0
- package/dist/remotion-bundle/ce2ba7a321bd1247.woff2 +0 -0
- package/dist/remotion-bundle/cf72455f79a29b14.woff2 +0 -0
- package/dist/remotion-bundle/d267cbfefab452ac.woff2 +0 -0
- package/dist/remotion-bundle/d435cff46a64955f.woff +0 -0
- package/dist/remotion-bundle/d494d07f67e363f6.woff2 +0 -0
- package/dist/remotion-bundle/d7aa0cc1fa47bf38.woff2 +0 -0
- package/dist/remotion-bundle/d7c5ca93d885160a.woff2 +0 -0
- package/dist/remotion-bundle/d855d3e252db74e2.woff2 +0 -0
- package/dist/remotion-bundle/d8f13d47f02f82c2.woff2 +0 -0
- package/dist/remotion-bundle/d9567cce2ee11019.woff2 +0 -0
- package/dist/remotion-bundle/db8d4456fc75dd86.woff +0 -0
- package/dist/remotion-bundle/dc274628378c47ee.woff2 +0 -0
- package/dist/remotion-bundle/dc3e06947bb69903.woff2 +0 -0
- package/dist/remotion-bundle/dd67040ac3b6d523.woff2 +0 -0
- package/dist/remotion-bundle/e0b04bd488f953f4.woff2 +0 -0
- package/dist/remotion-bundle/e2a572ff95089370.woff2 +0 -0
- package/dist/remotion-bundle/e2e18a86b1c2b0cc.woff2 +0 -0
- package/dist/remotion-bundle/e3a78ee2fc9c6931.woff2 +0 -0
- package/dist/remotion-bundle/e654c9d547605a9f.woff2 +0 -0
- package/dist/remotion-bundle/e67a3a64c129927c.woff2 +0 -0
- package/dist/remotion-bundle/e6be28b4203cd6ce.woff2 +0 -0
- package/dist/remotion-bundle/e841907ad9b0a191.woff +0 -0
- package/dist/remotion-bundle/e889d1541c69fffa.woff2 +0 -0
- package/dist/remotion-bundle/e88ef8c76373a9e2.woff2 +0 -0
- package/dist/remotion-bundle/e9c72f4bc37defef.woff2 +0 -0
- package/dist/remotion-bundle/e9e35f863403a255.woff2 +0 -0
- package/dist/remotion-bundle/eb23b37b009375da.woff2 +0 -0
- package/dist/remotion-bundle/ee1342b741625721.woff2 +0 -0
- package/dist/remotion-bundle/f07da88543a57ec9.woff2 +0 -0
- package/dist/remotion-bundle/f522982115306f8a.woff2 +0 -0
- package/dist/remotion-bundle/f8449bd864e6d8bc.woff2 +0 -0
- package/dist/remotion-bundle/f906dd5bd95ff9ab.woff2 +0 -0
- package/dist/remotion-bundle/f9e9e9413e3c38bb.woff2 +0 -0
- package/dist/remotion-bundle/fa5a5b16280994a8.woff2 +0 -0
- package/dist/remotion-bundle/favicon.ico +0 -0
- package/dist/remotion-bundle/fb19c0517725599b.woff2 +0 -0
- package/dist/remotion-bundle/fcaf24232f684b9b.woff2 +0 -0
- package/dist/remotion-bundle/fe09e084a3eea8cf.woff2 +0 -0
- package/dist/remotion-bundle/ff38d5317df7345a.woff2 +0 -0
- package/dist/remotion-bundle/ffe7ea1ea08f455a.woff2 +0 -0
- package/dist/remotion-bundle/index.html +49 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaomei/communication/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaomei/communication/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaomei/communication/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaomei/communication/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoxin/career/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoxin/career/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoxin/career/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoxin/career/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoyue/parenting/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoyue/parenting/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoyue/parenting/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/female-kefu-xiaoyue/parenting/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/male-kefu-xiaoxu/time-trap/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/male-kefu-xiaoxu/time-trap/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/male-kefu-xiaoxu/time-trap/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/male-kefu-xiaoxu/time-trap/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/cognition/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/cognition/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/cognition/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/cognition/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/growth/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/growth/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/growth/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/growth/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/parenting/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/parenting/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/parenting/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/parenting/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/soothing/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/soothing/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/soothing/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-A6b7WpG3/soothing/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-R2s4N9qJ/cognition/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-R2s4N9qJ/cognition/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-R2s4N9qJ/cognition/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-female-R2s4N9qJ/cognition/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-Bk7vD3xP/decision/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-Bk7vD3xP/decision/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-Bk7vD3xP/decision/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-Bk7vD3xP/decision/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-W1tH9jVc/manager/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-W1tH9jVc/manager/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-W1tH9jVc/manager/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-W1tH9jVc/manager/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-W1tH9jVc/manager/4.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-s5NqE0rZ/founder/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-s5NqE0rZ/founder/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-s5NqE0rZ/founder/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide/v-male-s5NqE0rZ/founder/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/career-advice/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/career-advice/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/career-advice/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/career-advice/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/career-advice/4.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/founder-lesson/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/founder-lesson/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/founder-lesson/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/founder-lesson/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/founder-lesson/4.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/incident-review/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/incident-review/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/incident-review/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/incident-review/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/incident-review/4.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/learning-loop/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/learning-loop/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/learning-loop/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/learning-loop/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/learning-loop/4.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/meeting-closure/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/meeting-closure/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/meeting-closure/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/meeting-closure/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/product-update/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/product-update/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/product-update/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/product-update/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/research-reading/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/research-reading/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/research-reading/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/research-reading/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/sales-enablement/0.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/sales-enablement/1.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/sales-enablement/2.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/sales-enablement/3.mp3 +0 -0
- package/dist/remotion-bundle/public/paper-slide-experiments/sales-enablement/4.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/ai-life/card-0.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/ai-life/card-1.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/ai-life/card-2.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/ai-life/card-3.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/ai-life/card-4.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/ai-life/card-5.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-0.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-1.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-2.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-3.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-4.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-5.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/coffee-science/card-6.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-0.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-1.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-2.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-3.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-4.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-5.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/reading-secrets/card-6.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/remote-work/card-0.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/remote-work/card-1.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/remote-work/card-2.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/remote-work/card-3.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/remote-work/card-4.mp3 +0 -0
- package/dist/remotion-bundle/public/voiceover/remote-work/card-5.mp3 +0 -0
- package/dist/remotion-bundle/source-map-helper.wasm +0 -0
- package/lib/cli.js +270 -0
- package/lib/commands/_registry.js +48 -0
- package/lib/commands/add.js +242 -0
- package/lib/commands/asr/azure-transcribe.js +336 -0
- package/lib/commands/asr/cloud-transcribe.js +384 -0
- package/lib/commands/asr/helpers.js +76 -0
- package/lib/commands/asr/index.js +236 -0
- package/lib/commands/asr/local-transcribe.js +125 -0
- package/lib/commands/asr-jobs.js +257 -0
- package/lib/commands/asr.js +11 -0
- package/lib/commands/auth-cmds.js +358 -0
- package/lib/commands/dub.js +542 -0
- package/lib/commands/explain.js +512 -0
- package/lib/commands/feedback.js +152 -0
- package/lib/commands/image.js +207 -0
- package/lib/commands/mcp-key.js +166 -0
- package/lib/commands/narrate.js +639 -0
- package/lib/commands/picstory-templates.js +276 -0
- package/lib/commands/picstory.js +547 -0
- package/lib/commands/podcast/dialogue.js +109 -0
- package/lib/commands/podcast/generate.js +127 -0
- package/lib/commands/podcast/index.js +561 -0
- package/lib/commands/podcast/synthesize.js +188 -0
- package/lib/commands/podcast.js +11 -0
- package/lib/commands/present.js +519 -0
- package/lib/commands/publish.js +415 -0
- package/lib/commands/skills.js +473 -0
- package/lib/commands/slice-preview.js +266 -0
- package/lib/commands/slice-render.js +282 -0
- package/lib/commands/slice-stage.js +264 -0
- package/lib/commands/slice.js +343 -0
- package/lib/commands/slides/constants.js +108 -0
- package/lib/commands/slides/html-renderer.js +338 -0
- package/lib/commands/slides/index.js +345 -0
- package/lib/commands/slides.js +11 -0
- package/lib/commands/story.js +302 -0
- package/lib/commands/summarize.js +532 -0
- package/lib/commands/synthesize.js +261 -0
- package/lib/commands/translate.js +593 -0
- package/lib/commands/upgrade.js +249 -0
- package/lib/commands/video-translate.js +577 -0
- package/lib/commands/voices.js +292 -0
- package/lib/core/agent-env.js +104 -0
- package/lib/core/args.js +107 -0
- package/lib/core/asr-client.js +448 -0
- package/lib/core/asr-jobs-client.js +126 -0
- package/lib/core/asr-jobs-store.js +105 -0
- package/lib/core/asr-r2-upload.js +181 -0
- package/lib/core/asr-upload.js +132 -0
- package/lib/core/audio-extract.js +150 -0
- package/lib/core/audio.js +219 -0
- package/lib/core/auth.js +880 -0
- package/lib/core/config.js +197 -0
- package/lib/core/feedback.js +64 -0
- package/lib/core/ffmpeg.js +476 -0
- package/lib/core/http.js +188 -0
- package/lib/core/image-client.js +55 -0
- package/lib/core/intent-params.js +11 -0
- package/lib/core/llm-client.js +76 -0
- package/lib/core/logger.js +208 -0
- package/lib/core/mic-recorder.js +182 -0
- package/lib/core/pause-markers.js +94 -0
- package/lib/core/podcast-pacing.js +118 -0
- package/lib/core/spinner.js +33 -0
- package/lib/core/srt.js +394 -0
- package/lib/core/telemetry.js +100 -0
- package/lib/core/timeline.js +92 -0
- package/lib/core/tts-synthesizer.js +70 -0
- package/lib/core/update-check.js +185 -0
- package/lib/core/url-download.js +148 -0
- package/lib/core/whisper-local.js +279 -0
- package/lib/internal/deck-validator.js +488 -0
- package/lib/internal/slice-themes.json +370 -0
- package/lib/stage-core/cloud-render.js +170 -0
- package/lib/stage-core/deck-format.js +133 -0
- package/lib/stage-core/edit-prompt.js +104 -0
- package/lib/stage-core/event-bus.js +31 -0
- package/lib/stage-core/port.js +46 -0
- package/lib/stage-core/server.js +352 -0
- package/lib/stage-core/snapshot-store.js +198 -0
- package/lib/stage-core/watcher.js +106 -0
- package/lib/stage-ui/slice/template.js +1672 -0
- package/package.json +9 -4
- package/skills/.claude-plugin/marketplace.json +22 -0
- package/skills/.claude-plugin/plugin.json +25 -0
- package/skills/LICENSE +21 -0
- package/skills/README.md +120 -0
- package/skills/hub/SKILL.md +317 -0
- package/skills/podcast/SKILL.md +146 -0
- package/skills/slice/SKILL.md +205 -0
- package/skills/slice/agents/openai.yaml +4 -0
- package/skills/slice/references/deck-schema.md +183 -0
- package/skills/slice/references/example-decks.md +108 -0
- package/skills/slice/references/themes.md +172 -0
- package/skills/transcribe/SKILL.md +473 -0
- package/skills/video/SKILL.md +261 -0
- package/skills/voxflow-slice/SKILL.md +271 -0
- package/skills/voxflow-slice/examples/article.md +13 -0
- package/skills/voxflow-slice/examples/expected-deck.json +39 -0
- package/skills/voxflow-slice/examples/validate.mjs +46 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: podcast
|
|
3
|
+
description: Use when the user wants to produce a multi-speaker AI podcast from a topic, URL, or script — covers the full CLI workflow from LLM dialogue generation to per-speaker TTS synthesis and final audio export (MP3/WAV).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# VoxFlow Podcast Skill
|
|
7
|
+
|
|
8
|
+
Generate multi-speaker AI podcasts entirely from the command line. Sister skills:
|
|
9
|
+
|
|
10
|
+
- Simple TTS / narration / voice search → `voxflow` (hub)
|
|
11
|
+
- Short videos / AI clips / knowledge cards → `voxflow:video`
|
|
12
|
+
- Transcribe / translate subtitles / dub → `voxflow:transcribe`
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- Node.js `^20.19.0 || >=22.12.0`
|
|
17
|
+
- `npm install -g voxflow` then `voxflow login`
|
|
18
|
+
- VoxFlow account (free tier: 10K quota/month)
|
|
19
|
+
|
|
20
|
+
**No API keys needed** — all auth goes through `voxflow login`.
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# 1. Login (one-time, opens browser)
|
|
26
|
+
voxflow login
|
|
27
|
+
|
|
28
|
+
# 2. Generate a podcast
|
|
29
|
+
voxflow podcast --topic "AI 时代的程序员出路"
|
|
30
|
+
|
|
31
|
+
# 3. Output: podcast-2026-03-20T12-00-00.wav + .txt
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Full Workflow
|
|
35
|
+
|
|
36
|
+
### Step 1: Generate Script Only
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
voxflow podcast \
|
|
40
|
+
--topic "量子计算入门" \
|
|
41
|
+
--template tutorial \
|
|
42
|
+
--colloquial medium \
|
|
43
|
+
--speakers 2 \
|
|
44
|
+
--language zh-CN \
|
|
45
|
+
--format json \
|
|
46
|
+
--no-tts
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Outputs: `podcast-<ts>.txt` + `podcast-<ts>.podcast.json`
|
|
50
|
+
|
|
51
|
+
### Step 2: Review & Edit
|
|
52
|
+
|
|
53
|
+
Open `.podcast.json` — it contains structured dialogue, speaker info, quality scores, and voice mappings. Edit as needed.
|
|
54
|
+
|
|
55
|
+
### Step 3: Synthesize from File
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
voxflow podcast --input podcast-2026-03-20.podcast.json --output final.wav
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### One-Shot (generate + synthesize)
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
voxflow podcast \
|
|
65
|
+
--topic "Web3 的未来" \
|
|
66
|
+
--engine ai-sdk \
|
|
67
|
+
--colloquial high \
|
|
68
|
+
--speakers 3 \
|
|
69
|
+
--output web3-podcast.wav
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Parameters
|
|
73
|
+
|
|
74
|
+
| Flag | Values | Default | Description |
|
|
75
|
+
|------|--------|---------|-------------|
|
|
76
|
+
| `--topic` | text | tech trends | Podcast topic or prompt |
|
|
77
|
+
| `--engine` | auto, legacy, ai-sdk | auto (→ ai-sdk) | Generation engine |
|
|
78
|
+
| `--template` | interview, discussion, news, story, tutorial | interview | Podcast template |
|
|
79
|
+
| `--colloquial` | low, medium, high | medium | Conversational tone level |
|
|
80
|
+
| `--speakers` | 1, 2, 3 | 2 | Number of speakers |
|
|
81
|
+
| `--language` | zh-CN, en, ja | zh-CN | Output language |
|
|
82
|
+
| `--length` | short, medium, long | medium | Script length |
|
|
83
|
+
| `--format` | json | — | Also output .podcast.json |
|
|
84
|
+
| `--input` | file path | — | Load .podcast.json for synthesis |
|
|
85
|
+
| `--no-tts` | flag | false | Script only, skip TTS |
|
|
86
|
+
| `--speed` | 0.5-2.0 | 1.0 | TTS playback speed |
|
|
87
|
+
| `--silence` | 0-5.0 | 0.5 | Gap between segments (sec) |
|
|
88
|
+
| `--output` | file path | auto | Output file path |
|
|
89
|
+
|
|
90
|
+
## Engine Comparison
|
|
91
|
+
|
|
92
|
+
| Feature | legacy | ai-sdk |
|
|
93
|
+
|---------|--------|--------|
|
|
94
|
+
| Structured output | No | Yes (JSON) |
|
|
95
|
+
| Quality scoring | No | Yes (1-10) |
|
|
96
|
+
| Colloquial control | No | 3 levels |
|
|
97
|
+
| Intent tagging | No | Yes |
|
|
98
|
+
| Speaker metadata | Partial | Full |
|
|
99
|
+
| Multi-language | Chinese only | zh/en/ja |
|
|
100
|
+
|
|
101
|
+
## Templates
|
|
102
|
+
|
|
103
|
+
- **interview** — Host + Guest deep conversation
|
|
104
|
+
- **discussion** — Roundtable multi-person discussion
|
|
105
|
+
- **news** — Professional news briefing
|
|
106
|
+
- **story** — Multi-character story narration
|
|
107
|
+
- **tutorial** — Teacher + Student educational dialogue
|
|
108
|
+
|
|
109
|
+
## Quota Cost
|
|
110
|
+
|
|
111
|
+
| Operation | Cost |
|
|
112
|
+
|-----------|------|
|
|
113
|
+
| Script generation (medium, ~16 turns) | 2,000 |
|
|
114
|
+
| TTS per turn (native pause voice) | 50 |
|
|
115
|
+
| TTS per chunk (splice fallback voice) | 50 |
|
|
116
|
+
|
|
117
|
+
**Per-turn TTS call count depends on voice**: voices flagged `nativePauseSupported: true` (most podcast voices) take 1 TTS call per turn — TRTC honors `<|break|>` / `<|s_break|>` markers natively (~250-430ms inserted). Voices that haven't been verified (e.g. 旁白 narration voices) fall back to client-side splice = N calls per turn.
|
|
118
|
+
|
|
119
|
+
Typical medium podcast (16 turns, all native voices) ≈ 16 × 50 + 2,000 = 2,800 quota — Free tier (10K/month) covers ~3 medium podcasts. **Tip**: if you already have a script, pass `--script my.json` to skip the 2,000 LLM step entirely. Mixed-voice podcasts cost slightly more if they include non-native voices.
|
|
120
|
+
|
|
121
|
+
## Examples
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# English tech podcast
|
|
125
|
+
voxflow podcast --topic "AI ethics debate" --language en --template discussion
|
|
126
|
+
|
|
127
|
+
# Quick news briefing (short)
|
|
128
|
+
voxflow podcast --topic "本周科技新闻" --template news --length short
|
|
129
|
+
|
|
130
|
+
# Casual chat with high colloquial level
|
|
131
|
+
voxflow podcast --topic "程序员加班那些事" --colloquial high
|
|
132
|
+
|
|
133
|
+
# JSON export for editing
|
|
134
|
+
voxflow podcast --topic "创业故事" --format json --no-tts
|
|
135
|
+
|
|
136
|
+
# Synthesize edited script
|
|
137
|
+
voxflow podcast --input edited-podcast.podcast.json --speed 1.1
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Rules
|
|
141
|
+
|
|
142
|
+
1. **Check quota first** — medium podcast ≈ 5K. Run `voxflow status` before generation.
|
|
143
|
+
2. **Iterate on the script** — use `--no-tts --format json` to inspect dialogue before paying for TTS.
|
|
144
|
+
3. **Voice mapping** — for ai-sdk engine, the .podcast.json includes per-speaker voice IDs. Edit them before re-running with `--input`.
|
|
145
|
+
4. **Auto-play** when done: `open podcast-*.wav`.
|
|
146
|
+
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slice
|
|
3
|
+
description: "Use when the user wants to turn a long article / note / report into a vertical 1080×1920 card video — VoxFlow Slice. 13 themes — paper-slide (纸面), editorial-mag (编辑刊), bold-poster (大字海报), notion-card (Notion 卡), brutalist (粗野), glass-dark (玻璃夜), editorial-stencil (编辑·海报), broadsheet (财经刊), blueprint (蓝晒图), daisy-pastel (雏菊), showa-catalog (昭和目录), photo-feature (摄影刊), atmospheric (深夜刊). Triggers — Slice / slice video / 切片视频 / 文章转视频 / 知识卡片视频 / 抖音知识号 / 小红书图文转视频 / 知乎长文转视频 / 公众号转视频 / PaperSlide / paperslide / paper-slide (legacy name)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Slice Skill
|
|
7
|
+
|
|
8
|
+
Turn an article, note, paper, or rough topic into a vertical 1080×1920 card video — narrated, paginated to TTS rhythm, with 13 visual themes covering 抖音 / 小红书 / 知乎 / X / 公众号 / 飞书 / TikTok / LinkedIn / 雪球 / 微博 / 即刻 / B 站 / 播客.
|
|
9
|
+
|
|
10
|
+
> **Renamed from `paper-slide` → `slice`.** The product is now called **Slice** (`voxflow.studio/apps/slice`); the legacy slug is no longer registered. `paper-slide` survives only as one of the 13 theme ids.
|
|
11
|
+
|
|
12
|
+
## Pick the Route
|
|
13
|
+
|
|
14
|
+
| Context | Route | Notes |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| User wants the deck JSON (no render) — fast, scriptable, pipeable | **CLI**: `voxflow slice <article.md> --theme <id>` | Hits `/api/slice/deck` directly (200 quota; renamed from `/api/paper-slide/slice` in #3307 Deploy 2). Returns the canonical 5–8 card deck JSON validated by the same backend the web app uses, all 13 themes accepted. No mp4 — pipe `--json` into custom tools, the local Remotion composition (contributors), or paste into the web app for rendering. |
|
|
17
|
+
| User is iterating on a deck — multi-round edits to copy/structure before committing to a render | **CLI**: `voxflow slice stage <deck.json>` | Boots a localhost preview page (no quota cost) that hot-reloads on every save of the deck JSON. Useful loop: `voxflow slice ... -o deck.json` → `voxflow slice stage deck.json` → tweak prompt → re-run slice → preview updates instantly. See **Stage Route** below. |
|
|
18
|
+
| User wants a finished mp4 + cover (default consumer flow) | **Web app**: `https://voxflow.studio/apps/slice` | The only place that runs the **exact** 6 Slice themes end-to-end. Free tier ships 9:16 mp4 + multi-aspect cover (9:16/3:4/1:1). |
|
|
19
|
+
| User wants a similar-looking video offline via CLI but the deck-only `voxflow slice` isn't enough | `voxflow present` or `voxflow picstory --style sketchnote` | **Approximation only.** Different visual schemes; cannot output Slice's `editorial-mag` / `notion-card` / `brutalist` / `glass-dark` themes. See **CLI Approximation** below. |
|
|
20
|
+
| Local checkout has `video-present/src/compositions/PaperSlide` (VoxFlow contributors only) | Local Remotion experiment script | See **Local Remotion Route**. Note: experiment script only exercises the original `paper-slide` composition; other 12 themes render via cloud worker only. |
|
|
21
|
+
| User only wants strategy or copy | Produce the deck JSON via `voxflow slice` (or by hand following the schema); tell them which renderer to use. | The deck schema is renderer-agnostic; same JSON renders in any theme. |
|
|
22
|
+
| User asks to open-source / package | Keep private APIs, tokens, generated audio, MP4 outputs out of the skill package. | |
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. **Pick a theme that matches the platform.** Read `references/themes.md` once — it lists all 13 themes, their visual signature, and which platform / content type each one fits. Don't default to `paper-slide` for everything.
|
|
27
|
+
2. **Pick a scenario.** Concrete use case beats generic filler: paper digest, product update, meeting closeout, career advice, founder lesson, market commentary, incident review.
|
|
28
|
+
3. **Write a tight deck.** 4-6 cards: one title + 3-5 body. One idea per body card. Captions short enough to fit one line.
|
|
29
|
+
4. **Choose visuals from controlled keywords.** Don't search the web or generate random images at render time — pick a canonical `figureKeyword`; the renderer maps it to a local hand-drawn scene / pose / icon. (See `references/deck-schema.md`.)
|
|
30
|
+
5. **Render via the chosen route.** Web app for exact themes; CLI for approximation; local script for contributors.
|
|
31
|
+
6. **Verify the artifact.** Check duration, dimensions (1080×1920), and at least one title frame + one body frame before reporting done.
|
|
32
|
+
7. **Report paths.** Absolute paths to MP4 / posters / props.
|
|
33
|
+
|
|
34
|
+
Read `references/deck-schema.md` when writing deck JSON, picking keywords, or debugging layout. Read `references/example-decks.md` for seed decks. Read `references/themes.md` when picking a theme or explaining theme tradeoffs.
|
|
35
|
+
|
|
36
|
+
## Web App Route (default — works for everyone)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
https://voxflow.studio/apps/slice
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Workflow:
|
|
43
|
+
|
|
44
|
+
1. Paste the article / note into the hero composer.
|
|
45
|
+
2. AI slices it into 5–8 cards.
|
|
46
|
+
3. Pick a theme (13 options — see `references/themes.md`) + a voice (6 production voices: 男主播 / 霸总男声 / 闲聊男声 / 小美 / 小心 / 小徐).
|
|
47
|
+
4. Render → 1080×1920 mp4 + multi-aspect cover (9:16 / 3:4 / 1:1).
|
|
48
|
+
|
|
49
|
+
Tell the user this is the **only** route that produces the exact Slice render for all 13 themes — they're private Remotion compositions, not shipped with the CLI.
|
|
50
|
+
|
|
51
|
+
## CLI Deck Route (`voxflow slice`)
|
|
52
|
+
|
|
53
|
+
For users who want the structured deck JSON without the render — fast (one round-trip, 200 quota), pipeable, theme-aware. Hits the same `/api/slice/deck` backend the web app uses, so the deck shape is canonical.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
voxflow slice article.md # default theme: paper-slide
|
|
57
|
+
voxflow slice article.md --theme editorial-mag -o deck.json
|
|
58
|
+
voxflow slice --text "long article ..." --theme bold-poster --json | jq .deck
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
When to use this route:
|
|
62
|
+
|
|
63
|
+
- The user wants to inspect / iterate on the AI's slicing quality before committing to a render.
|
|
64
|
+
- The user wants to paste the deck into the web app's "import deck" flow to render with a different theme.
|
|
65
|
+
- The user is a contributor with the private `video-present/src/compositions/PaperSlide` Remotion composition and wants to render the deck locally — `voxflow slice ... --json -o props.json` then feed `props.json` into the experiment script.
|
|
66
|
+
- The user is building automation that needs structured output (e.g. publishing knowledge cards as text on Twitter / 即刻 from `deck.cards[*].caption + narration`).
|
|
67
|
+
|
|
68
|
+
Limits:
|
|
69
|
+
|
|
70
|
+
- No mp4. The cloud renderer that produces the 1080×1920 video lives in the web app.
|
|
71
|
+
- No TTS. Pair `voxflow slice` with `voxflow narrate` if you want per-card audio without rendering.
|
|
72
|
+
|
|
73
|
+
## Stage Route — `voxflow slice stage` (iteration preview)
|
|
74
|
+
|
|
75
|
+
For the human-in-the-loop iteration phase **before** committing to a cloud render. Stage spins up a localhost HTTP server with hot reload — every save of the deck JSON updates the page instantly. No quota cost, no network round-trip.
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
voxflow slice deck.md -o deck.json # 1. produce a deck (200 quota)
|
|
79
|
+
voxflow slice stage deck.json # 2. open localhost preview (free)
|
|
80
|
+
# 3. edit deck.json by hand or re-run slice
|
|
81
|
+
# 4. preview hot-reloads on save
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Want a no-quota, no-login starter? Use the bundled sample directly:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
voxflow slice stage examples/11-slice-stage/sample-deck.json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Flags:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
voxflow slice stage <deck.json> [--port <n>] [--theme <id>] [--no-open]
|
|
94
|
+
--port Default 5180. Auto-skips +1 up to 5189 on conflict.
|
|
95
|
+
--theme Lock the preview to one theme (must be one of the 13 valid ids).
|
|
96
|
+
--no-open Don't auto-launch the browser (CI / SSH / agent environments).
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
When to use Stage:
|
|
100
|
+
|
|
101
|
+
- The user is in a multi-round editing loop — copy tweaks, card re-ordering, theme A/B — and reopening the mp4 each iteration is expensive friction.
|
|
102
|
+
- The user wants to publish individual cards as plain text on text-first platforms (X / Twitter / 即刻 / Threads / Mastodon / blog comments). Stage gives each card a "Copy text" button (title + caption + narration), and the deck-level toolbar offers "Copy JSON / Download .json / Copy as Markdown" for pasting into Notion / blog / 飞书. Image / carousel exports for 小红书 / 微博 / 公众号 头图 land in a future Phase once per-card stills are available.
|
|
103
|
+
- AI-driven loops where the agent regenerates `deck.json` and the human reviews via browser — the page updates without the agent having to re-print paths.
|
|
104
|
+
|
|
105
|
+
### Text export utilities (Phase 1.4 text-only)
|
|
106
|
+
|
|
107
|
+
The Stage UI ships text-first export controls so cards can be reused on text-only platforms without paying for a full render:
|
|
108
|
+
|
|
109
|
+
- **Per-card "Copy text"** — click the small button on any card → clipboard gets `{title}\n\n{caption (if distinct)}\n\n{narration}` (trimmed). Drop into a tweet, 即刻 post, blog snippet.
|
|
110
|
+
- **Deck toolbar — "Copy JSON"** — copies the full deck JSON to clipboard (for piping into custom tools / sharing with another agent / saving a snapshot).
|
|
111
|
+
- **Deck toolbar — "Download .json"** — saves the deck as `<seriesTitle>.json` (filename auto-sanitised, capped at 60 chars + `.json`).
|
|
112
|
+
- **Deck toolbar — "Copy as Markdown"** — formats the whole deck as Markdown (H1 = seriesTitle, H2 per card, narration as blockquote). Paste into Notion / blog editor / 飞书 docs.
|
|
113
|
+
|
|
114
|
+
Formatters live in `lib/stage-core/deck-format.js` (`formatCardAsText`, `formatDeckAsMarkdown`, `suggestDeckFilename`) and are unit-tested in `tests/deck-format.test.js`. Their source is stringified into the served HTML via `Function.prototype.toString()` so the browser executes the *same* code the tests cover — single source of truth, no double maintenance.
|
|
115
|
+
|
|
116
|
+
**Image / MP4 carousel exports** for 小红书 / 微博 / 公众号 头图 are NOT in Phase 1.4 text-only. Those land in a future Phase once `renderStill` per-card thumbnails are available (they require a backend Remotion endpoint that doesn't exist yet).
|
|
117
|
+
|
|
118
|
+
What Stage is NOT:
|
|
119
|
+
|
|
120
|
+
- Not a full Remotion preview yet. MVP shows deck structure (cards + JSON); cloud-rendered theme thumbnails arrive in Phase 1.3 via `renderStill`.
|
|
121
|
+
- Not a substitute for the full render's pixels — themes are server-side compositions. Stage previews the **deck text**, not the final video frames.
|
|
122
|
+
|
|
123
|
+
### Edit-with-AI loop (the actual iteration workflow)
|
|
124
|
+
|
|
125
|
+
Stage doesn't try to be Cursor — it's a **visual feedback closer** that hands prompts to whatever AI tool the user already has open (Claude Code, Cursor, ChatGPT, anything). Two affordances cover the whole edit loop:
|
|
126
|
+
|
|
127
|
+
| Intent | UX | Output |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| Whole-card rewrite ("regen this card, keep the rest") | Hover the card → corner button **Edit with AI** | Modal with a prompt: file path + `cards[N]` JSON snippet + `<your instruction>` slot |
|
|
130
|
+
| Local phrase rewrite ("just this phrase is off") | Select text inside a card → floating **Edit selection with AI** button appears | Modal with a prompt: file path + the exact selected substring quoted + full card JSON for context |
|
|
131
|
+
|
|
132
|
+
The user types the instruction (e.g. "shorten to 12 chars, more visceral"), clicks **Copy prompt**, pastes into their AI. The AI uses its native file-edit tools (Claude Code's Edit, Cursor's Apply, etc.) to rewrite the file. Stage's SSE watcher hot-reloads the preview within ~150 ms. Loop until satisfied.
|
|
133
|
+
|
|
134
|
+
Why this design and not an embedded chat / MCP server: see [#3330](https://github.com/VoxFlowStudio/FlowStudio/issues/3330) for the full design rationale (universal copy-paste vs. Claude Code-only MCP, cost vs. coverage tradeoff, future MCP upgrade path conditional on usage telemetry).
|
|
135
|
+
|
|
136
|
+
## CLI Approximation Route (full mp4 fallback)
|
|
137
|
+
|
|
138
|
+
If the user **must** have an mp4 from the CLI alone (no web app, no contributor Remotion access), fall back to `voxflow present` or `voxflow picstory` — they cover the same article-to-video shape but with their own visual schemes, not the exact 13 Slice themes.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
voxflow present --text "paste article or summary" --style editorial --output slice-approx.mp4
|
|
142
|
+
voxflow picstory --topic "topic" --style sketchnote --scenes 4 --output slice-sketch.mp4
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Closest CLI scheme per Slice theme:
|
|
146
|
+
|
|
147
|
+
| Slice theme | Closest CLI route |
|
|
148
|
+
|---|---|
|
|
149
|
+
| paper-slide | `voxflow picstory --style sketchnote` |
|
|
150
|
+
| editorial-mag | `voxflow present --style editorial` |
|
|
151
|
+
| bold-poster | `voxflow present --style brutalist` (closest weight) |
|
|
152
|
+
| notion-card | `voxflow present --style minimal` |
|
|
153
|
+
| brutalist | `voxflow present --style brutalist` |
|
|
154
|
+
| glass-dark | `voxflow present --style noir` or `--style aurora` |
|
|
155
|
+
| editorial-stencil | `voxflow present --style editorial` (no letterbox / dual-tone equivalent) |
|
|
156
|
+
| broadsheet | `voxflow present --style editorial` (no FT salmon palette) |
|
|
157
|
+
| blueprint | `voxflow picstory --style chalkboard` (closest grid/diagram feel) |
|
|
158
|
+
| daisy-pastel | `voxflow picstory --style sketchnote` (no pastel illustration equivalent) |
|
|
159
|
+
| showa-catalog | `voxflow picstory --style vintage_newspaper` (no city-pop equivalent) |
|
|
160
|
+
| photo-feature | `voxflow picstory --style photo` (photo-feature needs imageUrl per card — see deck-schema) |
|
|
161
|
+
| atmospheric | `voxflow present --style noir` |
|
|
162
|
+
|
|
163
|
+
Always tell the user: "This is a Slice-adjacent draft. The exact 13-theme renderer lives on `voxflow.studio/apps/slice`."
|
|
164
|
+
|
|
165
|
+
## Local Remotion Route (contributors only)
|
|
166
|
+
|
|
167
|
+
**Skip if `video-present/src/compositions/PaperSlide` is not in your checkout** — it's private code; npm / skills users don't have it.
|
|
168
|
+
|
|
169
|
+
From the contributor checkout root:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
cd video-present
|
|
173
|
+
node scripts/paper-slide-experiments.mjs
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Render a subset:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
cd video-present
|
|
180
|
+
PAPER_SLIDE_EXPERIMENT_FILTER=research-reading node scripts/paper-slide-experiments.mjs
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Verify outputs:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
ffprobe -v error -select_streams v:0 \
|
|
187
|
+
-show_entries stream=width,height,duration \
|
|
188
|
+
-of default=nw=1 out/paper-slide-experiments/research-reading.mp4
|
|
189
|
+
|
|
190
|
+
ffmpeg -y -hide_banner -loglevel error -ss 9 \
|
|
191
|
+
-i out/paper-slide-experiments/research-reading.mp4 \
|
|
192
|
+
-frames:v 1 -q:v 2 out/paper-slide-experiments/research-reading-body.jpg
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Expected: `1080×1920`, 20-35 seconds, no black flashes, no caption overflow, figure not clipped.
|
|
196
|
+
|
|
197
|
+
## Deck Writing Rules (apply across all 13 themes)
|
|
198
|
+
|
|
199
|
+
- **Title card**: hook, contrast, or promise. Avoid abstract labels like "Introduction".
|
|
200
|
+
- **Body card**: one idea only. Caption usually under 16 Chinese chars or 7 English words.
|
|
201
|
+
- **Narration**: conversational, 25-60 Chinese chars per body card.
|
|
202
|
+
- **Scene keywords** (prefer when they fit): `problem-framing`, `evidence-board`, `customer-pain`, `timeline-review`, `owner-deadline`, `risk-guardrail`, `cashflow-ledger`, `team-alignment`, `before-after`, `learning-loop`, `decision-fork`, `growth-system`.
|
|
203
|
+
- **Figure / icon keywords** (visual accents): `thinking`, `running`, `climbing`, `stuck`, `celebrating`, `briefcase`, `users`, `target`, `clock`, `flame`, `lightbulb`, `chart-bar`.
|
|
204
|
+
- **Vary adjacent visuals.** Don't use `thinking` on every card.
|
|
205
|
+
- **Theme is independent of deck content** — the same deck JSON renders in any of the 13 themes; pick the theme based on platform / mood, not content. Exception: `photo-feature` and `atmospheric` use each card's `imageUrl` as a backdrop and degrade to an SVG stub when missing — see `references/deck-schema.md`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Slice"
|
|
3
|
+
short_description: "Article → vertical card video (13 themes spanning editorial / poster / brutalist / glass / blueprint / pastel / showa / photo / atmospheric)"
|
|
4
|
+
default_prompt: "Use $slice to turn this article into a Slice card video — pick a theme that fits the platform (抖音 / 知乎 / X / 公众号 / 飞书 / TikTok / LinkedIn / 雪球 / 微博 / 即刻 / B 站 / 播客)."
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Slice Deck Schema
|
|
2
|
+
|
|
3
|
+
Use this reference when writing or validating a Slice deck (any of the 13 themes — `paper-slide` / `editorial-mag` / `bold-poster` / `notion-card` / `brutalist` / `glass-dark` / `editorial-stencil` / `broadsheet` / `blueprint` / `daisy-pastel` / `showa-catalog` / `photo-feature` / `atmospheric`).
|
|
4
|
+
|
|
5
|
+
The deck shape is **theme-agnostic**: same JSON renders in any theme. Pick the theme based on platform / mood, not content. See `themes.md` for theme picker.
|
|
6
|
+
|
|
7
|
+
## Shape
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"theme": "paper-slide",
|
|
12
|
+
"header": "shared top sticker text, <= 22 Chinese chars",
|
|
13
|
+
"seriesTitle": "series name, no brackets, <= 10 Chinese chars",
|
|
14
|
+
"seriesTagline": "bottom italic promise, <= 22 Chinese chars",
|
|
15
|
+
"cards": [
|
|
16
|
+
{
|
|
17
|
+
"kind": "title",
|
|
18
|
+
"title": ["line 1 <= 14 Chinese chars", "line 2 <= 14 Chinese chars"],
|
|
19
|
+
"narration": "opening voiceover"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"kind": "body",
|
|
23
|
+
"caption": "one-line punchy caption",
|
|
24
|
+
"figureKeyword": "canonical keyword",
|
|
25
|
+
"narration": "spoken explanation",
|
|
26
|
+
"imageUrl": "https://… (optional, photo-feature / atmospheric only)"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### `imageUrl` (optional body-card field)
|
|
33
|
+
|
|
34
|
+
Public HTTPS URL of a photograph used as the card's backdrop. Read by the `photo-feature` and `atmospheric` themes; ignored by every other theme.
|
|
35
|
+
|
|
36
|
+
- If omitted on a `photo-feature` / `atmospheric` card, the renderer falls back to an SVG stub — usable but visually weak. The full per-card photo-upload plumbing (cloud-render side) is still in progress; until it ships, prefer `paper-slide` / `editorial-mag` when you cannot supply a photograph.
|
|
37
|
+
- Other themes treat `imageUrl` as no-op. Safe to include; the validator does not strip it.
|
|
38
|
+
|
|
39
|
+
For Remotion render props, the worker/local script converts this to:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"cards": [
|
|
44
|
+
{
|
|
45
|
+
"slide": {
|
|
46
|
+
"kind": "body",
|
|
47
|
+
"header": "...",
|
|
48
|
+
"title": [],
|
|
49
|
+
"caption": "...",
|
|
50
|
+
"figureKeyword": "target",
|
|
51
|
+
"seriesTitle": "...",
|
|
52
|
+
"seriesTagline": "...",
|
|
53
|
+
"voiceoverSrc": "paper-slide-experiments/demo/1.mp3"
|
|
54
|
+
},
|
|
55
|
+
"durationSec": 5.2
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Keyword Map
|
|
62
|
+
|
|
63
|
+
Prefer canonical values. Free-form Chinese may work in some local setups, but canonical values make the deck portable and testable.
|
|
64
|
+
|
|
65
|
+
The LLM does not search the web for visuals in the normal PaperSlide flow. It chooses a controlled `figureKeyword`; the renderer maps that keyword to a local SVG scene, stick-figure pose, or icon. This keeps output deterministic, open-source friendly, and safe to render in CI.
|
|
66
|
+
|
|
67
|
+
### Scene Keywords
|
|
68
|
+
|
|
69
|
+
Use these first when the card needs a richer, more literal visual.
|
|
70
|
+
|
|
71
|
+
| Keyword | Use for |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `problem-framing` | problem definition, real demand, goals, target |
|
|
74
|
+
| `evidence-board` | data, research method, proof, metrics |
|
|
75
|
+
| `customer-pain` | customer/user pain, audience needs |
|
|
76
|
+
| `timeline-review` | timeline, incident review, retrospective |
|
|
77
|
+
| `owner-deadline` | owner, responsibility, delivery date |
|
|
78
|
+
| `risk-guardrail` | risk, warning, limitation, guardrail |
|
|
79
|
+
| `cashflow-ledger` | cash flow, budget, pricing, value |
|
|
80
|
+
| `team-alignment` | team coordination, collaboration, alignment |
|
|
81
|
+
| `before-after` | visible change, product update, comparison |
|
|
82
|
+
| `learning-loop` | learning, output, feedback loop, reuse |
|
|
83
|
+
| `decision-fork` | choice, tradeoff, next step |
|
|
84
|
+
| `growth-system` | growth system, scale, repeatable operating model |
|
|
85
|
+
|
|
86
|
+
### Figure And Icon Keywords
|
|
87
|
+
|
|
88
|
+
Use these when a simple visual accent is enough.
|
|
89
|
+
|
|
90
|
+
| Keyword | Use for |
|
|
91
|
+
|---|---|
|
|
92
|
+
| `climbing` | growth, journey, long-term progress |
|
|
93
|
+
| `thinking` | decisions, reflection, judgment |
|
|
94
|
+
| `stuck` | blockers, failure, bottlenecks |
|
|
95
|
+
| `running` | execution, speed, action |
|
|
96
|
+
| `celebrating` | success, result, victory |
|
|
97
|
+
| `briefcase` | manager, leadership, business |
|
|
98
|
+
| `users` | teams, audience, users, responsibility |
|
|
99
|
+
| `target` | goals, focus, problem framing |
|
|
100
|
+
| `trending-up` | growth, improvement, metrics |
|
|
101
|
+
| `dollar-sign` | money, budget, pricing |
|
|
102
|
+
| `clock` | deadline, time, cadence |
|
|
103
|
+
| `message-circle` | communication, feedback, conversation |
|
|
104
|
+
| `flame` | warning, risk, urgency |
|
|
105
|
+
| `lightbulb` | idea, insight, product change |
|
|
106
|
+
| `chart-bar` | research methods, data, evidence |
|
|
107
|
+
| `rocket` | momentum, launch, motivation |
|
|
108
|
+
| `bell` | reminder, alert, attention |
|
|
109
|
+
|
|
110
|
+
## Scenario Recipes
|
|
111
|
+
|
|
112
|
+
### Research / Paper Digest
|
|
113
|
+
|
|
114
|
+
- Hook: "读一篇论文,先抓这3个问题"
|
|
115
|
+
- Body: problem → method → limitation
|
|
116
|
+
- Good keywords: `problem-framing`, `evidence-board`, `risk-guardrail`
|
|
117
|
+
|
|
118
|
+
### Product Update
|
|
119
|
+
|
|
120
|
+
- Hook: "产品更新文案,先回答这3件事"
|
|
121
|
+
- Body: user pain → visible change → next action
|
|
122
|
+
- Good keywords: `customer-pain`, `before-after`, `decision-fork`
|
|
123
|
+
|
|
124
|
+
### Meeting Closeout
|
|
125
|
+
|
|
126
|
+
- Hook: "一场有效会议,结尾必须有3样东西"
|
|
127
|
+
- Body: owner → deadline → risk
|
|
128
|
+
- Good keywords: `owner-deadline`, `timeline-review`, `risk-guardrail`
|
|
129
|
+
|
|
130
|
+
### Career / Management
|
|
131
|
+
|
|
132
|
+
- Hook: contrast or hidden rule
|
|
133
|
+
- Body: principle → mistake → action
|
|
134
|
+
- Good keywords: `problem-framing`, `timeline-review`, `team-alignment`, `learning-loop`
|
|
135
|
+
|
|
136
|
+
### Incident Review
|
|
137
|
+
|
|
138
|
+
- Hook: "事故复盘,别急着追责"
|
|
139
|
+
- Body: timeline → root cause → mechanism owner → warning
|
|
140
|
+
- Good keywords: `timeline-review`, `risk-guardrail`, `owner-deadline`, `evidence-board`
|
|
141
|
+
|
|
142
|
+
### Sales Enablement
|
|
143
|
+
|
|
144
|
+
- Hook: "销售话术,别先讲功能"
|
|
145
|
+
- Body: customer pain → proof → pricing/value → next step
|
|
146
|
+
- Good keywords: `customer-pain`, `evidence-board`, `cashflow-ledger`, `decision-fork`
|
|
147
|
+
|
|
148
|
+
### Founder / Startup Lesson
|
|
149
|
+
|
|
150
|
+
- Hook: "创业早期,别急着扩张"
|
|
151
|
+
- Body: real demand → cash flow → team pace → system before growth
|
|
152
|
+
- Good keywords: `problem-framing`, `cashflow-ledger`, `team-alignment`, `growth-system`
|
|
153
|
+
|
|
154
|
+
### Learning Loop
|
|
155
|
+
|
|
156
|
+
- Hook: "学新东西,别只收藏"
|
|
157
|
+
- Body: question → output → feedback → next action
|
|
158
|
+
- Good keywords: `problem-framing`, `learning-loop`, `risk-guardrail`, `decision-fork`
|
|
159
|
+
|
|
160
|
+
## Prompt Pattern
|
|
161
|
+
|
|
162
|
+
Ask the model for strict JSON only:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
把下面内容拆成 PaperSlide 竖屏知识短视频脚本。输出严格 JSON,不要 Markdown。
|
|
166
|
+
要求:1 张 title 卡 + 3 张 body 卡;caption 短、有冲击,不带标点;
|
|
167
|
+
narration 口语化;figureKeyword 从 canonical keyword 表里选,且相邻不重复。
|
|
168
|
+
|
|
169
|
+
内容:
|
|
170
|
+
---
|
|
171
|
+
...
|
|
172
|
+
---
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Common Failures
|
|
176
|
+
|
|
177
|
+
| Failure | Fix |
|
|
178
|
+
|---|---|
|
|
179
|
+
| Caption overflows | Shorten to one idea; remove modifiers. |
|
|
180
|
+
| All visuals look the same | Force unique adjacent `figureKeyword`. |
|
|
181
|
+
| Video feels like PPT | Use spoken narration, not bullet summaries. |
|
|
182
|
+
| Product/research content feels generic | Anchor body cards to user pain, method, evidence, risk, or next action. |
|
|
183
|
+
| Open-source package too heavy | Exclude generated media; keep only instructions and small references. |
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# PaperSlide Example Decks
|
|
2
|
+
|
|
3
|
+
Use these as seed decks. Keep generated videos shorter than 35 seconds unless the user asks for a longer format.
|
|
4
|
+
|
|
5
|
+
## Research Digest
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"header": "读一篇论文,先抓这3个问题",
|
|
10
|
+
"seriesTitle": "论文速读法",
|
|
11
|
+
"seriesTagline": "把复杂研究,拆成可复述的判断",
|
|
12
|
+
"cards": [
|
|
13
|
+
{
|
|
14
|
+
"kind": "title",
|
|
15
|
+
"title": ["读一篇论文", "先抓这3个问题"],
|
|
16
|
+
"narration": "读一篇论文,先不要急着看结论,先抓这三个问题。"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"kind": "body",
|
|
20
|
+
"caption": "它到底想解决什么问题",
|
|
21
|
+
"figureKeyword": "problem-framing",
|
|
22
|
+
"narration": "第一个问题,它到底想解决什么问题。问题错了,后面的模型再漂亮也没用。"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"kind": "body",
|
|
26
|
+
"caption": "方法决定结论能不能信",
|
|
27
|
+
"figureKeyword": "evidence-board",
|
|
28
|
+
"narration": "第二个问题,方法靠不靠谱。样本、变量和评估方式,决定结论能不能信。"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"kind": "body",
|
|
32
|
+
"caption": "最后一定看限制条件",
|
|
33
|
+
"figureKeyword": "risk-guardrail",
|
|
34
|
+
"narration": "第三个问题,一定看限制条件。它会告诉你,这个结论在哪些场景不能乱用。"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Product Update
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"header": "写产品更新,别只罗列功能",
|
|
45
|
+
"seriesTitle": "产品表达法",
|
|
46
|
+
"seriesTagline": "让用户一眼看懂为什么升级",
|
|
47
|
+
"cards": [
|
|
48
|
+
{
|
|
49
|
+
"kind": "title",
|
|
50
|
+
"title": ["产品更新文案", "先回答这3件事"],
|
|
51
|
+
"narration": "写产品更新文案,不要只罗列功能,先回答这三件事。"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"kind": "body",
|
|
55
|
+
"caption": "这次解决了谁的痛点",
|
|
56
|
+
"figureKeyword": "customer-pain",
|
|
57
|
+
"narration": "第一,这次更新解决了谁的痛点。用户先关心自己,不关心你的技术细节。"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"kind": "body",
|
|
61
|
+
"caption": "变化要能一眼看见",
|
|
62
|
+
"figureKeyword": "before-after",
|
|
63
|
+
"narration": "第二,变化要能被一眼看见。截图、对比和一句话,比长说明更有效。"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"kind": "body",
|
|
67
|
+
"caption": "下一步动作必须明确",
|
|
68
|
+
"figureKeyword": "decision-fork",
|
|
69
|
+
"narration": "第三,下一步动作必须明确。让用户知道现在该点哪里,该试什么。"
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Meeting Closeout
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"header": "开完会以后,最怕没有动作",
|
|
80
|
+
"seriesTitle": "会议闭环术",
|
|
81
|
+
"seriesTagline": "把讨论变成责任和时间",
|
|
82
|
+
"cards": [
|
|
83
|
+
{
|
|
84
|
+
"kind": "title",
|
|
85
|
+
"title": ["一场有效会议", "结尾必须有3样东西"],
|
|
86
|
+
"narration": "一场有效会议,结尾必须留下三样东西。"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"kind": "body",
|
|
90
|
+
"caption": "谁负责,不要模糊",
|
|
91
|
+
"figureKeyword": "owner-deadline",
|
|
92
|
+
"narration": "第一,谁负责,不要模糊。没有负责人,就等于没有行动。"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"kind": "body",
|
|
96
|
+
"caption": "什么时候交付",
|
|
97
|
+
"figureKeyword": "timeline-review",
|
|
98
|
+
"narration": "第二,什么时候交付。没有时间点,任务就会一直停在讨论里。"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"kind": "body",
|
|
102
|
+
"caption": "风险提前摆出来",
|
|
103
|
+
"figureKeyword": "risk-guardrail",
|
|
104
|
+
"narration": "第三,风险提前摆出来。真正高效的团队,不怕问题,只怕问题被藏起来。"
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
```
|