Skip to content

Commit 791d843

Browse files
committed
docs: rewrite README for OSS onboarding
1 parent 1c36004 commit 791d843

1 file changed

Lines changed: 114 additions & 141 deletions

File tree

README.md

Lines changed: 114 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,120 @@
11
# podguy
22

3-
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.
44

5-
## Why podguy
5+
[![CI](https://github.com/modem-dev/podguy/actions/workflows/ci.yml/badge.svg)](https://github.com/modem-dev/podguy/actions/workflows/ci.yml)
66

7-
- 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.
1517

1618
## Install
1719

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:
1921

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:
2129

2230
```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
2732
```
2833

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.
3039

3140
Before first use, authenticate pi with `/login` or your usual provider API key setup.
3241

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:
3443

3544
```bash
3645
uv sync --group transcribe-mlx # Apple Silicon
3746
uv sync --group transcribe-faster # Cross-platform
38-
uv sync --group transcribe-whisper # OpenAI Whisper
47+
uv sync --group transcribe-whisper # OpenAI Whisper package
3948
```
4049

41-
Notes:
42-
43-
- `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
4851

49-
Copy the example profile and customize it for your podcast:
52+
Create an optional show profile:
5053

5154
```bash
5255
cp podguy.example.toml podguy.toml
5356
```
5457

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:
6259

6360
```bash
64-
cd podguy
6561
./podguy
6662
```
6763

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:
7565

7666
```text
7767
Analyze "episode-006-draft.mp4" as ep006.
7868
7969
Generate chapters for ep006 in timestamp-title format.
8070
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.
9772
```
9873

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
114-
- **full review** = quick pass + chapters + clips + cuts + show notes + quotes + proper noun review
115-
116-
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:
12375

124-
The repo-local skills are the main interface for this project:
76+
- **quick pass**: optional video scan + transcript + prepared transcript artifacts + short summary
77+
- **full review**: quick pass + chapters + clips + cuts + show notes + quotes + proper noun review
12578

126-
- Launcher: [podguy](podguy)
127-
- Main skill: [src/podguy-post-production/SKILL.md](src/podguy-post-production/SKILL.md)
128-
- Clip cutting skill: [src/podguy-clip-cutter/SKILL.md](src/podguy-clip-cutter/SKILL.md)
129-
- Startup widget extension: [src/podguy-startup.ts](src/podguy-startup.ts)
130-
- Prompt templates: [prompts](prompts)
131-
- Profile example: [podguy.example.toml](podguy.example.toml)
132-
- Discovery: [package.json](package.json)
133-
- Project instructions: [AGENTS.md](AGENTS.md)
134-
- Underlying tools: [scripts/scan_podcast.swift](scripts/scan_podcast.swift), [scripts/transcribe_video.py](scripts/transcribe_video.py), [scripts/prepare_transcript_analysis.py](scripts/prepare_transcript_analysis.py), [scripts/cut_clips.py](scripts/cut_clips.py)
135-
136-
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
14180

14281
### Scan a video
14382

144-
```bash
145-
swift scripts/scan_podcast.swift <input-video> <output-dir> [sample-interval-seconds]
146-
```
147-
148-
Example:
149-
15083
```bash
15184
swift scripts/scan_podcast.swift "episode-006-draft.mp4" dist/analysis/ep006/scan 0.5
15285
open dist/analysis/ep006/scan/report.html
15386
```
15487

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+
15597
### Transcribe media
15698

15799
```bash
158100
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:
163101

164-
```bash
165102
uv run --group transcribe-mlx python scripts/transcribe_video.py \
166103
"episode-006-draft.mp4" \
167104
dist/analysis/ep006/transcript \
168105
--backend mlx-whisper
169106
```
170107

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+
171118
### Prepare transcript artifacts
172119

173120
```bash
@@ -178,9 +125,16 @@ uv run python scripts/prepare_transcript_analysis.py \
178125
--plain-output-names
179126
```
180127

181-
### Cut selected clip candidates
128+
Key outputs:
182129

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:
184138

185139
```bash
186140
uv run python scripts/cut_clips.py \
@@ -201,11 +155,11 @@ uv run python scripts/cut_clips.py \
201155
--pad-end 1
202156
```
203157

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.
205159

206-
### Download open-license sample media
160+
### Download real sample media
207161

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:
209163

210164
```bash
211165
scripts/download_sample_media.sh
@@ -217,31 +171,38 @@ This writes to:
217171
dist/test-fixtures/open-license/cordkillers-572/
218172
```
219173

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)
226-
- Clip cutting skill: [src/podguy-clip-cutter/SKILL.md](src/podguy-clip-cutter/SKILL.md)
227-
- Startup widget extension: [src/podguy-startup.ts](src/podguy-startup.ts)
228-
- Project instructions: [AGENTS.md](AGENTS.md)
229-
- Profile example: [podguy.example.toml](podguy.example.toml)
230-
- Scanner CLI: [scripts/scan_podcast.swift](scripts/scan_podcast.swift)
231-
- Transcript CLI: [scripts/transcribe_video.py](scripts/transcribe_video.py)
232-
- Transcript prep CLI: [scripts/prepare_transcript_analysis.py](scripts/prepare_transcript_analysis.py)
233-
- Clip cutter CLI: [scripts/cut_clips.py](scripts/cut_clips.py)
234-
- Fixture builder: [scripts/make_test_fixture.sh](scripts/make_test_fixture.sh)
235-
- Open-license sample downloader: [scripts/download_sample_media.sh](scripts/download_sample_media.sh)
236-
- Test wrapper: [scripts/test.sh](scripts/test.sh)
237-
- CI workflow: [.github/workflows/ci.yml](.github/workflows/ci.yml)
238-
- Smoke tests: [tests/test_scan_podcast.sh](tests/test_scan_podcast.sh), [tests/test_transcribe_video.sh](tests/test_transcribe_video.sh), [tests/test_prepare_transcript_analysis.sh](tests/test_prepare_transcript_analysis.sh), [tests/test_cut_clips.sh](tests/test_cut_clips.sh), [tests/test_download_sample_media.sh](tests/test_download_sample_media.sh), [tests/test_launcher.sh](tests/test_launcher.sh)
174+
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.
239175

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.
241191

242-
Small, focused PRs are welcome.
192+
## Project layout
243193

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.
198+
- [`prompts/`](prompts): optional prompt shortcuts.
199+
- [`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:
245206

246207
```bash
247208
npm run format:check
@@ -250,17 +211,29 @@ npm run typecheck
250211
npm test
251212
```
252213

253-
You can also run the shell smoke tests directly:
214+
Run the shell smoke tests directly:
254215

255216
```bash
256217
bash scripts/test.sh
257218
```
258219

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.
260233

261234
## Security
262235

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.
264237

265238
## Sponsor
266239

@@ -276,8 +249,8 @@ Sponsored by [Modem](https://modem.dev?utm_source=github&utm_medium=oss&utm_camp
276249

277250
## License
278251

279-
MIT. See [LICENSE](LICENSE).
252+
MIT. See [`LICENSE`](LICENSE).
280253

281254
## Support
282255

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

Comments
 (0)