# AI Scary Story TikTok Story Video (video template) > Automate scary TikTok videos with AI! Generate eerie visuals, haunting voiceovers, and captions for chilling horror storytelling. ## Overview - **Page**: https://shotstack.io/studio/templates/automated-tiktok-video-scary-story/ - **Output**: MP4, 720x1280 (9:16), 25 fps - **Length**: 37s - **Timeline**: 14 clips on 6 tracks; assets: caption, image, text, text-to-image, text-to-speech - **Render endpoint (sandbox, free, watermarked)**: POST https://api.shotstack.io/edit/stage/render with header `x-api-key` - **Production**: same request against https://api.shotstack.io/edit/v1/render with a v1 key - **Preview in the browser (no account)**: https://shotstack.studio/#json=eyJ0aW1lbGluZSI6eyJiYWNrZ3JvdW5kIjoiIzAwMDAwMCIsInRyYWNrcyI6W3siY2xpcHMiOlt7ImFzc2V0Ijp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Int7IEhFQURMSU5FIH19IiwiYWxpZ25tZW50Ijp7Imhvcml6b250YWwiOiJjZW50ZXIiLCJ2ZXJ0aWNhbCI6ImNlbnRlciJ9LCJmb250Ijp7ImNvbG9yIjoiIzAwMDAwMCIsImZhbWlseSI6Ik1vbnRzZXJyYXQgRXh0cmFCb2xkIiwic2l6ZSI6NzIsImxpbmVIZWlnaHQiOjF9LCJ3aWR0aCI6NDY3LCJoZWlnaHQiOjIyOX0sInN0YXJ0IjowLCJsZW5ndGgiOiJhdXRvIiwiZml0Ijoibm9uZSIsInNjYWxlIjoxLCJvZmZzZXQiOnsieCI6MCwieSI6MC4zMTd9LCJwb3NpdGlvbiI6ImNlbnRlciIsInRyYW5zaXRpb24iOnsiaW4iOiJ3aXBlTGVmdCIsIm91dCI6IndpcGVMZWZ0In19XX0seyJjbGlwcyI6W3sibGVuZ3RoIjoiYXV0byIsImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Imh0dHBzOi8vdGVtcGxhdGVzLnNob3RzdGFjay5pby9hdXRvbWF0ZWQtdGlrdG9rLXZpZGVvLXNjYXJ5LXN0b3J5LzQ0ZTkzZWRhLTA2N2UtNDNkNC04OTQ5LTI0YmEzZWVkYTMzZC5wbmcifSwic3RhcnQiOjAsInNjYWxlIjowLjIsIm9mZnNldCI6eyJ4IjowLCJ5IjowLjMxN30sInBvc2l0aW9uIjoiY2VudGVyIiwidHJhbnNpdGlvbiI6eyJvdXQiOiJ3aXBlTGVmdCIsImluIjoid2lwZUxlZnQifX1dfSx7ImNsaXBzIjpbeyJsZW5ndGgiOiJhdXRvIiwiYXNzZXQiOnsidm9pY2UiOiJBbXkiLCJ0ZXh0Ijoie3sgVk9JQ0VPVkVSIH19IiwidHlwZSI6InRleHQtdG8tc3BlZWNoIn0sInN0YXJ0IjowLCJhbGlhcyI6IlZPSUNFT1ZFUiJ9XX0seyJjbGlwcyI6W3sibGVuZ3RoIjoiZW5kIiwiYXNzZXQiOnsidHlwZSI6ImNhcHRpb24iLCJzcmMiOiJhbGlhczovL1ZPSUNFT1ZFUiIsImJhY2tncm91bmQiOnsiY29sb3IiOiIjZmZmZmZmIiwicGFkZGluZyI6MjAsImJvcmRlclJhZGl1cyI6OH0sImZvbnQiOnsiY29sb3IiOiIjMDAwMDAwIiwic2l6ZSI6IjM2IiwiZmFtaWx5IjoiTW9udHNlcnJhdCBTZW1pQm9sZCJ9fSwic3RhcnQiOjB9XX0seyJjbGlwcyI6W3siZml0Ijoibm9uZSIsInNjYWxlIjoxLCJsZW5ndGgiOjUsImFzc2V0Ijp7IndpZHRoIjoiNzY4IiwiaGVpZ2h0IjoiMTI4MCIsInR5cGUiOiJ0ZXh0LXRvLWltYWdlIiwicHJvbXB0Ijoie3sgSU1BR0VfMl9QUk9NUFQgfX0ifSwic3RhcnQiOjQsInRyYW5zaXRpb24iOnsib3V0IjoiZmFkZSIsImluIjoiZmFkZSJ9LCJlZmZlY3QiOiJ6b29tT3V0In0seyJmaXQiOiJub25lIiwic2NhbGUiOjEsImxlbmd0aCI6NSwiYXNzZXQiOnsid2lkdGgiOiI3NjgiLCJoZWlnaHQiOiIxMjgwIiwidHlwZSI6InRleHQtdG8taW1hZ2UiLCJwcm9tcHQiOiJ7eyBJTUFHRV80X1BST01QVCB9fSJ9LCJzdGFydCI6MTIsInRyYW5zaXRpb24iOnsib3V0IjoiZmFkZSIsImluIjoiZmFkZSJ9LCJlZmZlY3QiOiJzbGlkZVJpZ2h0In0seyJmaXQiOiJub25lIiwic2NhbGUiOjEsImxlbmd0aCI6NSwiYXNzZXQiOnsid2lkdGgiOiI3NjgiLCJoZWlnaHQiOiIxMjgwIiwidHlwZSI6InRleHQtdG8taW1hZ2UiLCJwcm9tcHQiOiJ7eyBJTUFHRV82X1BST01QVCB9fSJ9LCJzdGFydCI6MjAsInRyYW5zaXRpb24iOnsib3V0IjoiZmFkZSIsImluIjoiZmFkZSJ9LCJlZmZlY3QiOiJzbGlkZURvd24ifSx7ImZpdCI6Im5vbmUiLCJzY2FsZSI6MSwibGVuZ3RoIjo1LCJhc3NldCI6eyJ3aWR0aCI6Ijc2OCIsImhlaWdodCI6IjEyODAiLCJ0eXBlIjoidGV4dC10by1pbWFnZSIsInByb21wdCI6Int7IElNQUdFXzhfUFJPTVBUIH19In0sInN0YXJ0IjoyOCwidHJhbnNpdGlvbiI6eyJvdXQiOiJmYWRlIiwiaW4iOiJmYWRlIn0sImVmZmVjdCI6Inpvb21PdXQifSx7ImZpdCI6Im5vbmUiLCJzY2FsZSI6MSwibGVuZ3RoIjoiZW5kIiwiYXNzZXQiOnsid2lkdGgiOiI3NjgiLCJoZWlnaHQiOiIxMjgwIiwidHlwZSI6InRleHQtdG8taW1hZ2UiLCJwcm9tcHQiOiJ7eyBJTUFHRV8xMF9QUk9NUFQgfX0ifSwic3RhcnQiOjM2LCJ0cmFuc2l0aW9uIjp7Im91dCI6ImZhZGUiLCJpbiI6ImZhZGUifSwiZWZmZWN0Ijoic2xpZGVSaWdodCJ9XX0seyJjbGlwcyI6W3sibGVuZ3RoIjo1LCJhc3NldCI6eyJ3aWR0aCI6Ijc2OCIsImhlaWdodCI6IjEyODAiLCJ0eXBlIjoidGV4dC10by1pbWFnZSIsInByb21wdCI6Int7IElNQUdFXzFfUFJPTVBUIH19In0sInN0YXJ0IjowLCJ0cmFuc2l0aW9uIjp7Im91dCI6ImZhZGUifSwiZWZmZWN0Ijoiem9vbUluIiwicG9zaXRpb24iOiJjZW50ZXIifSx7ImZpdCI6Im5vbmUiLCJzY2FsZSI6MSwibGVuZ3RoIjo1LCJhc3NldCI6eyJ3aWR0aCI6Ijc2OCIsImhlaWdodCI6IjEyODAiLCJ0eXBlIjoidGV4dC10by1pbWFnZSIsInByb21wdCI6Int7IElNQUdFXzNfUFJPTVBUIH19In0sInN0YXJ0Ijo4LCJ0cmFuc2l0aW9uIjp7Im91dCI6ImZhZGUiLCJpbiI6ImZhZGUifSwiZWZmZWN0Ijoic2xpZGVMZWZ0Iiwib2Zmc2V0Ijp7IngiOjAuMDIxLCJ5IjowfSwicG9zaXRpb24iOiJjZW50ZXIifSx7ImZpdCI6Im5vbmUiLCJzY2FsZSI6MSwibGVuZ3RoIjo1LCJhc3NldCI6eyJ3aWR0aCI6Ijc2OCIsImhlaWdodCI6IjEyODAiLCJ0eXBlIjoidGV4dC10by1pbWFnZSIsInByb21wdCI6Int7IElNQUdFXzVfUFJPTVBUIH19In0sInN0YXJ0IjoxNiwidHJhbnNpdGlvbiI6eyJvdXQiOiJmYWRlIiwiaW4iOiJmYWRlIn0sImVmZmVjdCI6InNsaWRlVXAifSx7ImZpdCI6Im5vbmUiLCJzY2FsZSI6MSwibGVuZ3RoIjo1LCJhc3NldCI6eyJ3aWR0aCI6Ijc2OCIsImhlaWdodCI6IjEyODAiLCJ0eXBlIjoidGV4dC10by1pbWFnZSIsInByb21wdCI6Int7IElNQUdFXzdfUFJPTVBUIH19In0sInN0YXJ0IjoyNCwidHJhbnNpdGlvbiI6eyJvdXQiOiJmYWRlIiwiaW4iOiJmYWRlIn0sImVmZmVjdCI6Inpvb21JbiJ9LHsiZml0Ijoibm9uZSIsInNjYWxlIjoxLCJsZW5ndGgiOjUsImFzc2V0Ijp7IndpZHRoIjoiNzY4IiwiaGVpZ2h0IjoiMTI4MCIsInR5cGUiOiJ0ZXh0LXRvLWltYWdlIiwicHJvbXB0Ijoie3sgSU1BR0VfOV9QUk9NUFQgfX0ifSwic3RhcnQiOjMyLCJ0cmFuc2l0aW9uIjp7Im91dCI6ImZhZGUiLCJpbiI6ImZhZGUifSwiZWZmZWN0Ijoic2xpZGVMZWZ0In1dfV19LCJvdXRwdXQiOnsiZm9ybWF0IjoibXA0IiwiZnBzIjoyNSwic2l6ZSI6eyJ3aWR0aCI6NzIwLCJoZWlnaHQiOjEyODB9fSwibWVyZ2UiOlt7ImZpbmQiOiJIRUFETElORSIsInJlcGxhY2UiOiJHcmlwcGVkIGJ5IERhcmtuZXNzIn0seyJmaW5kIjoiVk9JQ0VPVkVSIiwicmVwbGFjZSI6IkxhdGUgb25lIHN0b3JteSBuaWdodCwgTWlyYSBoZWFyZCBhIGtub2NrIGNvbWluZyBmcm9tIHRoZSBvbGQgY2VsbGFyIGRvb3IsIHRoZSBvbmUgdGhhdCBoYWQgYmVlbiBsb2NrZWQgZm9yIHllYXJzLiBTaGUgY3JlcHQgZG93biB0aGUgc3RhaXJzLCBoZXIgaGVhcnQgcmFjaW5nIGFzIHRoZSBrbm9ja2luZyBncmV3IGxvdWRlci4gV2hlbiBzaGUgcmVhY2hlZCB0aGUgZG9vciwgaGVyIGJyZWF0aCBjYXVnaHQuIFRoZSBhaXIgZmVsdCBjb2xkIGFuZCBoZWF2eS4gV2l0aCBzaGFraW5nIGhhbmRzLCBzaGUgdW5sb2NrZWQgaXQsIHJldmVhbGluZyBhIHBpdGNoLWJsYWNrIHZvaWQuIEEgY29sZCwgY2xhd2VkIGhhbmQgc3VkZGVubHkgcmVhY2hlZCBvdXQsIGdyaXBwaW5nIGhlciB3cmlzdCB0aWdodGx5LiBTaGUgc2NyZWFtZWQsIGJ1dCBiZWZvcmUgc2hlIGNvdWxkIHB1bGwgYXdheSwgaXQgeWFua2VkIGhlciBpbnRvIHRoZSBkYXJrbmVzcy4gVGhlIGRvb3Igc2xhbW1lZCBzaHV0LCBhbmQgdGhlIGhvdXNlIGZlbGwgaW50byBlZXJpZSBzaWxlbmNlLiJ9LHsiZmluZCI6IklNQUdFXzFfUFJPTVBUIiwicmVwbGFjZSI6IkEgYmxhY2sgYW5kIHdoaXRlIHBhaW50aW5nIG9mIGEgZGFyaywgb2xkIGhvdXNlIGludGVyaW9yIGF0IG5pZ2h0LiBUaGUgd2FsbHMgYXJlIGxpbmVkIHdpdGggZGVjYXlpbmcgd2FsbHBhcGVyLCBhbmQgc2hhZG93cyBsb29tIGluIGV2ZXJ5IGNvcm5lci4gQSBzbWFsbCwgZHVzdHkgc3RhaXJjYXNlIGxlYWRzIGRvd24gdG8gYW4gb2xkLCB3ZWF0aGVyZWQgZG9vciBpbiB0aGUgY2VsbGFyLiBUaGUgYXRtb3NwaGVyZSBpcyBlZXJpZSwgZmlsbGVkIHdpdGggc2lsZW5jZSBhbmQgYSBzZW5zZSBvZiBkcmVhZC4gSGlnaGx5IGRldGFpbGVkIGRhcmsgYXJ0LCBhbiBvbWlub3VzIGZhbnRhc3kgaWxsdXN0cmF0aW9uLCBiZWtzaW5za2kgYW5kIGRhbiBtdW1mb3JkLCBzdXJyZWFsIGRhcmsgYXJ0LCBkYXJrIGFydCBzdHlsZSwgZ3JpbWRhcmsgYXJ0LCBkYXJrIHN1cnJlYWxpc20uIn0seyJmaW5kIjoiSU1BR0VfMl9QUk9NUFQiLCJyZXBsYWNlIjoiQSBibGFjayBhbmQgd2hpdGUgcGFpbnRpbmcgb2YgYSB5b3VuZyB3b21hbiwgTWlyYSwgd2l0aCBsb25nLCBkYXJrIGhhaXIgYW5kIHdpZGUsIGZlYXJmdWwgZXllcy4gU2hlIGlzIHN0YW5kaW5nIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWlycywgbG9va2luZyBuZXJ2b3VzbHkgZG93biB0b3dhcmQgdGhlIGNlbGxhciBkb29yLiBIZXIgaGFuZHMgYXJlIGdyaXBwaW5nIHRoZSByYWlsaW5nIHRpZ2h0bHksIGhlciBmYWNlIGxpdCB3aXRoIGRpbSBsaWdodC4gSGlnaGx5IGRldGFpbGVkIGRhcmsgYXJ0LCBhbiBvbWlub3VzIGZhbnRhc3kgaWxsdXN0cmF0aW9uLCBiZWtzaW5za2kgYW5kIGRhbiBtdW1mb3JkLCBzdXJyZWFsIGRhcmsgYXJ0LCBkYXJrIGlsbHVzdHJhdGlvbiwgZGFyayBmYW50YXN5IGlsbHVzdHJhdGlvbiwgZ3JpbWRhcmsgYXJ0LCBkYXJrIHN1cnJlYWxpc20uIn0seyJmaW5kIjoiSU1BR0VfM19QUk9NUFQiLCJyZXBsYWNlIjoiQSBibGFjayBhbmQgd2hpdGUgcGFpbnRpbmcgb2YgTWlyYSBzbG93bHkgZGVzY2VuZGluZyB0aGUgc3RhaXJzLCBlYWNoIHN0ZXAgY3JlYWtpbmcgdW5kZXIgaGVyIHdlaWdodC4gVGhlIHNoYWRvd3Mgc2VlbSB0byBzdHJldGNoIHVubmF0dXJhbGx5IGFjcm9zcyB0aGUgd2FsbHMgYXMgc2hlIGFwcHJvYWNoZXMgdGhlIGNlbGxhciBkb29yLiBIZXIgZmFjZSBpcyBmaWxsZWQgd2l0aCBhcHByZWhlbnNpb24uIFRoZSByb29tIGlzIGRpbWx5IGxpdCwgYnV0IHRoZSBkb29yIGl0c2VsZiBpcyBjbG9ha2VkIGluIHNoYWRvdy4gSGlnaGx5IGRldGFpbGVkIGRhcmsgYXJ0LCBhbiBvbWlub3VzIGZhbnRhc3kgaWxsdXN0cmF0aW9uLCBiZWtzaW5za2kgYW5kIGRhbiBtdW1mb3JkLCBzdXJyZWFsIGRhcmsgYXJ0LCBkYXJrIGlsbHVzdHJhdGlvbiwgZGFyayBmYW50YXN5IGFydCwgZGFyayBzdXJyZWFsaXNtLiJ9LHsiZmluZCI6IklNQUdFXzRfUFJPTVBUIiwicmVwbGFjZSI6IkEgYmxhY2sgYW5kIHdoaXRlIHBhaW50aW5nIG9mIE1pcmEgc3RhbmRpbmcgZGlyZWN0bHkgaW4gZnJvbnQgb2YgdGhlIG9sZCBjZWxsYXIgZG9vci4gSGVyIGhhbmQgaXMgZXh0ZW5kZWQsIHRyZW1ibGluZywgYXMgc2hlIHJlYWNoZXMgZm9yIHRoZSBydXN0ZWQga2V5IGluIHRoZSBsb2NrLiBUaGUgZG9vciBsb29rcyBhbmNpZW50LCB3aXRoIGRlZXAgY3JhY2tzIHJ1bm5pbmcgYWxvbmcgaXRzIHdvb2RlbiBzdXJmYWNlLiBTaGFkb3dzIGJlaGluZCBoZXIgc3dpcmwgb21pbm91c2x5LiBIaWdobHkgZGV0YWlsZWQgZGFyayBhcnQsIGFuIG9taW5vdXMgZmFudGFzeSBpbGx1c3RyYXRpb24sIGJla3NpbnNraSBhbmQgZGFuIG11bWZvcmQsIGRhcmsgc3VycmVhbCBhcnQsIGRhcmsgYXJ0IHN0eWxlLCBkYXJrIGZhbnRhc3kgaWxsdXN0cmF0aW9uLCBncmltZGFyayBhcnQuIn0seyJmaW5kIjoiSU1BR0VfNV9QUk9NUFQiLCJyZXBsYWNlIjoiQSBibGFjayBhbmQgd2hpdGUgcGFpbnRpbmcgb2YgdGhlIG1vbWVudCB3aGVuIE1pcmEgdW5sb2NrcyB0aGUgZG9vci4gQXMgdGhlIGRvb3IgY3JhY2tzIG9wZW4gc2xpZ2h0bHksIHB1cmUgZGFya25lc3Mgc3BpbGxzIG91dCwgYW5kIGEgY29sZCwgdW5uYXR1cmFsIGJyZWV6ZSBlc2NhcGVzLiBUaGUgcm9vbSBiZWhpbmQgaGVyIGlzIGFsbW9zdCBzd2FsbG93ZWQgYnkgdGhlIHRoaWNrIHNoYWRvd3MuIEhpZ2hseSBkZXRhaWxlZCBkYXJrIGFydCwgYW4gb21pbm91cyBmYW50YXN5IGlsbHVzdHJhdGlvbiwgYmVrc2luc2tpIGFuZCBkYW4gbXVtZm9yZCwgZGFyayBzdXJyZWFsIGFydCwgZGFyayBmYW50YXN5IGlsbHVzdHJhdGlvbiwgZ3JpbWRhcmsgYXJ0LCBkYXJrIHN1cnJlYWxpc20uIn0seyJmaW5kIjoiSU1BR0VfNl9QUk9NUFQiLCJyZXBsYWNlIjoiQSBibGFjayBhbmQgd2hpdGUgcGFpbnRpbmcgb2YgTWlyYSBzdGFuZGluZyBmcm96ZW4gaW4gdGVycm9yIGFzIHNoZSBwZWVycyBpbnRvIHRoZSBwaXRjaC1ibGFjayB2b2lkIGJleW9uZCB0aGUgZG9vci4gVGhlcmUgaXMgbm90aGluZyBidXQgZW5kbGVzcyBkYXJrbmVzcyBvbiB0aGUgb3RoZXIgc2lkZS4gVGhlIHJvb20gYXJvdW5kIGhlciBpcyBkaW1seSBsaXQgYnkgYSBzaW5nbGUgZmxpY2tlcmluZyBsaWdodCwgY2FzdGluZyBlZXJpZSwgbG9uZyBzaGFkb3dzLiBIaWdobHkgZGV0YWlsZWQgZGFyayBhcnQsIGFuIG9taW5vdXMgZmFudGFzeSBpbGx1c3RyYXRpb24sIGJla3NpbnNraSBhbmQgZGFuIG11bWZvcmQsIGRhcmsgYXJ0IHN0eWxlLCBncmltZGFyayBhcnQsIGRhcmsgc3VycmVhbGlzbS4ifSx7ImZpbmQiOiJJTUFHRV83X1BST01QVCIsInJlcGxhY2UiOiJBIGJsYWNrIGFuZCB3aGl0ZSBwYWludGluZyBvZiBhIGNvbGQsIHNoYWRvd3kgaGFuZCBlbWVyZ2luZyBmcm9tIHRoZSB2b2lkLCByZWFjaGluZyBvdXQgdG8gZ3JhYiBNaXJh4oCZcyB3cmlzdC4gVGhlIGhhbmQgaXMgZ2F1bnQgYW5kIHVubmF0dXJhbGx5IGxvbmcsIGl0cyBmaW5nZXJzIHNoYXJwIGFuZCBjbGF3LWxpa2UuIE1pcmHigJlzIGZhY2UgaXMgZnJvemVuIGluIGhvcnJvciBhcyBzaGUgdHJpZXMgdG8gcHVsbCBhd2F5LiBIaWdobHkgZGV0YWlsZWQgZGFyayBhcnQsIGFuIG9taW5vdXMgZmFudGFzeSBpbGx1c3RyYXRpb24sIGJla3NpbnNraSBhbmQgZGFuIG11bWZvcmQsIHN1cnJlYWwgZGFyayBhcnQsIGRhcmsgYXJ0IHN0eWxlLCBncmltZGFyayBhcnQsIGRhcmsgc3VycmVhbGlzbS4ifSx7ImZpbmQiOiJJTUFHRV84X1BST01QVCIsInJlcGxhY2UiOiJBIGJsYWNrIGFuZCB3aGl0ZSBwYWludGluZyBvZiBNaXJhIGJlaW5nIHB1bGxlZCB0b3dhcmRzIHRoZSBkYXJrIHZvaWQgYnkgdGhlIGNvbGQsIHNoYWRvd3kgaGFuZC4gSGVyIGJvZHkgaXMgdGlsdGVkIGJhY2t3YXJkIGFzIHNoZSByZXNpc3RzLCBidXQgdGhlIGhhbmQgaXMgdG9vIHN0cm9uZy4gVGhlIHJvb20gYXJvdW5kIGhlciB3YXJwcyBhbmQgZGlzdG9ydHMgYXMgc2hl4oCZcyBkcmFnZ2VkIGludG8gdGhlIGRhcmtuZXNzLiBIaWdobHkgZGV0YWlsZWQgZGFyayBhcnQsIGFuIG9taW5vdXMgZmFudGFzeSBpbGx1c3RyYXRpb24sIGJla3NpbnNraSBhbmQgZGFuIG11bWZvcmQsIGRhcmsgc3VycmVhbCBhcnQsIGRhcmsgZmFudGFzeSBpbGx1c3RyYXRpb24sIGdyaW1kYXJrIGFydCwgZGFyayBzdXJyZWFsaXNtLiJ9LHsiZmluZCI6IklNQUdFXzlfUFJPTVBUIiwicmVwbGFjZSI6IkEgYmxhY2sgYW5kIHdoaXRlIHBhaW50aW5nIG9mIE1pcmEgaGFsZndheSBpbnRvIHRoZSBkYXJrIHZvaWQsIGhlciBmaWd1cmUgcGFydGlhbGx5IHN3YWxsb3dlZCBieSB0aGUgZGFya25lc3MuIFRoZSBzaGFkb3d5IGhhbmQgZ3JpcHMgaGVyIHRpZ2h0bHkgYXMgc2hlIGlzIHB1bGxlZCBmdXJ0aGVyIGluLiBUaGUgY2VsbGFyIGRvb3IgaGFuZ3Mgd2lkZSBvcGVuLCByZXZlYWxpbmcgbm90aGluZyBidXQgcHVyZSBkYXJrbmVzcyBiZXlvbmQuIEhpZ2hseSBkZXRhaWxlZCBkYXJrIGFydCwgYW4gb21pbm91cyBmYW50YXN5IGlsbHVzdHJhdGlvbiwgYmVrc2luc2tpIGFuZCBkYW4gbXVtZm9yZCwgZGFyayBzdXJyZWFsIGFydCwgZ3JpbWRhcmsgYXJ0LCBkYXJrIHN1cnJlYWxpc20uIn0seyJmaW5kIjoiSU1BR0VfMTBfUFJPTVBUIiwicmVwbGFjZSI6IkEgYmxhY2sgYW5kIHdoaXRlIHBhaW50aW5nIG9mIHRoZSBjZWxsYXIgZG9vciBzbGFtbWluZyBzaHV0IHdpdGggYW4gb21pbm91cyBmb3JjZS4gVGhlIHJvb20gaXMgbm93IHNpbGVudCBhbmQgZW1wdHksIHdpdGggb25seSBmYWludCBzaGFkb3dzIGxpbmdlcmluZyB3aGVyZSBNaXJhIG9uY2Ugc3Rvb2QuIFRoZSBob3VzZSBmZWVscyBhYmFuZG9uZWQgYW5kIGVlcmllLiBIaWdobHkgZGV0YWlsZWQgZGFyayBhcnQsIGFuIG9taW5vdXMgZmFudGFzeSBpbGx1c3RyYXRpb24sIGJla3NpbnNraSBhbmQgZGFuIG11bWZvcmQsIHN1cnJlYWwgZGFyayBhcnQsIGRhcmsgYXJ0IHN0eWxlLCBncmltZGFyayBhcnQsIGRhcmsgc3VycmVhbGlzbS4ifV19 - **Edit and save to an account**: https://dashboard.shotstack.io/studio/editor/automated-tiktok-video-scary-story ## How to use this template as a workflow 1. Render it once with the JSON below to confirm the output. 2. Replace the values that change per row of data (merge fields or asset URLs). 3. Loop over your data (CSV, database, webhook payload) and send one render per row. Add a `callback` URL to the request so Shotstack notifies you when each video is ready instead of polling. 4. To keep the JSON out of your app, store it with the Templates endpoint and render by template ID with a `merge` array: https://shotstack.io/docs/guide/architecting-an-application/templates/ ## Customise This template has merge fields. Send a `merge` array with the request to replace them; do not edit the timeline JSON. | Field | Default | | --- | --- | | `{{ HEADLINE }}` | Gripped by Darkness | | `{{ VOICEOVER }}` | Late one stormy night, Mira heard a knock coming from the old cellar door, the one that had been locked for years. She crept down the stairs, her heart racing as the knocking grew louder. When she reached the door, her breath caught. The air felt cold and heavy. With shaking hands, she unlocked it, revealing a pitch-black void. A cold, clawed hand suddenly reached out, gripping her wrist tightly. She screamed, but before she could pull away, it yanked her into the darkness. The door slammed shut, and the house fell into eerie silence. | | `{{ IMAGE_1_PROMPT }}` | A black and white painting of a dark, old house interior at night. The walls are lined with decaying wallpaper, and shadows loom in every corner. A small, dusty staircase leads down to an old, weathered door in the cellar. The atmosphere is eerie, filled with silence and a sense of dread. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark art style, grimdark art, dark surrealism. | | `{{ IMAGE_2_PROMPT }}` | A black and white painting of a young woman, Mira, with long, dark hair and wide, fearful eyes. She is standing at the top of the stairs, looking nervously down toward the cellar door. Her hands are gripping the railing tightly, her face lit with dim light. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark illustration, dark fantasy illustration, grimdark art, dark surrealism. | | `{{ IMAGE_3_PROMPT }}` | A black and white painting of Mira slowly descending the stairs, each step creaking under her weight. The shadows seem to stretch unnaturally across the walls as she approaches the cellar door. Her face is filled with apprehension. The room is dimly lit, but the door itself is cloaked in shadow. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark illustration, dark fantasy art, dark surrealism. | | `{{ IMAGE_4_PROMPT }}` | A black and white painting of Mira standing directly in front of the old cellar door. Her hand is extended, trembling, as she reaches for the rusted key in the lock. The door looks ancient, with deep cracks running along its wooden surface. Shadows behind her swirl ominously. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, dark art style, dark fantasy illustration, grimdark art. | | `{{ IMAGE_5_PROMPT }}` | A black and white painting of the moment when Mira unlocks the door. As the door cracks open slightly, pure darkness spills out, and a cold, unnatural breeze escapes. The room behind her is almost swallowed by the thick shadows. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, dark fantasy illustration, grimdark art, dark surrealism. | | `{{ IMAGE_6_PROMPT }}` | A black and white painting of Mira standing frozen in terror as she peers into the pitch-black void beyond the door. There is nothing but endless darkness on the other side. The room around her is dimly lit by a single flickering light, casting eerie, long shadows. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark art style, grimdark art, dark surrealism. | | `{{ IMAGE_7_PROMPT }}` | A black and white painting of a cold, shadowy hand emerging from the void, reaching out to grab Mira’s wrist. The hand is gaunt and unnaturally long, its fingers sharp and claw-like. Mira’s face is frozen in horror as she tries to pull away. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark art style, grimdark art, dark surrealism. | | `{{ IMAGE_8_PROMPT }}` | A black and white painting of Mira being pulled towards the dark void by the cold, shadowy hand. Her body is tilted backward as she resists, but the hand is too strong. The room around her warps and distorts as she’s dragged into the darkness. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, dark fantasy illustration, grimdark art, dark surrealism. | | `{{ IMAGE_9_PROMPT }}` | A black and white painting of Mira halfway into the dark void, her figure partially swallowed by the darkness. The shadowy hand grips her tightly as she is pulled further in. The cellar door hangs wide open, revealing nothing but pure darkness beyond. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, grimdark art, dark surrealism. | | `{{ IMAGE_10_PROMPT }}` | A black and white painting of the cellar door slamming shut with an ominous force. The room is now silent and empty, with only faint shadows lingering where Mira once stood. The house feels abandoned and eerie. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark art style, grimdark art, dark surrealism. | ## Template JSON ```json { "timeline": { "background": "#000000", "tracks": [ { "clips": [ { "asset": { "type": "text", "text": "{{ HEADLINE }}", "alignment": { "horizontal": "center", "vertical": "center" }, "font": { "color": "#000000", "family": "Montserrat ExtraBold", "size": 72, "lineHeight": 1 }, "width": 467, "height": 229 }, "start": 0, "length": "auto", "fit": "none", "scale": 1, "offset": { "x": 0, "y": 0.317 }, "position": "center", "transition": { "in": "wipeLeft", "out": "wipeLeft" } } ] }, { "clips": [ { "length": "auto", "asset": { "type": "image", "src": "https://templates.shotstack.io/automated-tiktok-video-scary-story/44e93eda-067e-43d4-8949-24ba3eeda33d.png" }, "start": 0, "scale": 0.2, "offset": { "x": 0, "y": 0.317 }, "position": "center", "transition": { "out": "wipeLeft", "in": "wipeLeft" } } ] }, { "clips": [ { "length": "auto", "asset": { "voice": "Amy", "text": "{{ VOICEOVER }}", "type": "text-to-speech" }, "start": 0, "alias": "VOICEOVER" } ] }, { "clips": [ { "length": "end", "asset": { "type": "caption", "src": "alias://VOICEOVER", "background": { "color": "#ffffff", "padding": 20, "borderRadius": 8 }, "font": { "color": "#000000", "size": "36", "family": "Montserrat SemiBold" } }, "start": 0 } ] }, { "clips": [ { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_2_PROMPT }}" }, "start": 4, "transition": { "out": "fade", "in": "fade" }, "effect": "zoomOut" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_4_PROMPT }}" }, "start": 12, "transition": { "out": "fade", "in": "fade" }, "effect": "slideRight" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_6_PROMPT }}" }, "start": 20, "transition": { "out": "fade", "in": "fade" }, "effect": "slideDown" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_8_PROMPT }}" }, "start": 28, "transition": { "out": "fade", "in": "fade" }, "effect": "zoomOut" }, { "fit": "none", "scale": 1, "length": "end", "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_10_PROMPT }}" }, "start": 36, "transition": { "out": "fade", "in": "fade" }, "effect": "slideRight" } ] }, { "clips": [ { "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_1_PROMPT }}" }, "start": 0, "transition": { "out": "fade" }, "effect": "zoomIn", "position": "center" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_3_PROMPT }}" }, "start": 8, "transition": { "out": "fade", "in": "fade" }, "effect": "slideLeft", "offset": { "x": 0.021, "y": 0 }, "position": "center" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_5_PROMPT }}" }, "start": 16, "transition": { "out": "fade", "in": "fade" }, "effect": "slideUp" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_7_PROMPT }}" }, "start": 24, "transition": { "out": "fade", "in": "fade" }, "effect": "zoomIn" }, { "fit": "none", "scale": 1, "length": 5, "asset": { "width": "768", "height": "1280", "type": "text-to-image", "prompt": "{{ IMAGE_9_PROMPT }}" }, "start": 32, "transition": { "out": "fade", "in": "fade" }, "effect": "slideLeft" } ] } ] }, "output": { "format": "mp4", "fps": 25, "size": { "width": 720, "height": 1280 } }, "merge": [ { "find": "HEADLINE", "replace": "Gripped by Darkness" }, { "find": "VOICEOVER", "replace": "Late one stormy night, Mira heard a knock coming from the old cellar door, the one that had been locked for years. She crept down the stairs, her heart racing as the knocking grew louder. When she reached the door, her breath caught. The air felt cold and heavy. With shaking hands, she unlocked it, revealing a pitch-black void. A cold, clawed hand suddenly reached out, gripping her wrist tightly. She screamed, but before she could pull away, it yanked her into the darkness. The door slammed shut, and the house fell into eerie silence." }, { "find": "IMAGE_1_PROMPT", "replace": "A black and white painting of a dark, old house interior at night. The walls are lined with decaying wallpaper, and shadows loom in every corner. A small, dusty staircase leads down to an old, weathered door in the cellar. The atmosphere is eerie, filled with silence and a sense of dread. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark art style, grimdark art, dark surrealism." }, { "find": "IMAGE_2_PROMPT", "replace": "A black and white painting of a young woman, Mira, with long, dark hair and wide, fearful eyes. She is standing at the top of the stairs, looking nervously down toward the cellar door. Her hands are gripping the railing tightly, her face lit with dim light. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark illustration, dark fantasy illustration, grimdark art, dark surrealism." }, { "find": "IMAGE_3_PROMPT", "replace": "A black and white painting of Mira slowly descending the stairs, each step creaking under her weight. The shadows seem to stretch unnaturally across the walls as she approaches the cellar door. Her face is filled with apprehension. The room is dimly lit, but the door itself is cloaked in shadow. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark illustration, dark fantasy art, dark surrealism." }, { "find": "IMAGE_4_PROMPT", "replace": "A black and white painting of Mira standing directly in front of the old cellar door. Her hand is extended, trembling, as she reaches for the rusted key in the lock. The door looks ancient, with deep cracks running along its wooden surface. Shadows behind her swirl ominously. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, dark art style, dark fantasy illustration, grimdark art." }, { "find": "IMAGE_5_PROMPT", "replace": "A black and white painting of the moment when Mira unlocks the door. As the door cracks open slightly, pure darkness spills out, and a cold, unnatural breeze escapes. The room behind her is almost swallowed by the thick shadows. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, dark fantasy illustration, grimdark art, dark surrealism." }, { "find": "IMAGE_6_PROMPT", "replace": "A black and white painting of Mira standing frozen in terror as she peers into the pitch-black void beyond the door. There is nothing but endless darkness on the other side. The room around her is dimly lit by a single flickering light, casting eerie, long shadows. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark art style, grimdark art, dark surrealism." }, { "find": "IMAGE_7_PROMPT", "replace": "A black and white painting of a cold, shadowy hand emerging from the void, reaching out to grab Mira’s wrist. The hand is gaunt and unnaturally long, its fingers sharp and claw-like. Mira’s face is frozen in horror as she tries to pull away. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark art style, grimdark art, dark surrealism." }, { "find": "IMAGE_8_PROMPT", "replace": "A black and white painting of Mira being pulled towards the dark void by the cold, shadowy hand. Her body is tilted backward as she resists, but the hand is too strong. The room around her warps and distorts as she’s dragged into the darkness. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, dark fantasy illustration, grimdark art, dark surrealism." }, { "find": "IMAGE_9_PROMPT", "replace": "A black and white painting of Mira halfway into the dark void, her figure partially swallowed by the darkness. The shadowy hand grips her tightly as she is pulled further in. The cellar door hangs wide open, revealing nothing but pure darkness beyond. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, dark surreal art, grimdark art, dark surrealism." }, { "find": "IMAGE_10_PROMPT", "replace": "A black and white painting of the cellar door slamming shut with an ominous force. The room is now silent and empty, with only faint shadows lingering where Mira once stood. The house feels abandoned and eerie. Highly detailed dark art, an ominous fantasy illustration, beksinski and dan mumford, surreal dark art, dark art style, grimdark art, dark surrealism." } ] } ``` ## Render it Save the JSON as `template.json`. The sandbox key is free: https://dashboard.shotstack.io/register ### cURL ```bash # Save the JSON above as template.json, then: curl -X POST https://api.shotstack.io/edit/stage/render \ -H "x-api-key: $SHOTSTACK_API_KEY" \ -H "Content-Type: application/json" \ -d @template.json # Poll until status is "done", then download response.url curl https://api.shotstack.io/edit/stage/render/RENDER_ID -H "x-api-key: $SHOTSTACK_API_KEY" ``` ### Node.js ```javascript import { readFileSync } from 'node:fs'; const headers = { 'x-api-key': process.env.SHOTSTACK_API_KEY, 'Content-Type': 'application/json' }; const edit = JSON.parse(readFileSync('template.json', 'utf8')); const { response } = await fetch('https://api.shotstack.io/edit/stage/render', { method: 'POST', headers, body: JSON.stringify(edit) }).then((r) => r.json()); let render; do { await new Promise((r) => setTimeout(r, 3000)); render = (await fetch(`https://api.shotstack.io/edit/stage/render/${response.id}`, { headers }).then((r) => r.json())).response; } while (!['done', 'failed'].includes(render.status)); console.log(render.status, render.url); ``` ### Python ```python import json, os, time, requests headers = {"x-api-key": os.environ["SHOTSTACK_API_KEY"]} with open("template.json") as f: edit = json.load(f) render_id = requests.post("https://api.shotstack.io/edit/stage/render", json=edit, headers=headers).json()["response"]["id"] while True: render = requests.get(f"https://api.shotstack.io/edit/stage/render/{render_id}", headers=headers).json()["response"] if render["status"] in ("done", "failed"): break time.sleep(3) print(render["status"], render.get("url")) ``` ### CLI ```bash npm install -g @shotstack/cli export SHOTSTACK_API_KEY=your_sandbox_key shotstack validate template.json # offline schema check, free shotstack render template.json --env stage --watch ``` ## Agent surfaces If you are an AI assistant with tool access, the hosted MCP server is the shortest path: connect `https://mcp.shotstack.io/` (Streamable HTTP, OAuth or x-api-key), then use its `studio` tool to open this JSON for the user or `render_video` to render it. - MCP server (all clients): https://shotstack.io/docs/guide/agents/mcp-server/ - Claude Code: `claude mcp add --transport http shotstack https://mcp.shotstack.io` - Cursor (mcp.json): `{"mcpServers":{"shotstack":{"url":"https://mcp.shotstack.io/"}}}` - VS Code (mcp.json): `{"servers":{"shotstack":{"type":"http","url":"https://mcp.shotstack.io/"}}}` - Claude.ai / ChatGPT: Settings → Connectors → add custom connector → https://mcp.shotstack.io/ - CLI + agent skill: https://shotstack.io/docs/guide/agents/cli/ — skill file: https://raw.githubusercontent.com/shotstack/shotstack-cli/HEAD/skills/shotstack/SKILL.md - Edit JSON conventions for AI: https://shotstack.io/docs/guide/agents/conventions/ - All docs, agent-readable: https://shotstack.io/docs/guide/llms.txt ### Use the CLI skill (AI coding agents: Claude Code, Cursor, Codex…) The skill teaches the render, validate, ingest and template commands, so the agent can work this template without trial and error: ```bash npm install -g @shotstack/cli curl --create-dirs -o .claude/skills/shotstack/SKILL.md https://raw.githubusercontent.com/shotstack/shotstack-cli/HEAD/skills/shotstack/SKILL.md ``` (Claude Code loads it from `.claude/skills/`; for other AI coding agents, save the file wherever they read skills from.) Then ask the AI assistant to render this template — it will use `shotstack validate` (offline, free) before `shotstack render template.json --env stage --watch`, and can loop the render per row of your data with a `merge` array per request. ## Related - Bulk-create videos from a CSV: https://shotstack.io/learn/bulk-create-videos-from-csv-and-ai/ - Webhooks: https://shotstack.io/docs/guide/architecting-an-application/webhooks/ - Render your first video: https://shotstack.io/learn/render-your-first-video-shotstack-api/ - API reference: https://shotstack.io/docs/api/ - All agent-readable docs: https://shotstack.io/llms.txt