New: AI voiceover + auto-captions - script to captioned video in one API call. Read the announcement

Social Media Video Template

Scary Story / Creepypasta

A 9:16 horror short built as a reading machine rather than a poster: one crimson progress rule bleeding across the top edge for the full runtime, a fixed caption band at y=1230, and three beats where a single sentence is held alone. The colour hierarchy is the mechanic — bone is what the voice has already said, ash is what it has not reached, and a solid crimson box marks the word being spoken right now; on the last line the box never appears, because the voice has stopped. Five scenes over 48s at 1080×1920 / 30fps: the hook on void black, the place with word-timed captions over a night photograph, the turn on the video's one ash-grey frame (the same street with the film burned out), the last line held in silence, and a follow card. Per render the operator swaps eleven fields: story_title (used on the hook and the follow card), hook_line, turn_line plus turn_phrase (the nominated phrase, the only place crimson sets type), final_line, channel_handle, the optional part_label and story_credit, and three image slots — backdrop_1 (scene 02), backdrop_1_ghost (the same photograph re-graded for scene 03) and backdrop_2 (scene 04). Scene 02's caption track ships as a pre-timed word-by-word default: Renderly caption overlays have no replaceable field in the template processor, so the story body is swapped through the auto-caption pipeline rather than a plain string replacement.

Aspect ratio
9:16 · Vertical
Duration
~48s
Category
Social Media

What you can customize

This template exposes 11 dynamic fields you can swap per video — edit them in the editor or pass them to the API to batch-render variations at scale. The monospace name is the exact key to send in replacements.

  • Part Label

    text
    part_label

    STORY 047

    ~29 characters max · 1 line

  • Story Title

    text
    story_title

    The Neighbour Who Waved Back

    ~56 characters max · 3 lines

  • Hook Line

    text
    hook_line

    For eleven years my neighbour waved at me from his window every morning.

    ~120 characters max · 3 lines

  • Story Credit

    text
    story_credit

    STORY BY U/ANON · USED WITH PERMISSION

    ~96 characters max · 1 line

  • Backdrop 1

    url
    backdrop_1

    https://images.unsplash.com/photo-1760278357611-0c06ab1ded5b?w=1400&q=75&auto=format&fit=crop

  • Backdrop 1 Ghost

    url
    backdrop_1_ghost

    https://images.unsplash.com/photo-1760278357611-0c06ab1ded5b?w=1400&q=75&auto=format&fit=crop

  • Turn Line

    text
    turn_line

    The upstairs window has been bricked up since 1994.

    ~96 characters max · 4 lines

  • Turn Phrase

    text
    turn_phrase

    bricked up

    ~24 characters max · 1 line

  • Backdrop 2

    url
    backdrop_2

    https://images.pexels.com/photos/11570561/pexels-photo-11570561.jpeg?auto=compress&cs=tinysrgb&w=1400

  • Final Line

    text
    final_line

    This morning he waved again.

    ~60 characters max · 2 lines

  • Channel Handle

    text
    channel_handle

    @nightshift.stories

    ~45 characters max · 1 line

Render it from the API

Copy either call below. Both already carry this template's ID and its real variable keys — swap the values for your own.

1. Preview it — free

Same body as a render. Costs no credits, creates no job. Returns a public URL that plays the video in a browser, plus a list of problems with your payload — a mistyped key is otherwise ignored in silence.

curl -X POST https://renderly.video/api/v1/previews \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "templateId": "scary-story-creepypasta",
  "replacements": {
    "part_label": "STORY 047",
    "story_title": "The Neighbour Who\nWaved Back",
    "hook_line": "For eleven years my neighbour\nwaved at me from his window\nevery morning.",
    "story_credit": "STORY BY U/ANON · USED WITH PERMISSION",
    "backdrop_1": "https://images.unsplash.com/photo-1760278357611-0c06ab1ded5b?w=1400&q=75&auto=format&fit=crop",
    "backdrop_1_ghost": "https://images.unsplash.com/photo-1760278357611-0c06ab1ded5b?w=1400&q=75&auto=format&fit=crop"
  }
}'

2. Render it

Change one word in the URL. Keep templateId — it is what links your call to this template, so later improvements reach you automatically.

