You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Pi-first post-production workflow for podcasts and video podcasts. Run `./podguy` to open pi in a focused editing mode for this repo.
3
+
Pi-first post-production tooling for podcast and video-podcast editors who want transcripts, chapters, clip candidates, cuts, and social review exports from local media.
- Launch `./podguy` and work through a repo-local pi skill.
8
-
- Generate transcripts and subtitle files from local audio or video media.
9
-
- Prepare long transcript artifacts for reliable editorial review.
10
-
- Find likely interstitial and inserted-content timecodes from episode videos.
11
-
- Ask the agent for chapters, clip candidates, cut suggestions, show notes, quotes, and proper noun cleanup.
12
-
- Cut selected clip candidates into review exports for TikTok, Reels, YouTube Shorts, trailers, or social posts.
13
-
- Optionally download an open-license Cordkillers video-podcast excerpt for local evaluation.
14
-
- Configure show-specific context with `podguy.toml` without changing the workflow.
7
+
## What it does
8
+
9
+
- Launches `pi` with podcast-specific skills, prompts, and a startup widget.
10
+
- Transcribes local audio/video files with Whisper-compatible backends.
11
+
- Prepares long transcripts into timecoded chunks for editorial review.
12
+
- Scans video episodes for likely interstitials and non-host inserts.
13
+
- Generates chapters, clip candidates, cut reports, show notes, quotes, and proper noun checks.
14
+
- Cuts selected highlight ranges into review exports for TikTok, Reels, YouTube Shorts, trailers, or social posts.
15
+
16
+
Generated transcripts, scans, thumbnails, notes, and clip exports go under gitignored `dist/` by default.
15
17
16
18
## Install
17
19
18
-
This project is designed to be operated through `pi`, with `./podguy` as the main entrypoint.
20
+
Clone the repo and install the local Node tooling:
19
21
20
-
Install the required tools:
22
+
```bash
23
+
git clone https://github.com/modem-dev/podguy.git
24
+
cd podguy
25
+
npm install
26
+
```
27
+
28
+
Install the required system tools:
21
29
22
30
```bash
23
-
npm install -g @mariozechner/pi-coding-agent
24
-
brew install uv
25
-
# optional for local transcription backends, video scanning, and clip cutting
26
-
brew install ffmpeg
31
+
brew install uv ffmpeg
27
32
```
28
33
29
-
You can install pi globally or as a repo-local dev dependency. The `./podguy` launcher uses `node_modules/.bin/pi` when present and falls back to a global `pi` install.
34
+
Notes:
35
+
36
+
-`ffmpeg` is used for fixtures, transcription backends, and clip cutting.
37
+
-`uv` runs the Python scripts and optional transcription dependency groups.
38
+
- The video scanner is macOS-only and uses Swift / AVFoundation / Vision.
30
39
31
40
Before first use, authenticate pi with `/login` or your usual provider API key setup.
32
41
33
-
Set up one transcript backend if you want real transcription:
42
+
Set up a real transcription backend when you are ready to transcribe episodes:
-`scripts/scan_podcast.swift` is macOS-only and requires `swift`.
44
-
-`scripts/transcribe_video.py` and `scripts/cut_clips.py` require Python 3.9+ and `uv`.
45
-
- The `mock` backend exists for tests and setup validation, not real transcription.
46
-
47
-
## Configure a show
50
+
## Quick start
48
51
49
-
Copy the example profile and customize it for your podcast:
52
+
Create an optional show profile:
50
53
51
54
```bash
52
55
cp podguy.example.toml podguy.toml
53
56
```
54
57
55
-
The profile can define the show name, hosts, tone, audience, chapter style, and default output preferences. Podguy also accepts `podcast.toml` as a compatible profile name.
56
-
57
-
You can use podguy without a profile; the agent will only ask for show-specific context when it matters.
58
-
59
-
## Quick start
60
-
61
-
Start the dedicated launcher from the repo root:
58
+
Start podguy from the repo root:
62
59
63
60
```bash
64
-
cd podguy
65
61
./podguy
66
62
```
67
63
68
-
The launcher starts pi with only the podguy repo skills and startup widget loaded, adds a podguy-specific system hint, and stores sessions under `.pi/sessions`.
69
-
70
-
If you want the raw pi command instead, `./podguy` is a thin wrapper around pi for this repo.
71
-
72
-
You should see a short help widget above the editor with example actions.
73
-
74
-
Then ask pi to work the episode. For example:
64
+
Then ask pi for a concrete episode task:
75
65
76
66
```text
77
67
Analyze "episode-006-draft.mp4" as ep006.
78
68
79
69
Generate chapters for ep006 in timestamp-title format.
80
70
81
-
Review this episode and suggest cuts, highlight moments, and weak sections.
82
-
```
83
-
84
-
## Episode workflow
85
-
86
-
The intended flow is:
87
-
88
-
1. Start with a new episode recording, draft export, or preview export. Audio and video files are both supported for transcription.
89
-
2. For video episodes, generate timecodes for likely interstitials and inserted content so they are easy to review.
90
-
3. Generate a transcript for the current cut of the episode.
91
-
4. Prepare transcript chunks and an index for pi-driven editorial work.
92
-
5. Use the transcript to propose chapters in this format:
93
-
94
-
```text
95
-
00:00 Intro
96
-
05:34 Section title
71
+
Find likely TikTok/Shorts clips for ep006 and cut vertical review exports.
97
72
```
98
73
99
-
6. Use the transcript to suggest:
100
-
- cuts for time
101
-
- strong and weak sections
102
-
- highlight-worthy clips
103
-
- exported social/review cuts from selected clip candidates
104
-
- show notes and references
105
-
- quote candidates
106
-
- proper noun or spelling issues
107
-
- places where interstitials or inserts would help, when video is available
108
-
109
-
## Quick pass vs full review
110
-
111
-
When an ask is broad, podguy should clarify between:
112
-
113
-
-**quick pass** = optional video scan + transcript + prepared transcript artifacts + short summary
If you ask for one specific deliverable, podguy should do that directly.
117
-
118
-
## Output location
119
-
120
-
Podguy writes generated episode artifacts under `dist/analysis/` by default. The entire `dist/` directory is gitignored so transcripts, scans, thumbnails, notes, and local media-derived files stay out of version control.
121
-
122
-
## Repo skills
74
+
For broad requests, podguy should clarify between:
123
75
124
-
The repo-local skills are the main interface for this project:
76
+
-**quick pass**: optional video scan + transcript + prepared transcript artifacts + short summary
The launcher and skills explain the user workflow and tell pi how to run the software stack.
137
-
138
-
## Manual tool reference
139
-
140
-
You normally use this repo through pi, but the underlying commands are:
79
+
## Common workflows
141
80
142
81
### Scan a video
143
82
144
-
```bash
145
-
swift scripts/scan_podcast.swift <input-video><output-dir> [sample-interval-seconds]
146
-
```
147
-
148
-
Example:
149
-
150
83
```bash
151
84
swift scripts/scan_podcast.swift "episode-006-draft.mp4" dist/analysis/ep006/scan 0.5
152
85
open dist/analysis/ep006/scan/report.html
153
86
```
154
87
88
+
Key outputs:
89
+
90
+
-`interstitial_candidates.csv`
91
+
-`non_host_candidates.csv`
92
+
-`report.html`
93
+
-`thumbs/`
94
+
95
+
Scanner results are heuristic review aids, not exact edit points.
96
+
155
97
### Transcribe media
156
98
157
99
```bash
158
100
uv run python scripts/transcribe_video.py --list-backends
159
-
uv run python scripts/transcribe_video.py <input-media><output-dir> [options]
160
-
```
161
-
162
-
Example:
163
101
164
-
```bash
165
102
uv run --group transcribe-mlx python scripts/transcribe_video.py \
166
103
"episode-006-draft.mp4" \
167
104
dist/analysis/ep006/transcript \
168
105
--backend mlx-whisper
169
106
```
170
107
108
+
Key outputs:
109
+
110
+
-`segments.json`
111
+
-`transcript.txt`
112
+
-`transcript.srt`
113
+
-`transcript.vtt`
114
+
-`summary.txt`
115
+
116
+
Use `--backend mock` only for tests and setup validation.
117
+
171
118
### Prepare transcript artifacts
172
119
173
120
```bash
@@ -178,9 +125,16 @@ uv run python scripts/prepare_transcript_analysis.py \
178
125
--plain-output-names
179
126
```
180
127
181
-
### Cut selected clip candidates
128
+
Key outputs:
182
129
183
-
After generating `dist/analysis/ep006/clips.md`, cut original-aspect review exports:
130
+
-`dist/analysis/ep006/transcript_chunks.md`
131
+
-`dist/analysis/ep006/transcript_index.json`
132
+
133
+
These are the main inputs for chaptering and editorial analysis.
134
+
135
+
### Cut selected clips
136
+
137
+
After pi writes `dist/analysis/ep006/clips.md`, cut original-aspect review exports:
184
138
185
139
```bash
186
140
uv run python scripts/cut_clips.py \
@@ -201,11 +155,11 @@ uv run python scripts/cut_clips.py \
201
155
--pad-end 1
202
156
```
203
157
204
-
The cutter writes generated media plus `manifest.json`. Vertical/square modes use center-crop framing, so treat them as review exports unless the framing has been checked.
158
+
The cutter writes generated media plus `manifest.json`. Vertical and square modes use center-crop framing, so treat them as review exports unless the framing has been checked.
205
159
206
-
### Download open-license sample media
160
+
### Download real sample media
207
161
208
-
For a real video-podcast sample, download a local excerpt from Cordkillers 572:
162
+
Use the Cordkillers open-license video-podcast excerpt for local evaluation:
209
163
210
164
```bash
211
165
scripts/download_sample_media.sh
@@ -217,31 +171,38 @@ This writes to:
217
171
dist/test-fixtures/open-license/cordkillers-572/
218
172
```
219
173
220
-
The script cuts a 3m50s excerpt starting at `00:08:00` from the CC BY-SA 4.0 source video. That range was chosen because it includes multiple podcast layouts, lower thirds, chat/sidebar graphics, a Patreon bumper, and an outro/interstitial card. The script also writes `ATTRIBUTION.md` and keeps all generated media under gitignored `dist/`.
221
-
222
-
## Docs
223
-
224
-
- Launcher: [podguy](podguy)
225
-
- Main skill: [src/podguy-post-production/SKILL.md](src/podguy-post-production/SKILL.md)
The default sample is a 3m50s excerpt from `00:08:00` of Cordkillers 572, licensed CC BY-SA 4.0. The range includes multiple podcast layouts, lower thirds, chat/sidebar graphics, a Patreon bumper, and an outro/interstitial card. The script writes `ATTRIBUTION.md` next to the generated media.
239
175
240
-
## Contributing
176
+
## Configuration
177
+
178
+
`podguy.toml` lets you define show-specific context without changing the workflow:
179
+
180
+
```toml
181
+
show_name = "Example Podcast"
182
+
show_slug = "example"
183
+
hosts = ["Host One", "Host Two"]
184
+
tone = "curious, direct, practical"
185
+
audience = "builders and technical operators"
186
+
chapter_style = "concise descriptive titles"
187
+
preferred_review = "quick pass"
188
+
```
189
+
190
+
`podcast.toml` is also accepted as a compatible profile name.
241
191
242
-
Small, focused PRs are welcome.
192
+
## Project layout
243
193
244
-
Before opening a PR:
194
+
-[`podguy`](podguy): launcher for pi with repo-local skills, prompts, and startup extension.
195
+
-[`src/podguy-post-production/SKILL.md`](src/podguy-post-production/SKILL.md): main editorial workflow skill.
196
+
-[`src/podguy-clip-cutter/SKILL.md`](src/podguy-clip-cutter/SKILL.md): social clip export workflow skill.
197
+
-[`src/podguy-startup.ts`](src/podguy-startup.ts): pi startup widget.
-[`scripts/`](scripts): deterministic scanner, transcript, prep, fixture, sample, and clip-cutting tools.
200
+
-[`tests/`](tests): smoke tests wrapped by Vitest.
201
+
-[`AGENTS.md`](AGENTS.md): repo guidance for coding agents.
202
+
203
+
## Development
204
+
205
+
Run the full validation surface:
245
206
246
207
```bash
247
208
npm run format:check
@@ -250,17 +211,29 @@ npm run typecheck
250
211
npm test
251
212
```
252
213
253
-
You can also run the shell smoke tests directly:
214
+
Run the shell smoke tests directly:
254
215
255
216
```bash
256
217
bash scripts/test.sh
257
218
```
258
219
259
-
For larger workflow or heuristic changes, open an issue first with the media type, expected vs actual output, and your OS/backend/model details.
220
+
CI runs the same checks on macOS because the scanner depends on macOS media APIs.
221
+
222
+
## Contributing
223
+
224
+
Small, focused PRs are welcome. Before opening a PR, run the validation commands above.
225
+
226
+
For workflow or heuristic changes, include:
227
+
228
+
- media type and OS/backend details
229
+
- expected vs actual output
230
+
- relevant transcript, scan, or manifest paths when available
231
+
232
+
See [`CHANGELOG.md`](CHANGELOG.md) for user-visible changes and [`AGENTS.md`](AGENTS.md) for repo maintenance guidance.
260
233
261
234
## Security
262
235
263
-
This repo does not have a published security policy yet. If you find a sensitive issue, do not open a public issue.
236
+
This repo does not have a published security policy yet. If you find a sensitive issue, do not open a public issue. Contact the maintainers privately first.
264
237
265
238
## Sponsor
266
239
@@ -276,8 +249,8 @@ Sponsored by [Modem](https://modem.dev?utm_source=github&utm_medium=oss&utm_camp
276
249
277
250
## License
278
251
279
-
MIT. See [LICENSE](LICENSE).
252
+
MIT. See [`LICENSE`](LICENSE).
280
253
281
254
## Support
282
255
283
-
Use GitHub issues for bugs, questions, and workflow discussion once this repo has a public issue tracker.
256
+
Use [GitHub issues](https://github.com/modem-dev/podguy/issues) for bugs, questions, and workflow discussion.
0 commit comments