Files
yt-channel-scraper/graphify-out/cache/ast/v0.9.22/64a9963471c61688046509288debd54d5eb992be7e3bd86fd0e0d23714316585.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

1 line
12 KiB
JSON

{"nodes": [{"id": "d_yt_channel_scraper_src_yt_scraper_extract_py", "label": "extract.py", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L1"}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_subtitlepick", "label": "SubtitlePick", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L16", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_videodata", "label": "VideoData", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L24", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "label": "extract_video()", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L31", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "label": "pick_subtitle()", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L72", "_callable": true}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "D:\\yt-channel-scraper\\src\\yt_scraper\\extract.py"}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "label": "_pick_best_format()", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L101", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_normalize_lang", "label": "_normalize_lang()", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L113", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "label": "_download_subtitle()", "file_type": "code", "source_file": "src/yt_scraper/extract.py", "source_location": "L118", "_callable": true}], "edges": [{"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L3", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L4", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L5", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "requests", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L7", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "yt_dlp", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L8", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_parse_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L10", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_subtitlepick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L16", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_videodata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L24", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L31", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "target": "d_yt_channel_scraper_src_yt_scraper_extract_videodata", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L31", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L72", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L72", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "target": "d_yt_channel_scraper_src_yt_scraper_extract_subtitlepick", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L72", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L101", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L101", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L101", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_normalize_lang", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L113", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_py", "target": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L118", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "target": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L59", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "target": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L62", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "target": "d_yt_channel_scraper_src_yt_scraper_extract_videodata", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L69", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "target": "d_yt_channel_scraper_src_yt_scraper_extract_normalize_lang", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L84", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "target": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L90", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "target": "d_yt_channel_scraper_src_yt_scraper_extract_subtitlepick", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/extract.py", "source_location": "L92", "weight": 1.0}], "raw_calls": [{"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "callee": "YoutubeDL", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L56", "receiver": "yt_dlp"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "callee": "extract_info", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L57", "receiver": "ydl"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "callee": "parse_auto_dump", "is_member_call": false, "source_file": "src/yt_scraper/extract.py", "source_location": "L64", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "callee": "warning", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L66", "receiver": "log"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_extract_video", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L68", "receiver": "info"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L73", "receiver": "info"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L74", "receiver": "info"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_pick_subtitle", "callee": "items", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L85", "receiver": "tracks"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L105", "receiver": "fmt"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L105", "receiver": "fmt"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_pick_best_format", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L108", "receiver": "fmt"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_normalize_lang", "callee": "lower", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L114", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_normalize_lang", "callee": "split", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L114", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_normalize_lang", "callee": "replace", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L114", "receiver": "code"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "callee": "get", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L120", "receiver": "requests"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "callee": "raise_for_status", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L121", "receiver": "resp"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "callee": "error", "is_member_call": true, "source_file": "src/yt_scraper/extract.py", "source_location": "L124", "receiver": "log"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_extract_download_subtitle", "callee": "exc", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/yt_scraper/extract.py", "source_location": "L124"}]}