Files
yt-channel-scraper/graphify-out/cache/ast/v0.9.22/5f5648fe20db27632fcc9468b33427f8525e761bd11953a5cb6fe268c27823b8.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
20 KiB
JSON

{"nodes": [{"id": "d_yt_channel_scraper_src_yt_scraper_export_py", "label": "export.py", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L1"}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "label": "export_json()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L12", "_callable": true}, {"id": "store", "label": "Store", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "D:\\yt-channel-scraper\\src\\yt_scraper\\export.py"}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "D:\\yt-channel-scraper\\src\\yt_scraper\\export.py"}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "label": "export_csv()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L24", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "label": "export_srt_video()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L42", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "label": "export_srt()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L52", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "label": "export_html()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L66", "_callable": true}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "label": "_video_to_dict()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L79", "_callable": true}, {"id": "videorow", "label": "VideoRow", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "D:\\yt-channel-scraper\\src\\yt_scraper\\export.py"}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "label": "_segments_to_srt()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L105", "_callable": true}, {"id": "segmentrow", "label": "SegmentRow", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "D:\\yt-channel-scraper\\src\\yt_scraper\\export.py"}, {"id": "d_yt_channel_scraper_src_yt_scraper_export_srt_ts", "label": "_srt_ts()", "file_type": "code", "source_file": "src/yt_scraper/export.py", "source_location": "L113", "_callable": true}], "edges": [{"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "csv", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L3", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L4", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L5", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "jinja2", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L7", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_store_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L9", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L12", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "target": "store", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L12", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L12", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "target": "path", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L12", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L24", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "target": "store", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L24", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L24", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "target": "path", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L24", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L42", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "target": "store", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L42", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L42", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "target": "path", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L42", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L52", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "target": "store", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L52", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L52", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "target": "path", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L52", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L66", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "target": "store", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L66", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L66", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L66", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "target": "path", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L66", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L79", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "target": "store", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L79", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "target": "videorow", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L79", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L105", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "target": "segmentrow", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L105", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_py", "target": "d_yt_channel_scraper_src_yt_scraper_export_srt_ts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L113", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L13", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "target": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L18", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L25", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "target": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L37", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L46", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "target": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L48", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L53", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "target": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L60", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L67", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "target": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L72", "weight": 1.0}, {"source": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "target": "d_yt_channel_scraper_src_yt_scraper_export_srt_ts", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/yt_scraper/export.py", "source_location": "L109", "weight": 1.0}], "raw_calls": [{"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "callee": "mkdir", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L14", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "callee": "get_all", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L15", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "callee": "list_channels", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L17", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "callee": "write_text", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L20", "receiver": "out"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_json", "callee": "dumps", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L20", "receiver": "json"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "callee": "mkdir", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L26", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "callee": "get_all", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L27", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "callee": "DictWriter", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L34", "receiver": "csv"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/yt_scraper/export.py", "source_location": "L34"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "callee": "writeheader", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L35", "receiver": "writer"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_csv", "callee": "writerow", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L38", "receiver": "writer"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "callee": "get_segments", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L43", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "callee": "mkdir", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L47", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_srt_video", "callee": "write_text", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L48", "receiver": "out"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "callee": "mkdir", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L54", "receiver": "out_dir"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "callee": "get_all", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L56", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_srt", "callee": "append", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L62", "receiver": "written"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "mkdir", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L68", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "resolve", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L69", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "resolve", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L69", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "__file__", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/yt_scraper/export.py", "source_location": "L69"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "Environment", "is_member_call": false, "source_file": "src/yt_scraper/export.py", "source_location": "L70", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "FileSystemLoader", "is_member_call": false, "source_file": "src/yt_scraper/export.py", "source_location": "L70", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "select_autoescape", "is_member_call": false, "source_file": "src/yt_scraper/export.py", "source_location": "L70", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "get_template", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L71", "receiver": "env"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "get_all", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L72", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "list_channels", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L73", "receiver": "store"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "render", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L74", "receiver": "template"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_export_html", "callee": "write_text", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L75", "receiver": "out"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "callee": "loads", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L83", "receiver": "json"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_video_to_dict", "callee": "TypeError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "src/yt_scraper/export.py", "source_location": "L84"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "callee": "append", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L109", "receiver": "blocks"}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_segments_to_srt", "callee": "join", "is_member_call": true, "source_file": "src/yt_scraper/export.py", "source_location": "L110", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_srt_ts", "callee": "divmod", "is_member_call": false, "source_file": "src/yt_scraper/export.py", "source_location": "L116", "receiver": null}, {"caller_nid": "d_yt_channel_scraper_src_yt_scraper_export_srt_ts", "callee": "divmod", "is_member_call": false, "source_file": "src/yt_scraper/export.py", "source_location": "L117", "receiver": null}]}