Welcome!
-
-
- Learn Home
- Core Concepts
- Companies and Departments
- Courses
- Course Status and Visibility
- Sections
- Video Activities
- Reading Activities
- Document Activities
- Enrolling People in a Course
- Bulk Enroll With CSV
- Roles in a Course
- How Progress Is Tracked
- Course Reports
- Knowledge Base Overview
- Libraries and Folders
- Uploading Content Items
- Library Visibility
- AI Agent per Library
- My Courses
- Platform People
-
- Project Structure Template
- Table of Contents (TOC)
- Content Folder
- Introduction to Markdown
- Markdown Basics
- Markdown Lists
- Markdown Links
- Markdown Images
- Markdown Code
- Markdown Tables
- Markdown Equations
- Markdown Videos
- Markdown Embedded HTML
- VS Code Snippets
- Introduction to Styles
- Framed Narrations
- Markdown Configuration
- Editor Setup
-
Table of Contents (TOC)
The table of contents is defined in the toc.yml file, which can be divided into two parts:
- The essential and/or optional details needed to generate each video.
- The basic course structure.
As an example:
# Essential and/or optional details
name: Hello world
version: v1
email: help@lupo.ai, dev@lupo.ai
speaker: Jenny
speed: 1.1
pitch: 1.2
style: default
slides: false
resolution: 720
# Basic course structure
chapters:
- name: Chapter One
sections:
- name: Test
href: hello_world.md
generate: true
- name: Chapter Two
sections:
- name: Test_2
href: hello_world_2.md
generate: false
Essential and/or optional details
As essential and/or optional details needed to generate each video, we have:
| Field Name | Required | Description | Example |
name |
Yes | The name of the course | name: Course Creator Demo |
version |
No Sets default: v1 |
Used only by AI narration: when Lupo has to write the narration for a slide that has none, this value is sent as the narration API version. It has no effect on a normal Markdown build, so leave it at v1. |
version: v1 |
email |
No Sets default: the address on file for the GitHub account that started the build |
A comma-separated list of email addresses that receive the build notification with links to the generated videos | email: email_1@example.com, email_2@example.com, ... |
speaker |
No Sets default: Aria |
The narrator who reads the narration of every generated video. Use the voice's first name only — Aria, Jenny, Abbi. The Choose a voice list in the web app shows it with its country and language, as in "Abbi-GB (English)"; write only the part before the dash. A name Lupo doesn't recognise falls back to Aria without an error. |
speaker: Abbi Narrators explains the voice types; Emotions lists the style names. |
speed |
No Sets default: 1 |
How fast the narrator speaks; the length of the video follows the narration. Accepts a value from 0.5 to 2, with 1 being the normal rate. A value outside that range is passed through with a warning, not corrected. | speed: 1.5 makes the narration 1.5 times faster than normal. |
pitch |
No Sets default: 1 |
The pitch of the narrator's voice. Accepts a value from 0.5 to 1.5, with 1 being the normal pitch. A value outside that range is passed through with a warning, not corrected. | pitch: 1.2 raises the pitch of the voice by 20%. |
style |
No Sets default: default |
The speaking style (emotion) of the narrator, applied to every generated video. Only Standard voices that support styles honour it; with any other voice, Premium voices included, Lupo falls back to the default style. | style: excited Emotions lists the style names. |
slides |
No Sets default: False |
A boolean value indicating whether to also produce a PowerPoint presentation, a PDF document and an HTML document for each video | slides: True |
transcript |
No Sets default: False |
A boolean value indicating whether to also produce a transcript: one text file per chapter, holding the chapter name followed by the narration of each of its sections | transcript: True |
resolution |
No Sets default: 720 |
The resolution of the produced video: 720 (1280x720) or 1080 (1920x1080). Any other value falls back to 720. |
resolution: 720 |
Basic course structure
# Essential and/or optional details previously selected
chapters:
- name: [Chapter 1 Name]
sections:
- name: [Section Name]
href: [Path/to/file.md]
generate: [true|false] # Optional, section level
speaker: Aria # Optional section override, defaults: chapter or course value
speed: 1.2 # Optional section override, defaults: chapter or course value
pitch: 1.3 # Optional section override, defaults: chapter or course value
emotion: friendly # Optional section override, defaults: chapter or course value
- name: [Chapter 2 Name]
generate: [true|false] # Optional, chapter level
combine: [true|false] # Optional, chapter level
sections:
- name: [Section 1 Name]
href: [Path/to/file.md]
- name: [Section 2 Name]
href: [Path/to/file.md]
You should consider proper indentation in the YAML file is of utmost importance. It is not just about maintaining a neat and organized appearance: toc.yml is read as YAML, and a file whose sections: sits deeper than its chapter's name: is rejected before anything renders. Indent two spaces per level, as in every example on this page.
chapters:: This is the main container for all the chapters or episodes of the video series. Each chapter is listed as a sub-item under this section.name: [Chapter name]: Within the chapters section, you define the name of each chapter or episode. This name should give a clear idea of the content covered in that particular video.sections:: For each chapter, you can create multiple sections, each representing a specific segment or topic within the video.name: [Section name]: Under each chapter, you define the name of the section. This name helps viewers understand the specific focus of that particular segment.href: [Path/to/file.md]: The path, relative totoc.yml, of the Markdown file for the section: its slides and their narration. A PowerPoint file or a Google Slides link works here too.
And optional indications:
generate: [true|false]: Specifies whether the section or chapter should be included in the generated output. If not specified, defaults to true.speaker, speed, pitch, emotion: Optional overrides of the voice settings for one chapter or one section. If not provided at the section level, the chapter value is used, and if there is none, the course value. Note the key name: at chapter and section level the style is set withemotion, while the course-level key isstyle. Astyle:on a chapter or section is ignored.combine: [true|false]: A chapter-level flag. If set to true, the chapter's sections are joined into a single video with a single caption file. On a section it is accepted but has no effect.