- Video detail (done videos): added 'Download audio' button; removed the
manual 'Thumbnail' button (thumbnails auto-download now, so it was redundant).
- New 'GET /api/videos/{id}/audio' endpoint (also serves HEAD for probing),
serving data/audio/<video_id>.mp3. Audio job outtmpl switched to %(id)s so
files are addressable per video.
- Integrated <audio> player appears in the detail view once the MP3 is present
(probed via HEAD on openVideo; polled after a download job until ready).
- Synced transcript follower: as audio plays, the matching segment is
highlighted (seg-active) and auto-scrolled into view like a karaoke/lyrics
tracker. Clicking any segment timestamp or chapter seeks the audio to that
point (falls back to scroll when no audio). Playback indicator pulses while
playing.
115 lines
6.7 KiB
Markdown
115 lines
6.7 KiB
Markdown
# Graph Report - . (2026-07-26)
|
|
|
|
## Corpus Check
|
|
- Corpus is ~28,854 words - fits in a single context window. You may not need a graph.
|
|
|
|
## Summary
|
|
- 392 nodes · 951 edges · 14 communities (12 shown, 2 thin omitted)
|
|
- Extraction: 93% EXTRACTED · 7% INFERRED · 0% AMBIGUOUS · INFERRED: 65 edges (avg confidence: 0.76)
|
|
- Token cost: 11,800 input · 4,100 output
|
|
|
|
## Community Hubs (Navigation)
|
|
- Webapp Frontend (JS)
|
|
- Transcript Extraction & Parsing
|
|
- Config & Discovery Pipeline
|
|
- Store & Export Layer
|
|
- CLI Command Layer
|
|
- Platform Design & Proposals
|
|
- Segments Search & Backfill
|
|
- Store Platform Tests
|
|
- Content Analysis
|
|
- README & Config Docs
|
|
- Package Manifest
|
|
|
|
## God Nodes (most connected - your core abstractions)
|
|
1. `Store` - 81 edges
|
|
2. `Segment` - 32 edges
|
|
3. `api()` - 31 edges
|
|
4. `toast()` - 29 edges
|
|
5. `Config` - 23 edges
|
|
6. `process_video()` - 19 edges
|
|
7. `JobManager` - 17 edges
|
|
8. `resolve_active_path()` - 13 edges
|
|
9. `discover_channel()` - 13 edges
|
|
10. `backfill_from_markdown()` - 13 edges
|
|
|
|
## Surprising Connections (you probably didn't know these)
|
|
- `test_dashboard_aggregates()` --calls--> `Segment` [INFERRED]
|
|
tests/test_store_platform.py → src/yt_scraper/parse.py
|
|
- `test_store_and_search_segments()` --calls--> `Segment` [INFERRED]
|
|
tests/test_store_platform.py → src/yt_scraper/parse.py
|
|
- `test_store_segments_overwrites()` --calls--> `Segment` [INFERRED]
|
|
tests/test_store_platform.py → src/yt_scraper/parse.py
|
|
- `store()` --calls--> `Store` [INFERRED]
|
|
tests/test_store_platform.py → src/yt_scraper/store.py
|
|
- `test_migration_idempotent()` --calls--> `Store` [INFERRED]
|
|
tests/test_store_platform.py → src/yt_scraper/store.py
|
|
|
|
## Import Cycles
|
|
- None detected.
|
|
|
|
## Hyperedges (group relationships)
|
|
- **Workstream B webapp stack (FastAPI + Alpine SPA + subagent)** — opencode_agent_webapp_builder, opencode_goals_webapp_build, src_yt_scraper_webapp_static_index, docs_superpowers_specs_2026_07_26_platform_design_dark_command_center, docs_superpowers_specs_2026_07_26_platform_design_sse_job_runner [EXTRACTED 0.95]
|
|
- **FTS5 transcript search flow (proposal -> spec -> SPA view)** — opportunities_search_fts5, docs_superpowers_specs_2026_07_26_platform_design_transcript_fts5, src_yt_scraper_webapp_static_index [INFERRED 0.85]
|
|
- **Cookie auth chain (vault -> resolve_active_path -> scrape job)** — docs_superpowers_specs_2026_07_26_platform_design_cookie_vault_ux, docs_superpowers_specs_2026_07_26_platform_design_sse_job_runner, docs_superpowers_specs_2026_07_26_platform_design_cookies_bug_fix, src_yt_scraper_webapp_static_index [INFERRED 0.85]
|
|
|
|
## Communities (14 total, 2 thin omitted)
|
|
|
|
### Community 0 - "Webapp Frontend (JS)"
|
|
Cohesion: 0.06
|
|
Nodes (59): activateCookie(), addChannel(), api(), axisOpts(), barOpts(), cancelScrape(), checkHealth(), closeStream() (+51 more)
|
|
|
|
### Community 1 - "Transcript Extraction & Parsing"
|
|
Cohesion: 0.07
|
|
Nodes (57): Environment, align_chapters(), Chapter, chapters_from_info(), Section, _parse_tags(), Regenerar Markdown desde segmentos almacenados., re_render_cmd() (+49 more)
|
|
|
|
### Community 2 - "Config & Discovery Pipeline"
|
|
Cohesion: 0.06
|
|
Nodes (40): APIRouter, FastAPI, _build_config(), Config, DelayConfig, load_config(), Any, Path (+32 more)
|
|
|
|
### Community 3 - "Store & Export Layer"
|
|
Cohesion: 0.07
|
|
Nodes (28): Connection, Cursor, Row, is_expired(), list_vault(), export_csv(), export_html(), export_json() (+20 more)
|
|
|
|
### Community 4 - "CLI Command Layer"
|
|
Cohesion: 0.08
|
|
Nodes (41): analyze_cmd(), _apply_filters(), audio_cmd(), _channel_targets(), channels_add(), cli(), export_cmd(), _extract_handle() (+33 more)
|
|
|
|
### Community 5 - "Platform Design & Proposals"
|
|
Cohesion: 0.12
|
|
Nodes (20): Platform Implementation Plan, Platform Design Spec, Cookie drag-and-drop vault UX, cli.py cookies scope bug fix, Design language: dark data command center, Architecture: Monorepo in-package webapp (Approach A), Scope rule: No AI features, Single-threaded scrape job runner + SSE event bus (+12 more)
|
|
|
|
### Community 6 - "Segments Search & Backfill"
|
|
Cohesion: 0.26
|
|
Nodes (11): backfill_from_markdown(), parse_markdown(), ParsedMarkdown, Path, Parse all done .md files under md_root, populate segments/FTS/metadata. Idempote, search(), store_segments(), _strip_quotes() (+3 more)
|
|
|
|
### Community 7 - "Store Platform Tests"
|
|
Cohesion: 0.17
|
|
Nodes (5): store(), test_dashboard_aggregates(), test_migration_idempotent(), test_store_and_search_segments(), test_store_segments_overwrites()
|
|
|
|
### Community 8 - "Content Analysis"
|
|
Cohesion: 0.27
|
|
Nodes (10): _iter_texts(), Path, Return [(YYYY-MM, count)] of months where `term` appears in transcripts., render_timeline_chart(), render_top_words_chart(), render_wordcloud(), term_timeline(), _tokenize() (+2 more)
|
|
|
|
## Knowledge Gaps
|
|
- **10 isolated node(s):** `yt-channel-scraper`, `OPPORTUNITIES.md - extension audit`, `Design language: dark data command center`, `yt-dlp InnerTube mechanism (ANDROID/IOS/WEB clients)`, `Feature proposal: search (FTS5 transcript search)` (+5 more)
|
|
These have ≤1 connection - possible missing edges or undocumented components.
|
|
- **2 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
|
|
|
## Suggested Questions
|
|
_Questions this graph is uniquely positioned to answer:_
|
|
|
|
- **Why does `Store` connect `Store & Export Layer` to `Transcript Extraction & Parsing`, `Config & Discovery Pipeline`, `CLI Command Layer`, `Segments Search & Backfill`, `Store Platform Tests`, `Content Analysis`?**
|
|
_High betweenness centrality (0.194) - this node is a cross-community bridge._
|
|
- **Why does `Segment` connect `Transcript Extraction & Parsing` to `CLI Command Layer`, `Segments Search & Backfill`, `Store Platform Tests`?**
|
|
_High betweenness centrality (0.057) - this node is a cross-community bridge._
|
|
- **Why does `Config` connect `Config & Discovery Pipeline` to `Transcript Extraction & Parsing`, `CLI Command Layer`?**
|
|
_High betweenness centrality (0.024) - this node is a cross-community bridge._
|
|
- **Are the 4 inferred relationships involving `Store` (e.g. with `ParsedMarkdown` and `store()`) actually correct?**
|
|
_`Store` has 4 INFERRED edges - model-reasoned connections that need verification._
|
|
- **Are the 17 inferred relationships involving `Segment` (e.g. with `Chapter` and `Section`) actually correct?**
|
|
_`Segment` has 17 INFERRED edges - model-reasoned connections that need verification._
|
|
- **What connects `yt-channel-scraper`, `OPPORTUNITIES.md - extension audit`, `Design language: dark data command center` to the rest of the system?**
|
|
_10 weakly-connected nodes found - possible documentation gaps or missing edges._
|
|
- **Should `Webapp Frontend (JS)` be split into smaller, more focused modules?**
|
|
_Cohesion score 0.062317429406037 - nodes in this community are weakly interconnected._ |