Skip to content

Commit e5a569f

Browse files
benvinegarclaude
andauthored
fix: resolve cross-file consistency issues and doc gaps (#5)
- standardize the chapters artifact on chapters.md everywhere; the post-production workflow wrote chapters.txt while the YouTube publish workflow looked for chapters.md - point the launcher's "pi is not installed" error at npm install and the renamed @earendil-works/pi-coding-agent package - reduce /phase1 to a thin alias for /full-review and drop it from the startup widget (also dedupe /cut-clips) - give the "no transcription backend found" error actionable uv sync --group commands - document the OAuth test-user step in the README, testing-mode refresh token expiry in the publisher skill, uv first-run venv behavior, and the non-macOS scanner skip rule (AGENTS.md + skill) - move /login guidance to after first launch in Quick start; note that Common workflows commands are reference, not required UX Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent cf567d0 commit e5a569f

11 files changed

Lines changed: 34 additions & 50 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Default to the `podguy-post-production` workflow unless the user explicitly asks
2626
- reuse existing analysis outputs when they already match the requested episode/version
2727
- treat scanner results as heuristic review aids, not exact edit points
2828
- support audio-only files, video drafts, preview exports, and final renders
29-
- skip the visual scanner for audio-only inputs
29+
- skip the visual scanner for audio-only inputs and on non-macOS systems (it requires Swift/AVFoundation); say why when skipping
3030
- use transcript evidence and timecodes whenever possible when giving editorial feedback
3131
- treat generated clip media as review exports, not final mastered social edits
3232
- never upload to YouTube without explicit user confirmation of the final metadata; default uploads to private

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ All notable user-visible changes to this project are documented in this file.
1212
### Changed
1313

1414
### Fixed
15+
16+
- Standardize the chapters artifact on `dist/analysis/<slug>/chapters.md` so the chapters and YouTube publish workflows agree.
17+
- Correct the launcher's "pi is not installed" message to point at `npm install` and the renamed `@earendil-works/pi-coding-agent` package.
18+
- Document the OAuth test-user requirement, testing-mode token expiry, uv first-run behavior, and the macOS-only scanner skip rule.
19+
- Give the "no transcription backend found" error actionable `uv sync --group ...` commands.

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,8 @@ brew install uv ffmpeg
3535
Notes:
3636

3737
- `ffmpeg` is used for fixtures, transcription backends, and clip cutting.
38-
- `uv` runs the Python scripts and optional transcription dependency groups.
39-
- The video scanner is macOS-only and uses Swift / AVFoundation / Vision.
40-
41-
Before first use, authenticate pi with `/login` or your usual provider API key setup.
38+
- `uv` runs the Python scripts and optional transcription dependency groups. The first `uv` command creates a local `.venv/` and may download Python automatically — this is normal and only happens once.
39+
- The video scanner is macOS-only and uses Swift / AVFoundation / Vision. Everything else works cross-platform (Linux: install `uv` and `ffmpeg` via your package manager).
4240

4341
Set up a real transcription backend when you are ready to transcribe episodes:
4442

@@ -62,6 +60,8 @@ Start podguy from the repo root:
6260
./podguy
6361
```
6462

63+
On first launch, type `/login` inside pi to connect your model provider (or use your usual API key setup).
64+
6565
Then ask pi for a concrete episode task:
6666

6767
```text
@@ -79,6 +79,8 @@ For broad requests, podguy should clarify between:
7979

8080
## Common workflows
8181

82+
You don't need to memorize these — pi runs them for you when you ask in natural language. They're here for reference and debugging.
83+
8284
### Scan a video
8385

8486
```bash
@@ -160,7 +162,7 @@ The cutter writes generated media plus `manifest.json`. Vertical and square mode
160162

161163
### Publish to YouTube
162164

163-
One-time setup: create a Google Cloud project with the YouTube Data API v3 enabled, create a Desktop-app OAuth client, save the JSON to `~/.config/podguy/youtube/client_secret.json`, then authenticate:
165+
One-time setup: create a Google Cloud project with the YouTube Data API v3 enabled, create a Desktop-app OAuth client, and save the downloaded JSON to `~/.config/podguy/youtube/client_secret.json`. On the OAuth consent screen, keep the app in Testing mode and add your own Google account as a test user — otherwise the auth flow fails with `access_denied`. Then authenticate:
164166

165167
```bash
166168
uv sync --group youtube
@@ -208,7 +210,7 @@ hosts = ["Host One", "Host Two"]
208210
tone = "curious, direct, practical"
209211
audience = "builders and technical operators"
210212
chapter_style = "concise descriptive titles"
211-
preferred_review = "quick pass"
213+
preferred_review = "quick_pass"
212214
```
213215

214216
`podcast.toml` is also accepted as a compatible profile name.

podguy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ else
1414
cat >&2 <<'EOF'
1515
error: pi is not installed.
1616
17-
Install it with one of:
18-
npm install -g @mariozechner/pi-coding-agent
19-
npm install --save-dev @mariozechner/pi-coding-agent
17+
From the repo root, run:
18+
npm install
19+
20+
(or install globally: npm install -g @earendil-works/pi-coding-agent)
2021
2122
Then run ./podguy again.
2223
EOF

prompts/chapters.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Workflow:
1111
`uv run python scripts/prepare_transcript_analysis.py <transcript-dir> --output-dir dist/analysis/<slug> --slug <slug> --plain-output-names`
1212
3. Read the prepared transcript artifacts. For long transcripts, use the chunk index first and then inspect the most relevant chunk sections.
1313
4. Decide chapter boundaries and titles with pi-driven judgment. Use `chapter_style` from `podguy.toml` or `podcast.toml` when present.
14-
5. Write the final chapter block to `dist/analysis/<slug>/chapters.txt`.
14+
5. Write the final chapter block to `dist/analysis/<slug>/chapters.md`.
1515
6. Reply with the output path and the final chapter block.
1616

1717
Formatting rules:

prompts/full-review.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Workflow:
2020
- `dist/analysis/<slug>/transcript_chunks.md`
2121
- `dist/analysis/<slug>/transcript_index.json`
2222
5. Produce these outputs under `dist/analysis/<slug>/`:
23-
- `dist/analysis/<slug>/chapters.txt`
23+
- `dist/analysis/<slug>/chapters.md`
2424
- `dist/analysis/<slug>/clips.md`
2525
- `dist/analysis/<slug>/cut_report.md`
2626
- `dist/analysis/<slug>/show_notes.md`

prompts/phase1.md

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,4 @@
22
description: Compatibility alias for the full podguy transcript and editorial review workflow
33
---
44

5-
Run the full podguy review workflow for: $@
6-
7-
`/phase1` is kept as a compatibility shortcut. Prefer `/full-review` for new usage.
8-
9-
Goal:
10-
11-
- use pi for editorial judgment
12-
- use repo scripts only for deterministic prep and formatting support
13-
- use `podguy.toml` or `podcast.toml` show context when present
14-
15-
Workflow:
16-
17-
1. Identify the media file, transcript output directory, prepared transcript artifacts, and target episode slug.
18-
2. If the transcript does not exist yet, ask for the media file/transcript directory or offer the exact `scripts/transcribe_video.py` command needed.
19-
3. Ensure prepared transcript artifacts exist. If needed, run:
20-
`uv run python scripts/prepare_transcript_analysis.py <transcript-dir> --output-dir dist/analysis/<slug> --slug <slug> --plain-output-names`
21-
4. Ground all editorial work in the prepared artifacts:
22-
- `dist/analysis/<slug>/transcript_chunks.md`
23-
- `dist/analysis/<slug>/transcript_index.json`
24-
5. Produce these outputs under `dist/analysis/<slug>/`:
25-
- `dist/analysis/<slug>/chapters.txt`
26-
- `dist/analysis/<slug>/clips.md`
27-
- `dist/analysis/<slug>/cut_report.md`
28-
- `dist/analysis/<slug>/show_notes.md`
29-
- `dist/analysis/<slug>/quotes.md`
30-
- `dist/analysis/<slug>/proper_nouns.md`
31-
6. Write the outputs to disk and summarize what was generated.
32-
33-
Rules:
34-
35-
- Keep judgment in pi; do not try to replace it with repo-local heuristics.
36-
- Reuse existing prepared artifacts when they already match the requested transcript.
37-
- If something is ambiguous, ask a short clarifying question before writing files.
5+
`/phase1` is a compatibility alias. Follow the `/full-review` workflow for: $@

scripts/transcribe_video.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,12 @@ def choose_backend(requested: str) -> str:
9191
return name
9292

9393
raise SystemExit(
94-
"no transcription backend found. Install one of: mlx-whisper, faster-whisper, or whisper. "
94+
"no transcription backend found.\n"
95+
"Install one and re-run with the matching dependency group, e.g.:\n"
96+
" uv sync --group transcribe-mlx\n"
97+
" uv run --group transcribe-mlx python scripts/transcribe_video.py ...\n"
98+
"(groups: transcribe-mlx for Apple Silicon, transcribe-faster cross-platform, "
99+
"transcribe-whisper for OpenAI Whisper)\n"
95100
"Or run the smoke test with --backend mock."
96101
)
97102

src/podguy-post-production/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ For synthetic or test fixture inputs, default to a leaner evaluation mindset and
6363
### Quick pass
6464

6565
1. Start from the input media file. It can be audio or video as long as `scripts/transcribe_video.py` can process it.
66-
2. If the input is video, optionally run the visual scanner to find likely interstitials and other non-host inserts. Skip this for audio-only inputs.
66+
2. If the input is video and you are on macOS, optionally run the visual scanner to find likely interstitials and other non-host inserts. Skip this for audio-only inputs and on non-macOS systems (say why when skipping).
6767
3. Run the transcript tool on the same media file.
6868
4. Prepare deterministic transcript artifacts for pi with `scripts/prepare_transcript_analysis.py`.
6969
5. Return a short grounded summary with:
@@ -105,7 +105,7 @@ Recommended single-show pattern:
105105
- `dist/analysis/<episode>/transcript_large/` when keeping multiple transcript variants
106106
- `dist/analysis/<episode>/transcript_chunks.md`
107107
- `dist/analysis/<episode>/transcript_index.json`
108-
- `dist/analysis/<episode>/chapters.txt`
108+
- `dist/analysis/<episode>/chapters.md`
109109
- `dist/analysis/<episode>/clips.md`
110110
- `dist/analysis/<episode>/clips/cuts/`
111111
- `dist/analysis/<episode>/clips/shorts/`

src/podguy-startup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export default function podguyStartupExtension(pi: ExtensionAPI) {
134134
"- Full review = quick pass + chapters + clips + cuts + notes + quotes + cleanup",
135135
"- Cut social exports after clips exist: /cut-clips ep006",
136136
"- Upload finished episodes to YouTube: /publish-youtube ep006",
137-
"- Optional shortcuts: /phase1 ep006 | /full-review ep006 | /chapters ep006 | /cuts ep006 | /cut-clips ep006 | /publish-youtube ep006",
137+
"- Optional shortcuts: /full-review ep006 | /chapters ep006 | /clips ep006 | /cuts ep006 | /show-notes ep006",
138138
]);
139139
});
140140

0 commit comments

Comments
 (0)