diff --git a/README.md b/README.md index 52cfdbc..ee8d922 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ graph LR ### ๐Ÿ“ฅ Download & Transcribe -Enumerate the Active Inference channel from a saved manifest. Download transcripts, audio, and video with cookie auth, rate limiting, and resume. Transcribe locally on Apple Silicon or GPU. +Enumerate the Active Inference channel from a saved manifest. Download transcripts, audio, and video (cookie-free by default) with rate limiting and resume. Transcribe locally on Apple Silicon or GPU with speaker diarization. **โ†’** [Download Guide](docs/youtube_download.md) ยท [Transcription Engines](docs/transcription.md) ยท [YouTube Module](docs/youtube.md) @@ -129,9 +129,10 @@ graph TB subgraph "CLI Layer" RUN["run.py โ€” Pipeline Runner"] S1["scripts/download_channel.py"] - S2["scripts/transcribe_missing.py"] + S2["scripts/transcribe_missing.py
scripts/transcribe_worklist.py"] S3["scripts/scaffold_youtube_courses.py"] S4["scripts/validate_journal.py"] + S5["scripts/speaker_cues.py
scripts/apply_speaker_names.py"] end subgraph "src/journal_utilities/" @@ -249,6 +250,31 @@ The final `journal-check` command is read-only and blocks handoff when metadata, indexes, transcript identities, duplicate handling, coverage, or the `main` branch's no-audio/no-credentials boundary is inconsistent. +## ๐ŸŽ™๏ธ Transcription & speaker naming + +Journal transcripts follow a **raw vs derived** design (see +[`docs/JOURNAL_SCHEMA.md`](docs/JOURNAL_SCHEMA.md)): `transcript.json` is the +immutable raw WhisperX diarization (`SPEAKER_NN` labels, never rewritten), +human speaker names live only in `metadata.json` `parts[].speakers`, and +`transcript.txt` is regenerated from the two. Private/unlisted videos are +never transcribed. All commands are dry-run by default. + +```bash +# corpus status: diarized / captions-only / excluded / scheduled +uv run python scripts/transcription_status.py + +# WhisperX + diarization for items missing transcripts (GPU, resumable) +uv run python scripts/transcribe_worklist.py # plan +uv run python scripts/transcribe_worklist.py --run + +# identify speakers: timestamped YouTube links per SPEAKER_NN +uv run python scripts/speaker_cues.py # items still needing names +uv run python scripts/speaker_cues.py --item TextbookGroup/Namjoshi2026/Cohort_1/Session_024 + +# record parts[].speakers in the item's metadata.json, then regenerate transcript.txt +uv run python scripts/apply_speaker_names.py --item --apply +``` + ## ๐Ÿ”ง Environment Required in `.env`: