How-to

Automated Course Video: One Lesson Video Per Row

Render a consistent lesson video for every row of a course outline, in 16:9 for the course player and 9:16 for promotion, from the same eight fields.

Automated Course Video: One Lesson Video Per Row

An automated course video is one lesson video rendered per row of your course outline. Write each lesson as eight fields, POST one request per lesson, and get back a 43-second 16:9 video for the course player. The same eight fields render a 26-second vertical cut for promotion. A 40-lesson course becomes one script, not 40 edits.

The finished video

This guide renders Teach One Thing Well - a 43-second 1920x1080 lesson in seven scenes: a title card, three numbered step scenes, a recap that stacks all three steps, a takeaway line and an outro with the instructor and the logo.

The lesson rendered from the sample values in step 4.

Its vertical sibling, Lesson Explainer - Shorts Cut, is 1080x1920 and 26 seconds long, and takes the same eight fields.

What you need

  • A Renderly API key. Create one in the dashboard under Settings → API keys.
  • A course outline with one row per lesson. A CSV, a sheet or a database is enough.
  • The course logo at a URL that serves the file directly.

Step 1 - Decide whether the course is already written

Search this query and the results are AI course generators. They take a prompt or a document, write the script, and put an avatar presenter on it. That is a different product, and for a course that does not exist yet it is the right one.

A template earns its place when the outline already exists. Every lesson gets the same palette, type, timing and progress bar, so lesson 3 and lesson 38 look like one course. The cost per lesson is fixed by its length. When you fix a typo, you render one lesson again and it matches the others exactly.

Step 2 - Turn the course outline into eight fields per lesson

FieldScenesSet
topic_title1Per lesson
subtitle1Per lesson
point_1, point_2, point_32, 3, 4 and the recapPer lesson
takeaway6Per lesson
instructor_name7Once per course
brand_logo7Once per course

The format is fixed at three points. A lesson with five steps is two lessons, or one lesson with the five steps merged into three. Send every field: an omitted one keeps the sample value, so a missing takeaway shows the template's line about passwords in your course.

Step 3 - Check the points against the recap line

Each point appears twice in the 16:9 cut. The step scene shows it at 78px over up to three lines, and the variables endpoint reports maxCharacters: 101 for point_1 from that scene. The recap scene repeats all three points at 48px on one line each. The same estimator gives that line room for about 72 characters, so 72 is the limit to write to. The vertical cut has no recap and allows about 116.

A point that is too long does not fail. The tail is hidden and the render still succeeds. Preview each lesson before you render the course. Previews take the same body, cost nothing and return a previewUrl and a warnings array:

curl -X POST https://renderly.video/api/v1/previews \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "templateId": "teach-one-thing-well", "replacements": { "point_1": "Open Settings, choose Security, and paste the metadata URL from your identity provider." } }'

The warning check runs on every overlay, so a recap line that will clip returns TEXT_MAY_CLIP even when the step scene fits. It is an estimate from average character width, so open the previewUrl for every lesson it flags.

Step 4 - Render the lesson and its vertical cut

curl -X POST https://renderly.video/api/v1/renders \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "teach-one-thing-well",
    "replacements": {
      "topic_title": "Set up Single Sign-On",
      "subtitle": "Connect your identity provider in three steps.",
      "point_1": "Add your IdP metadata URL in Settings → Security.",
      "point_2": "Map email and role attributes to your team fields.",
      "point_3": "Send a test login, then flip SSO to required.",
      "takeaway": "One config, zero password resets - ever again.",
      "instructor_name": "Maya Chen, Solutions Engineer",
      "brand_logo": "https://renderly.video/logo.svg"
    }
  }'

The response returns a jobId and creditsUsed: 1 immediately. For the vertical cut, send the same body with "templateId": "lesson-explainer-shorts-cut".

Loop over the outline with the pattern in the CSV guide. Requests are limited per minute by plan: 120 on Creator and 300 on Business. There are no idempotency keys, so a retry after a timeout can render and charge for the same lesson twice. Check the job list before you retry.

Step 5 - Attach each MP4 to its lesson

The render request has no label field, so keep your own map from lesson to jobId as each POST returns. Register one webhook with POST /api/v1/webhooks for render.completed, look the lesson up by jobId, and publish the outputUrl to your course platform. The webhooks guide covers verifying the signature.

What this costs at scale

Renderly bills 1 credit per minute of 1080p output, rounded up to the nearest half credit. The 43-second lesson rounds up to 1 credit. The 26-second vertical cut rounds up to half a credit. Both sizes have the pixel count of 1080p, so both bill at the base rate.

Lessons16:9 onlyBoth cutsPlanCost
100100 credits150 creditsCreator, $29/moincluded
1,0001,000 credits1,500 creditsBusiness, $99/moincluded, or $159 with both cuts

The $159 is the Business plan plus 500 extra credits at $0.12. A course is rendered once and changed a lesson at a time, so after the first month the cost is the lessons you edit.

Where to go next

The template page has the preview and the full field list. The case for a fixed template over a generator that changes the look every run is in template-based video vs AI-generated video. If the outline lives in Notion, the Notion guide unwraps its properties into these same eight fields.

Frequently asked

Does this write the lesson script for me?
No. The template renders text you supply: a topic, a subtitle, three points and a takeaway. Renderly does not write the lesson or add a presenter. If you have no outline yet, write it first, by hand or with a language model, then send the finished copy as replacements.
Can one row render both the 16:9 lesson and the vertical cut?
Yes. Teach One Thing Well and Lesson Explainer - Shorts Cut share the same eight field names, so one replacements object renders both when you change templateId. The 43-second 16:9 lesson costs 1 credit and the 26-second 9:16 cut costs half a credit, so the pair is 1.5 credits per lesson.
What happens when a point is too long?
The render succeeds and the tail of the text is hidden. There is no error. In the 16:9 cut the binding limit is the recap scene, which shows each point on one line with room for about 72 characters. The free preview endpoint returns a TEXT_MAY_CLIP warning for any line likely to clip.
How do I fix a typo after the course is published?
Correct the row and render that lesson again. The palette, the timing and the motion are part of the template, so the new video matches the other lessons exactly. Only the corrected lesson costs credits. Replace the old outputUrl in your course platform with the new one.
Can I add a voiceover to each lesson?
Not through these two templates as they stand. Their dynamic fields are seven text fields and one logo, and the background music is part of the design. To narrate each lesson, clone the template into a project, add a sound overlay marked dynamic, and send its value in replacements.