{"id":50512973,"url":"https://github.com/avidrucker/talk-distill-skills","last_synced_at":"2026-06-02T21:32:59.023Z","repository":{"id":360498258,"uuid":"1250406476","full_name":"avidrucker/talk-distill-skills","owner":"avidrucker","description":"Pipeline + eventual Claude Code skill family for distilling YouTube talks into transcripts and summaries. Sister project to warmed-skills and yegor-pm-skills.","archived":false,"fork":false,"pushed_at":"2026-05-26T16:41:17.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T18:16:55.456Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avidrucker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-26T15:44:45.000Z","updated_at":"2026-05-26T16:41:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/avidrucker/talk-distill-skills","commit_stats":null,"previous_names":["avidrucker/talk-distill-skills"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/avidrucker/talk-distill-skills","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Ftalk-distill-skills","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Ftalk-distill-skills/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Ftalk-distill-skills/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Ftalk-distill-skills/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avidrucker","download_url":"https://codeload.github.com/avidrucker/talk-distill-skills/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Ftalk-distill-skills/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33838216,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-02T21:32:58.300Z","updated_at":"2026-06-02T21:32:59.017Z","avatar_url":"https://github.com/avidrucker.png","language":"Python","funding_links":[],"categories":["Skill repos"],"sub_categories":[],"readme":"# talk-distill-skills\n\nThe pipeline and [Claude Code](https://claude.com/claude-code) skill\nfamily for turning a YouTube talk into a clean speaker-labelled\ntranscript, an executive summary, and a timestamp-anchored key-takeaways\nindex — usable as personal study material.\n\nThis repo borrows its file/repo conventions from two sister repos:\n\n- [`warmed-skills`](https://github.com/avidrucker/warmed-skills) — first\n  repo I built with the `\u003ctalk\u003e/captions.SRT` + `transcript.txt` +\n  `talk_summary.md` layout. The `executive_summary.md` format (TL;DR +\n  Salient Points + Outline) came from there.\n- [`yegor-pm-skills`](https://github.com/avidrucker/yegor-pm-skills) —\n  first repo I built with the parent meta-skill + sub-skills + per-skill\n  `VERSION` / `CHANGELOG.md` layout. The `key_takeaways.md` format\n  (timestamped emoji-bullet index) came from there.\n\nThose repos distill someone else's published material. This one is\noriginal tooling — the SRT-to-summary pipeline that turns the manual\ningestion process used in those repos into a reusable skill family.\n\n## Why this exists\n\nEach sister repo above hand-curated its SRT, transcript, and summary\nfiles. That process was manual every time. This repo's goal is to\n**automate the pipeline as a Claude Code skill family**, so the next\ntalk distillation is mostly a `/talk-distill \u003cyoutube-url\u003e` away.\n\nThe talk artifacts produced by the pipeline so far live in\n[`fulcro-statecharts-talks`](https://github.com/avidrucker/fulcro-statecharts-talks)\n— two Tony Kay statechart talks distilled with this tooling. Treat that\nrepo as the test corpus / example outputs for what the skill family\nshould produce.\n\n## Current state\n\n- ✅ Working Python script: `scripts/srt_to_transcript.py`. Handles\n  YouTube's rolling-caption format, speaker labeling via `\u003e\u003e` markers\n  (with auto-revert and length-threshold heuristics), and configurable\n  paragraph breaks. Stress-tested on two talks of very different length\n  (76 min and 3h 28m) without per-video tuning.\n- ✅ End-to-end workflow validated and documented in\n  [`workflow_notes.md`](workflow_notes.md). Read that doc first if you want\n  to understand the design choices, the heuristics, and the limitations.\n- ✅ Skills drafted at v0.1.1 — see [`skills/`](skills/).\n\n| Skill | Responsibility |\n|---|---|\n| `talk-distill` | Parent / meta-orchestrator. Routes to the four sub-skills based on which artifacts the user wants. |\n| `talk-fetch` | `yt-dlp` wrapper. Probes available subtitle tracks, picks the right one (preferring human-authored over auto-captions, `\u003clang\u003e-orig` over plain `\u003clang\u003e`), fetches SRT. |\n| `talk-transcribe` | SRT → speaker-labelled paragraph transcript. Wraps `scripts/srt_to_transcript.py`. |\n| `talk-summarize` | Transcript → `executive_summary.md` (TL;DR + Salient Points + Outline). |\n| `talk-takeaways` | Transcript (with timestamps) → `key_takeaways.md` (timestamped emoji-bullet index). |\n\nSkills are v0.1.1 because they're written but not yet stress-tested on\na wide variety of talks (different speakers, manual vs. auto captions,\nsingle-speaker vs. Q\u0026A, non-English). The defaults are validated on the\ntwo Tony Kay statechart talks; they'll need refinement as the family is\nexercised on more material.\n\n## Repo layout\n\n```\ntalk-distill-skills/\n├── README.md                          # this file\n├── LICENSE                            # MIT\n├── .gitignore\n├── workflow_notes.md                  # design notes, heuristics, lessons learned\n├── scripts/\n│   └── srt_to_transcript.py           # the `talk-transcribe` implementation\n└── skills/\n    ├── talk-distill/{SKILL.md, VERSION, CHANGELOG.md}\n    ├── talk-fetch/{...}\n    ├── talk-transcribe/{...}\n    ├── talk-summarize/{...}\n    └── talk-takeaways/{...}\n```\n\n`scripts/` is **tracked** here, deviating from the convention in\n`warmed-skills`/`yegor-pm-skills` of gitignoring it. The script isn't a\npersonal utility — it's the artifact this repo is built around.\n\n## Using the script today\n\nThe script works standalone before any skill exists:\n\n```bash\n# 1. Fetch the SRT (yt-dlp \u003e= 2025 strongly recommended; older builds\n#    can list captions but fail to download them on current YouTube)\nyt-dlp --skip-download --write-auto-subs --sub-langs en-orig \\\n       --convert-subs srt \\\n       --output \"%(title)s.%(ext)s\" \\\n       \"https://www.youtube.com/watch?v=\u003cVIDEO_ID\u003e\"\n\n# 2. Convert to a speaker-labelled transcript\npython3 scripts/srt_to_transcript.py captions.srt transcript.txt \\\n        --speakers \"Tony Kay,Host\" \\\n        --preamble-skip 27\n```\n\nRun with `--help` for the full flag set. Defaults work on Tony-Kay-style\nZoom-recorded team talks; other speakers may need a different\n`--preamble-skip` (the script trims meeting tech-check chatter at the\nstart; this value happens to fit Tony's habit and is the most common\nper-video tuning point).\n\n## Convention notes\n\nSkill-author-repo conventions (carried over from the sister repos\n`warmed-skills` and `yegor-pm-skills`):\n\n- Each skill ships `SKILL.md` + `VERSION` + `CHANGELOG.md`, independently\n  semver-versioned. The `VERSION` file and the frontmatter `version:`\n  field move together.\n- Symlink installed skills into `~/.claude/skills/\u003cslug\u003e` so edits land\n  live in the next session.\n- `research/` directory holds deep-reference docs per skill, added when\n  needed. For now, [`workflow_notes.md`](workflow_notes.md) at the repo\n  root serves as the family's research doc.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favidrucker%2Ftalk-distill-skills","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favidrucker%2Ftalk-distill-skills","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favidrucker%2Ftalk-distill-skills/lists"}