curl -X POST https://renderly.video/api/v1/renders \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "templateId": "scary-story-creepypasta",
  "replacements": {
    "part_label": "STORY 047",
    "story_title": "The Neighbour Who\nWaved Back",
    "hook_line": "For eleven years my neighbour\nwaved at me from his window\nevery morning.",
    "story_credit": "STORY BY U/ANON · USED WITH PERMISSION",
    "backdrop_1": "https://images.unsplash.com/photo-1760278357611-0c06ab1ded5b?w=1400&q=75&auto=format&fit=crop",
    "backdrop_1_ghost": "https://images.unsplash.com/photo-1760278357611-0c06ab1ded5b?w=1400&q=75&auto=format&fit=crop"
  }
}'

The body above shows 6 of 11 variables. Send any subset — every key you leave out renders its authored default. Read the full contract, with character limits, from GET /api/v1/templates/scary-story-creepypasta/variables. See the previewing guide, the rendering guide, or the OpenAPI spec.

Frequently asked questions

How do I customize the Scary Story / Creepypasta template?

Open the template in the Renderly editor and replace its 11 customizable fields (such as Part Label) with your own text, images, or video. Every change previews instantly before you render.

How much does it cost to render this template?

Rendering is credit-based — 1 credit equals 1 minute of 1080p video. You only pay when you export, and credits never expire on the pay-as-you-go plan.

Can I generate this video at scale via the API?

Yes. POST this template's ID and a replacements object to /api/v1/renders — one call per row of data, 11 fields swappable per video. Send the same body to /api/v1/previews first to check it for free. No-code integrations like Zapier work the same way.

More Social Media templates

Bedtime Story template preview

Bedtime Story

A narrated sleep story for the two-in-the-morning end of the feed — the deliberate inverse of a creepypasta cut, built so the viewer stops watching rather than keeps scrolling. 9:16 vertical, 1080x1920, 80 seconds across six unhurried scenes at 30fps, joined by 60-frame cross-dissolves with not a single hard cut, and closing on a full-frame fade to lights-out indigo with a silent final second. Rhythm comes from two depths of night indigo instead of a light ground, moon cream only ever sets type and never at full opacity, and the only progress signal is a cream dot travelling one sixth of a hairline rail per scene and dimming as it goes, so nobody has to read a counter. Ten dynamic fields swap per render: eight text (channel_name, story_title which appears six times from one string, story_intro, story_part_1, story_part_2, story_part_3, story_last_line, closing_line) and two images (cover_image for the opening band and closing full bleed, ambient_image for the wash behind the three reading frames). The caller splits its story into three passages plus a last line at sentence boundaries, so one template turns out a fresh film every night from one block of narrated text.

Meal Plan & Nutrition Card template preview

Meal Plan & Nutrition Card

A five-scene daily meal-plan card for a nutrition coach or meal-prep service: breakfast, lunch, dinner and the day's totals, each pairing a full photo of the food with a fixed four-column calorie/protein/carbs/fat stat grid so the numbers stay credible without crowding out the plate. 1080×1080 (1:1), 25 seconds at 30fps, alternating deep-green and clean-white grounds with a single carrot accent marking the calorie figure throughout. 32 dynamic fields drive it per render — client_name, plan_date, daily_calories and hero_photo for the cover; service_name, service_tagline, cta_line and service_contact for the brand; and meal_1/2/3_photo, _name, _items, _calories, _protein, _carbs, _fat plus protein_total/carbs_total/fat_total for the three meals and the closing recap — so a coach's planning tool can post one card per client per day from the same shape.

Stylist Availability & Booking template preview

Stylist Availability & Booking

A 31-second 1080x1920 (9:16) availability card for one practitioner rather than one business — a barber, stylist, tattooist or massage therapist posting the slots they still have open this week, with the link that takes the booking. Five scenes run a cream/ink/cream/olive/cream ground rhythm: a full-bleed portrait with the name set like a book title, one 440px olive numeral for the open-slot count, a three-row day table on a strict 440px pitch (the frame people screenshot, held ~10s), a cream booking plate on saturated olive carrying the ask, and a centred sign-off card with the handle, link and a full-bleed olive footer band. Fraunces 700 carries every display line, Geist the body copy, JetBrains Mono the kickers, times, chips and link. 19 fields are swapped per render: stylist_photo (used full-bleed in scene 01 and inside a 440px circle in scene 05), stylist_name, stylist_role, salon_line, week_label, open_count, personal_note, day_1/2/3_name, day_1/2/3_time, day_1/2/3_note, booking_link, booking_note and handle. Every field is per-practitioner except week_label — the one column a manager fills once and copies down — so a salon with eight chairs sends eight rows and gets eight different videos back, each one belonging to the person in it.

Ready to make your Scary Story / Creepypasta video?

Customize it in the editor and render in minutes — no design or editing skills required.