44It works by transcribing your video to a markdown file, which you can edit using
55any text editor, and then render the edited markdown back to a video.
66
7- You can cut out parts of the video, add title cards, text overlays and more
7+ You can cut out parts of the video, add title cards, text overlays, B-roll footage and more
88using simple markdown syntax.
99
1010
@@ -44,71 +44,145 @@ Converts the markdown file back into a video
4444
4545## Editing
4646
47- Here is an example of how a markdown file generated from a video looks like:
47+ Video markdown files are ** auto-generated** by ` ins video convert ` - you should not create them from scratch. The following shows what a generated file looks like and how to edit it.
48+
49+ Here is an example of a generated markdown file:
4850
4951``` markdown
5052---
51- video:
53+ default_source: 'a'
54+ sources:
55+ - id: 'a'
5256 hash: '4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9'
5357 name: 'distro.mkv'
5458 source: '/home/benjamin/Videos/distrotest/distro.mkv'
55- transcript:
56- source: './insvideodata/4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9.srt'
59+ transcript: './insvideodata/4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9.srt'
5760generated_at: '2025-12-21T00:37:04.161349597+00:00'
5861---
59- ` 00:00.0-00:03.4 ` quick brown fox jumps over the lazy dog consectetur adipiscing elit
60- ` 00:03.4-00:13.8 ` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
61- ` 00:14.6-00:19.3 ` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
62- ` 00:24.9-00:26.2 ` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
63- ` 00:26.4-00:27.0 ` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
64- ` 00:27.2-00:28.7 ` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
65- ` 00:28.9-00:30.1 ` mollit anim id est laborum sed ut perspiciatis unde omnis iste natus
62+ ` a@ 00:00.0-00:03.4` quick brown fox jumps over the lazy dog consectetur adipiscing elit
63+ ` a@ 00:03.4-00:13.8` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
64+ ` a@ 00:14.6-00:19.3` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
65+ ` a@ 00:24.9-00:26.2` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
66+ ` a@ 00:26.4-00:27.0` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
67+ ` a@ 00:27.2-00:28.7` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
68+ ` a@ 00:28.9-00:30.1` mollit anim id est laborum sed ut perspiciatis unde omnis iste natus
6669...
6770```
6871
72+ ### Understanding the Frontmatter
73+
74+ The YAML frontmatter declares video sources. When using ` ins video convert ` , this is auto-generated:
75+
76+ ``` yaml
77+ ---
78+ default_source : ' a'
79+ sources :
80+ - id : ' a'
81+ hash : ' ...'
82+ name : ' main.mp4'
83+ source : ' /path/to/main.mp4'
84+ transcript : ' ./insvideodata/....json'
85+ - id : ' b'
86+ hash : ' ...'
87+ name : ' broll.mp4'
88+ source : ' /path/to/broll.mp4'
89+ transcript : ' ./insvideodata/....json'
90+ generated_at : ' 2025-12-21T00:37:04.161349597+00:00'
91+ ---
92+ ```
93+
94+ - ** ` sources ` ** - Array of video sources with unique IDs
95+ - ** ` default_source ` ** - Default source for segments without a prefix
96+ - ** ` hash ` ** - Content hash for caching
97+ - ** ` name ` ** , ** ` source ` ** , ** ` transcript ` ** - File paths
98+
6999### Cuts
70100
71101Each line represents a segment of the video with timestamps and the transcribed text.
72102You can comment out or delete lines to cut those segments from the video. You
73103can also rearrange lines. You can not edit the text itself, edits will be
74104ignored, and you cannot cut within a line.
75105
106+ ### Source Prefixes (Multi-Video Projects)
107+
108+ When using multiple video sources (e.g., via ` ins video append ` ), segments are prefixed with their source ID:
109+
110+ ``` markdown
111+ ---
112+ default_source: 'a'
113+ sources:
114+ - id: 'a'
115+ source: '/path/to/main.mp4'
116+ transcript: './main.json'
117+ - id: 'b'
118+ source: '/path/to/intro.mp4'
119+ transcript: './intro.json'
120+ ---
121+
122+ ` b@00:00.0-00:05.0 ` intro clip from source b
123+ ` a@00:00.0-00:10.0 ` main content from source a
124+ ```
125+
126+ ### HTML Comments
127+
128+ You can use HTML comments to temporarily disable segments without deleting them:
129+
130+ ``` markdown
131+ ` 00:00.0-00:10.0 ` this segment will be included
132+
133+ <!--
134+ `00:10.0-00:20.0` this segment is commented out and will be skipped
135+ -->
136+
137+ ` 00:20.0-00:30.0 ` this segment will be included
138+ ```
139+
140+ Multi-line comments work too - everything between ` <!-- ` and ` --> ` is ignored.
141+
142+ ### Silence Segments
143+
144+ Gaps longer than 1 second are automatically marked as SILENCE:
145+
146+ ``` markdown
147+ ` a@00:00.0-00:05.0 ` dialogue here
148+ ` a@00:05.0-00:10.0 ` SILENCE
149+ ` a@00:10.0-00:15.0 ` more dialogue
150+ ```
151+
76152### Slides
77153
78154You can put arbitrary markdown between the transcript lines to create slides.
79155This can contain text, images, code blocks, latex and more.
80156
81157``` markdown
82158---
83- video:
84- hash: '4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9'
85- name: 'distro.mkv'
86- source: '/home/benjamin/Videos/distrotest/distro.mkv'
87- transcript:
88- source: './insvideodata/4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9.srt'
89- generated_at: '2025-12-21T00:37:04.161349597+00:00'
159+ default_source: 'a'
160+ sources:
161+ - id: 'a'
162+ source: '/path/to/video.mp4'
163+ transcript: './video.json'
90164---
91- ` 00:00.0-00:03.4 ` quick brown fox jumps over the lazy dog consectetur adipiscing elit
92- ` 00:03.4-00:13.8 ` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
165+ ` a@ 00:00.0-00:03.4` quick brown fox jumps over the lazy dog consectetur adipiscing elit
166+ ` a@ 00:03.4-00:13.8` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
93167
94168Hi, this is the first slide
95169
96- ` 00:14.6-00:19.3 ` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
97- ` 00:24.9-00:26.2 ` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
98- ` 00:26.4-00:27.0 ` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
99- ` 00:27.2-00:28.7 ` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
170+ ` a@ 00:14.6-00:19.3` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
171+ ` a@ 00:24.9-00:26.2` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
172+ ` a@ 00:26.4-00:27.0` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
173+ ` a@ 00:27.2-00:28.7` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
100174
101175Hi, this is the second slide
102176
103- ` 00:28.9-00:30.1 ` mollit anim id est laborum sed ut perspiciatis unde omnis iste natus
104- ` 00:30.6-00:33.2 ` error sit voluptatem accusantium doloremque laudantium totam rem aperiam
105- ` 00:33.6-00:35.0 ` eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae
177+ ` a@ 00:28.9-00:30.1` mollit anim id est laborum sed ut perspiciatis unde omnis iste natus
178+ ` a@ 00:30.6-00:33.2` error sit voluptatem accusantium doloremque laudantium totam rem aperiam
179+ ` a@ 00:33.6-00:35.0` eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae
106180
107181---
108182
109- ` 00:35.3-00:37.4 ` dicta sunt explicabo nemo enim ipsam voluptatem quia voluptas sit aspernatur
110- ` 00:38.0-00:39.9 ` aut odit aut fugit sed quia consequuntur magni dolores eos qui ratione
111- ` 00:40.3-00:47.0 ` voluptatem sequi nesciunt neque porro quisquam est qui dolorem ipsum quia dolor sit amet
183+ ` a@ 00:35.3-00:37.4` dicta sunt explicabo nemo enim ipsam voluptatem quia voluptas sit aspernatur
184+ ` a@ 00:38.0-00:39.9` aut odit aut fugit sed quia consequuntur magni dolores eos qui ratione
185+ ` a@ 00:40.3-00:47.0` voluptatem sequi nesciunt neque porro quisquam est qui dolorem ipsum quia dolor sit amet
112186```
113187
114188Slides will start being shown during the segment immediately before their
@@ -118,69 +192,100 @@ content. They will stay on screen until the next slide or until a separator line
118192You can also pause the video entirely by placing slides between two separator lines.
119193Multiple slides can be shown while the video is paused by placing separator
120194lines between them. The amount of time a slide is shown is calculated based on
121- the number of words it contains.
195+ the number of words it contains (180 WPM reading speed, min 5s, max 20s).
122196
123197``` markdown
124198---
125- video:
126- hash: '4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9'
127- name: 'distro.mkv'
128- source: '/home/benjamin/Videos/distrotest/distro.mkv'
129- transcript:
130- source: './insvideodata/4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9.srt'
131- generated_at: '2025-12-21T00:37:04.161349597+00:00'
199+ default_source: 'a'
200+ sources:
201+ - id: 'a'
202+ source: '/path/to/video.mp4'
203+ transcript: './video.json'
132204---
133205
134- ` 00:00.0-00:03.4 ` quick brown fox jumps over the lazy dog consectetur adipiscing elit
135- ` 00:03.4-00:13.8 ` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
206+ ` a@ 00:00.0-00:03.4` quick brown fox jumps over the lazy dog consectetur adipiscing elit
207+ ` a@ 00:03.4-00:13.8` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
136208
137209---
138210
139- Hi, this is the first slide, source the video is paused
211+ Hi, this is the first slide, the video is paused
140212
141213---
142214
143215Hi, this is the second slide, after this the video will continue
144216
145217---
146- ` 00:14.6-00:19.3 ` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
147- ` 00:24.9-00:26.2 ` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
148- ` 00:26.4-00:27.0 ` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
149- ` 00:27.2-00:28.7 ` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
218+ ` a@ 00:14.6-00:19.3` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
219+ ` a@ 00:24.9-00:26.2` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
220+ ` a@ 00:26.4-00:27.0` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
221+ ` a@ 00:27.2-00:28.7` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
150222```
151223
152224
153225Slides will be styled differently depending on their content. If they just
154226contain a single header (h1, h2 ...) they will act as title cards. If they
155- contain lots of content, they wil not be center aligned and the layout is
227+ contain lots of content, they will not be center aligned and the layout is
156228adjusted to make the larger amount of content more readable.
157229
230+ ### B-Roll Footage
231+
232+ Use blockquotes with timestamps to insert B-roll footage:
233+
234+ ``` markdown
235+ ` a@00:00.0-00:10.0 ` talking about something
236+
237+ > ` b@00:05.0-00:08.0 ` B-roll clip from source b
238+
239+ ` a@00:10.0-00:20.0 ` continue talking
240+ ```
241+
242+ Multiple B-roll clips can be chained:
243+
244+ ``` markdown
245+ > ` b@00:00.0-00:05.0 ` first B-roll
246+ > ` c@00:02.0-00:07.0 ` second B-roll
247+ ```
248+
249+ ** B-roll persists across segments** until stopped with a separator:
250+
251+ ``` markdown
252+ ` a@00:00.0-00:10.0 ` has B-roll
253+
254+ > ` b@00:00.0-00:05.0 ` B-roll footage
255+
256+ ` a@00:10.0-00:20.0 ` also has B-roll
257+ ` a@00:20.0-00:30.0 ` also has B-roll
258+
259+ ---
260+
261+ ` a@00:30.0-00:40.0 ` no B-roll (after separator)
262+ ```
263+
158264### Background music
159265
266+ Add music with a ` music ` code block. The music plays from that point until the next music block or the end of the video:
160267
161268```` markdown
162269---
163- video:
164- hash: '4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9'
165- name: 'distro.mkv'
166- source: '/home/benjamin/Videos/distrotest/distro.mkv'
167- transcript:
168- source: './insvideodata/4b59412a676f5994b916dd983e3315cb8ebfed8f99cf1b609310d6dda39db3d9.srt'
169- generated_at: '2025-12-21T00:37:04.161349597+00:00'
270+ default_source: 'a'
271+ sources:
272+ - id: 'a'
273+ source: '/path/to/video.mp4'
274+ transcript: './video.json'
170275---
171276
172- ` 00:00.0-00:03.4 ` quick brown fox jumps over the lazy dog consectetur adipiscing elit
173- ` 00:03.4-00:13.8 ` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
277+ ` a@ 00:00.0-00:03.4` quick brown fox jumps over the lazy dog consectetur adipiscing elit
278+ ` a@ 00:03.4-00:13.8` elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
174279
175280``` music
176281https://www.youtube.com/watch?v=example
177282```
178283
179- ` 00:14.6-00:19.3 ` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
180- ` 00:24.9-00:26.2 ` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
181- ` 00:26.4-00:27.0 ` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
182- ` 00:27.2-00:28.7 ` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
183- ````
284+ ` a@ 00:14.6-00:19.3` ut enim ad minim veniam quis nostrud exercitation ullamco laboris
285+ ` a@ 00:24.9-00:26.2` nisi ut aliquip ex ea commodo consequat duis aute irure dolor
286+ ` a@ 00:26.4-00:27.0` in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
287+ ` a@ 00:27.2-00:28.7` excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt
288+ ```
184289
185290
186291You can put a file or music url in a code block with the language set to ` music `
@@ -222,6 +327,24 @@ ins video convert input.mp4 --transcript subtitles.srt
222327ins video convert input.mp4 --force
223328```
224329
330+ ### ` ins video append <markdown> <video> [options] `
331+
332+ Append another recording to an existing video markdown file. This is useful for combining multiple recordings into one project.
333+
334+ ``` bash
335+ # Append a new video to existing markdown
336+ ins video append existing.video.md new_recording.mp4
337+
338+ # With transcript
339+ ins video append existing.video.md new_recording.mp4 --transcript recording.json
340+
341+ # Skip preprocessing
342+ ins video append existing.video.md new.mp4 --no-preprocess
343+
344+ # Use auphonic for the appended video
345+ ins video append existing.video.md new.mp4 --preprocessor auphonic
346+ ```
347+
225348### ` ins video transcribe <video> [options] `
226349
227350Generate a transcript using WhisperX (without creating markdown).
@@ -266,8 +389,8 @@ ins video render input.video.md --dry-run
266389# Render in vertical format (9:16 for Reels/TikTok)
267390ins video render input.video.md --reels
268391
269- # Burn subtitles into video (reels mode only )
270- ins video render input.video.md --reels -- subtitles
392+ # Burn subtitles into video (works in both normal and reels mode)
393+ ins video render input.video.md --subtitles
271394```
272395
273396### ` ins video slide <markdown> [options] `
@@ -312,6 +435,17 @@ ins video preprocess input.mp4 --backend none
312435
313436Download and configure video tools (WhisperX, local preprocessor, Auphonic). Use ` --force ` to reconfigure.
314437
438+ ### ` ins video menu `
439+
440+ Launch an interactive menu for guided video editing workflows. This provides a user-friendly interface for:
441+
442+ - Creating new projects
443+ - Transcribing videos
444+ - Managing existing projects
445+ - Generating slides
446+ - Preprocessing audio
447+ - Setting up video tools
448+
315449## Limitations
316450
317451You can not edit the content of the words being said. The only AI being used is
@@ -322,7 +456,7 @@ never said.
322456I sincerely believe there is no value in AI image, video and audio generation
323457outside of moodboards, so this will not be supported anytime soon.
324458
325- As of now, only editing a single video file is supported.
459+ Multiple video sources are supported, but each source video is treated independently.
326460
327461## Current notes
328462
0 commit comments