Files
yt-channel-scraper/graphify-out/manifest.json
T
urieljareth 06497299ab feat: integrated audio player + animated transcript follower
- 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.
2026-07-27 00:00:28 -06:00

187 lines
6.5 KiB
JSON

{
"pyproject.toml": {
"mtime": 1785126752.9759955,
"ast_hash": "f80dc007b3b67c7f7a78d9df01a81ead",
"semantic_hash": "f80dc007b3b67c7f7a78d9df01a81ead"
},
"scripts/start-server.ps1": {
"mtime": 1785130613.533591,
"ast_hash": "9baf397df6c14b7917ca59fbe6df61cc",
"semantic_hash": "9baf397df6c14b7917ca59fbe6df61cc"
},
"scripts/stop-server.ps1": {
"mtime": 1785127403.2329483,
"ast_hash": "4398501c202a3eb624fb439f6d03fcf5",
"semantic_hash": "4398501c202a3eb624fb439f6d03fcf5"
},
"src/yt_scraper/__init__.py": {
"mtime": 1785120608.3336751,
"ast_hash": "4867131295172353fe6c2295851defc7",
"semantic_hash": "4867131295172353fe6c2295851defc7"
},
"src/yt_scraper/analysis.py": {
"mtime": 1785126463.1545029,
"ast_hash": "c28d08131e6594e1e7c6111ff01b2d37",
"semantic_hash": "c28d08131e6594e1e7c6111ff01b2d37"
},
"src/yt_scraper/chapters.py": {
"mtime": 1785120675.3308973,
"ast_hash": "1bf51b7c13486b9db9bcc3420fba2593",
"semantic_hash": "1bf51b7c13486b9db9bcc3420fba2593"
},
"src/yt_scraper/cli.py": {
"mtime": 1785126572.0575886,
"ast_hash": "9734cedf7c1e045e1ab0e4a102860e29",
"semantic_hash": "9734cedf7c1e045e1ab0e4a102860e29"
},
"src/yt_scraper/config.py": {
"mtime": 1785120620.335521,
"ast_hash": "2f3c8f7768a942e12c0a9e41b54891be",
"semantic_hash": "2f3c8f7768a942e12c0a9e41b54891be"
},
"src/yt_scraper/cookies.py": {
"mtime": 1785126417.4218228,
"ast_hash": "dd5ec44bb4c6e6375be80f21307fc73d",
"semantic_hash": "dd5ec44bb4c6e6375be80f21307fc73d"
},
"src/yt_scraper/discover.py": {
"mtime": 1785120708.331971,
"ast_hash": "8db06d0b131575f709b55467eabdc2a9",
"semantic_hash": "8db06d0b131575f709b55467eabdc2a9"
},
"src/yt_scraper/export.py": {
"mtime": 1785126439.6829402,
"ast_hash": "f1cff31fb1004f08e997655f838e3a58",
"semantic_hash": "f1cff31fb1004f08e997655f838e3a58"
},
"src/yt_scraper/extract.py": {
"mtime": 1785122183.7294595,
"ast_hash": "3e2179db2f7fd316d2b3acedee536086",
"semantic_hash": "3e2179db2f7fd316d2b3acedee536086"
},
"src/yt_scraper/monitor.py": {
"mtime": 1785126496.288271,
"ast_hash": "a64188f938dc4f8917335ef41d333ead",
"semantic_hash": "a64188f938dc4f8917335ef41d333ead"
},
"src/yt_scraper/parse.py": {
"mtime": 1785120665.3384771,
"ast_hash": "25354365ac1ab52f1561c97256573806",
"semantic_hash": "25354365ac1ab52f1561c97256573806"
},
"src/yt_scraper/pipeline.py": {
"mtime": 1785131195.7311583,
"ast_hash": "ebce1b294140bf40f809848ef280c290",
"semantic_hash": "ebce1b294140bf40f809848ef280c290"
},
"src/yt_scraper/ratelimit.py": {
"mtime": 1785120650.3795395,
"ast_hash": "6082befe56d342fc43abd5299dd6c6ea",
"semantic_hash": "6082befe56d342fc43abd5299dd6c6ea"
},
"src/yt_scraper/render.py": {
"mtime": 1785120688.3247268,
"ast_hash": "ff83764f3a8c8874557993e11eab1f89",
"semantic_hash": "ff83764f3a8c8874557993e11eab1f89"
},
"src/yt_scraper/segments.py": {
"mtime": 1785128385.6652262,
"ast_hash": "09c7da35bc09a3f75fd0a627c0534746",
"semantic_hash": "09c7da35bc09a3f75fd0a627c0534746"
},
"src/yt_scraper/store.py": {
"mtime": 1785131583.548138,
"ast_hash": "9a3d4286214aa54ae4ac4df2097b643d",
"semantic_hash": "9a3d4286214aa54ae4ac4df2097b643d"
},
"src/yt_scraper/webapp/__init__.py": {
"mtime": 1785126827.4957752,
"ast_hash": "d41d8cd98f00b204e9800998ecf8427e",
"semantic_hash": "d41d8cd98f00b204e9800998ecf8427e"
},
"src/yt_scraper/webapp/api.py": {
"mtime": 1785131595.9914868,
"ast_hash": "e64174f04d6eab0747b1d2a7c2a96a01",
"semantic_hash": "e64174f04d6eab0747b1d2a7c2a96a01"
},
"src/yt_scraper/webapp/app.py": {
"mtime": 1785126888.8032887,
"ast_hash": "e0b1925b4318305dcf746d360373ff50",
"semantic_hash": "e0b1925b4318305dcf746d360373ff50"
},
"src/yt_scraper/webapp/jobs.py": {
"mtime": 1785131211.0397103,
"ast_hash": "8b6c80001ff8c95eaaa16f7b61d1f207",
"semantic_hash": "8b6c80001ff8c95eaaa16f7b61d1f207"
},
"src/yt_scraper/webapp/static/app.js": {
"mtime": 1785131664.8792574,
"ast_hash": "f6b081fadc5884d379152abbd1e59700",
"semantic_hash": "f6b081fadc5884d379152abbd1e59700"
},
"tests/test_chapters.py": {
"mtime": 1785120789.3300896,
"ast_hash": "6d5303fa86de8dc99af6ae2ee17da033",
"semantic_hash": "6d5303fa86de8dc99af6ae2ee17da033"
},
"tests/test_features.py": {
"mtime": 1785126709.65728,
"ast_hash": "21f9c44ce7cc1d618ece402ab7c2b057",
"semantic_hash": "21f9c44ce7cc1d618ece402ab7c2b057"
},
"tests/test_parse.py": {
"mtime": 1785120974.3283188,
"ast_hash": "57ce74ee10fe6f9a90126ec7d9fd96b0",
"semantic_hash": "57ce74ee10fe6f9a90126ec7d9fd96b0"
},
"tests/test_render.py": {
"mtime": 1785120806.3260238,
"ast_hash": "27125960e235813724fd669001faab59",
"semantic_hash": "27125960e235813724fd669001faab59"
},
"tests/test_store_platform.py": {
"mtime": 1785126662.4772756,
"ast_hash": "bad13dcf37be7a414ffae8018c29e55b",
"semantic_hash": "bad13dcf37be7a414ffae8018c29e55b"
},
".opencode/agent/webapp-builder.md": {
"mtime": 1785126783.7152567,
"ast_hash": "58e92641724400370d7823dce1e02ca3",
"semantic_hash": "58e92641724400370d7823dce1e02ca3"
},
".opencode/goals/webapp-build.md": {
"mtime": 1785126796.8402326,
"ast_hash": "478e7a2350ded2fd273cfdb0714d228d",
"semantic_hash": "478e7a2350ded2fd273cfdb0714d228d"
},
"OPPORTUNITIES.md": {
"mtime": 1785122706.3466253,
"ast_hash": "4af60e3106b394664fbf5b5c5f645804",
"semantic_hash": "4af60e3106b394664fbf5b5c5f645804"
},
"README.md": {
"mtime": 1785121499.3282604,
"ast_hash": "a0a8e6b62a991fce5d6c58171f80075e",
"semantic_hash": "a0a8e6b62a991fce5d6c58171f80075e"
},
"config.example.yaml": {
"mtime": 1785120602.4114335,
"ast_hash": "415b0fc8e71ecc305d21e9c3c08d585a",
"semantic_hash": "415b0fc8e71ecc305d21e9c3c08d585a"
},
"docs/superpowers/plans/2026-07-26-platform-build.md": {
"mtime": 1785126240.4211702,
"ast_hash": "8097056ef23068f22c48151746de305b",
"semantic_hash": "8097056ef23068f22c48151746de305b"
},
"docs/superpowers/specs/2026-07-26-platform-design.md": {
"mtime": 1785126024.4879057,
"ast_hash": "9b85f02fd45c93cdabfd2e1c6d1e0c9e",
"semantic_hash": "9b85f02fd45c93cdabfd2e1c6d1e0c9e"
},
"src/yt_scraper/webapp/static/index.html": {
"mtime": 1785131695.7653384,
"ast_hash": "13591b7c8c662d8e7c2540f3032ae26d",
"semantic_hash": "13591b7c8c662d8e7c2540f3032ae26d"
}
}