Not in the top 1,000 by GitHub stars

drpwchen/lecture-to-notes

Lecture recordings → structured grounded notes + a synced HTML viewer: video, timestamped transcript and curated summary on one page. Local GPU pipeline (Whisper ASR · slide extraction · OCR · VLM signals · capture-time alignment). Claude Code skill + plain CLI.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +71 / −7 lines

Before Not checked yet → After Network or broad shell

cc06141939ce → 771ef8762212

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → cc06141939ce

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 771ef8762212731ded712b9142ab99514be7d956

116GitHub stars
2stars in 7 days
1skill in this repository
13commits in 30 days

Heat

5.3
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 6, 2026116

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

lecture-to-notes

When your agent uses it

Turn a lecture/conference recording (video or audio: MOV/MP4/M4A/MP3/WAV) into structured vault notes via local GPU transcription + slide extraction — 演講影片, 演講音檔, 上課錄影, '整理演講', '影片轉筆記', '音檔轉筆記', or a dropped media file. Handles batch runs.

What it loads into context

Frontmatter

103 tokens

Always available to the agent

SKILL.md

6,509 tokens

When the skill is activated

Reference documents

79,141 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. HARD RULES
  2. Input types and routing
  3. Pipeline
  4. Edge cases
  5. Optional infrastructure
  6. Dependencies
  7. File locations

Scripts executed separately

  • ocr_bench/adapters/paddleocr_vl_adapter.py
  • ocr_bench/adapters/rapidocr_adapter.py
  • ocr_bench/report.py
  • ocr_bench/run_bench.py
  • ocr_bench/schema.py
  • scripts/_common.py
  • scripts/_html_safety.py
  • scripts/_log.py
  • scripts/_mdpm.py
  • scripts/_paths.py
  • scripts/adapters/surya_adapter.py
  • scripts/asr_gemini_primary.py
  • scripts/audit_note.py
  • scripts/batch/add_dhash.py
  • scripts/batch/audit_segmentation.py
  • scripts/batch/build_L1.py
  • scripts/batch/course_timeline.py
  • scripts/batch/detect_language.py
  • scripts/batch/detect_language_audio.py
  • scripts/batch/phi_mask.py
  • scripts/batch/process_slide_deck.py
  • scripts/batch/split_L1_by_segment.py
  • scripts/batch/split_segments.py
  • scripts/batch/vlm_cache.py
  • scripts/build_real_words.py
  • scripts/build_single_talk_web.py
  • scripts/build_slides_from_images.py
  • scripts/build_slides_from_pdf.py
  • scripts/crop_multiup_pdf.py
  • scripts/dedup_semantic.py
  • scripts/export_web.py
  • scripts/extract_slides.py
  • scripts/finalize_to_vault.py
  • scripts/flag_asr_suspects.py
  • scripts/gemini_asr.py
  • scripts/gpu_check.py
  • scripts/groq_asr.py
  • scripts/ground_slides.py
  • scripts/import_transcript.py
  • scripts/layout2/viewer.js
  • scripts/make_glossary.py
  • scripts/media_capture_index.py
  • scripts/ocr_slides.py
  • scripts/ocr_surya.py
  • scripts/provenance.py
  • scripts/query_near_field.py
  • scripts/quick_ocr.py
  • scripts/render_embeds.py
  • scripts/retranscribe_segment.py
  • scripts/route_inputs.py
  • scripts/test_ct2_teardown.py
  • scripts/transcribe_video.py
  • scripts/ts_anchor.py
  • scripts/vlm_signals.py
  • scripts/xcorr_media_offsets.py
  • tests/conftest.py
  • tests/test_ct2_teardown_suite.py
  • tests/test_gemini_asr.py
  • tests/test_html_safety.py
  • tests/test_import_transcript.py
  • tests/test_packaging.py
  • tests/test_path_containment.py
  • tests/test_provenance.py
  • tests/test_route_plan.py
  • tests/test_sync_leak_scan.py
  • tests/test_viewer_hostile.py
  • tools/sync_from_skill.py

Files

  • .gitattributesasset294 bytes
  • .github/workflows/secret-scan.ymlasset278 bytes
  • .github/workflows/tests.ymlasset1,507 bytes
  • .gitignoreasset773 bytes
  • CHANGELOG.mddoc46,533 bytes
  • LICENSEasset1,065 bytes
  • README.mddoc20,831 bytes
  • README.zh-TW.mddoc14,456 bytes
  • SECURITY.mddoc1,068 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SKILL.mdcore25,178 bytes
  • SYNC-LEDGER.mddoc7,809 bytes
  • config.example.yamlasset9,875 bytes
  • data/.gitignoreasset464 bytes
  • data/real_acronyms.txtdoc16,535 bytes
  • data/real_words.txtdoc466,558 bytes
  • docs/AUDIT_SUMMARY.mddoc6,135 bytes
  • docs/assets/hero.pngasset516,807 bytes
  • docs/assets/hero.zh.pngasset542,778 bytes
  • docs/assets/viewer-home.pngasset215,910 bytes
  • docs/assets/viewer-summary.pngasset365,960 bytes
  • docs/assets/viewer-sync.pngasset737,035 bytes
  • docs/stage-f-contract.mddoc6,967 bytes
  • docs/transcript-contract.mddoc7,125 bytes
  • ocr_bench/README.mddoc4,220 bytes
  • ocr_bench/adapters/paddleocr_vl_adapter.pyruns3,551 bytes
  • ocr_bench/adapters/rapidocr_adapter.pyruns1,778 bytes
  • ocr_bench/report.pyruns2,890 bytes
  • ocr_bench/run_bench.pyruns7,759 bytes
  • ocr_bench/schema.pyruns1,802 bytes
  • pyproject.tomlasset1,938 bytes
  • reference/decisions.mddoc39,629 bytes
  • reference/multi-camera.mddoc18,843 bytes
  • reference/note-spec.mddoc28,898 bytes
  • reference/pipeline.mddoc46,449 bytes
  • reference/segmented-mode.mddoc35,910 bytes
  • requirements-optional.txtdoc1,909 bytes
  • requirements.txtdoc1,438 bytes
  • scripts/_common.pyruns27,665 bytes
  • scripts/_html_safety.pyruns16,114 bytes
  • scripts/_log.pyruns22,469 bytes
  • scripts/_mdpm.pyruns3,909 bytes
  • scripts/_paths.pyruns1,666 bytes
  • scripts/adapters/surya_adapter.pyruns4,383 bytes
  • scripts/asr_gemini_primary.pyruns7,160 bytes
  • scripts/audit_note.pyruns37,249 bytes
  • scripts/batch/add_dhash.pyruns3,035 bytes
  • scripts/batch/audit_segmentation.pyruns20,096 bytes
  • scripts/batch/build_L1.pyruns9,449 bytes
  • scripts/batch/course_timeline.pyruns11,373 bytes
  • scripts/batch/detect_language.pyruns4,045 bytes
  • scripts/batch/detect_language_audio.pyruns4,230 bytes
  • scripts/batch/phi_mask.pyruns2,492 bytes
  • scripts/batch/process_slide_deck.pyruns4,293 bytes
  • scripts/batch/split_L1_by_segment.pyruns4,484 bytes
  • scripts/batch/split_segments.pyruns5,706 bytes
  • scripts/batch/vlm_cache.pyruns11,425 bytes
  • scripts/build_real_words.pyruns4,390 bytes
  • scripts/build_single_talk_web.pyruns14,180 bytes
  • scripts/build_slides_from_images.pyruns22,373 bytes
  • scripts/build_slides_from_pdf.pyruns11,179 bytes
  • scripts/crop_multiup_pdf.pyruns18,804 bytes
  • scripts/dedup_semantic.pyruns18,400 bytes
  • scripts/export_web.pyruns103,867 bytes
  • scripts/extract_slides.pyruns14,608 bytes
  • scripts/finalize_to_vault.pyruns9,081 bytes
  • scripts/flag_asr_suspects.pyruns11,045 bytes
  • scripts/gemini_asr.pyruns26,625 bytes
  • scripts/gpu_check.pyruns23,086 bytes
  • scripts/groq_asr.pyruns9,064 bytes
  • scripts/ground_slides.pyruns17,770 bytes
  • scripts/import_transcript.pyruns17,763 bytes
  • scripts/layout2/viewer.cssasset16,953 bytes
  • scripts/layout2/viewer.jsruns26,890 bytes
  • scripts/make_glossary.pyruns3,306 bytes
  • scripts/media_capture_index.pyruns26,134 bytes
  • scripts/ocr_slides.pyruns887 bytes
  • scripts/ocr_surya.pyruns14,366 bytes
  • scripts/provenance.pyruns13,491 bytes
  • scripts/query_near_field.pyruns3,789 bytes
  • scripts/quick_ocr.pyruns11,877 bytes
  • scripts/render_embeds.pyruns11,574 bytes
  • scripts/retranscribe_segment.pyruns34,113 bytes
  • scripts/route_inputs.pyruns22,182 bytes
  • scripts/test_ct2_teardown.pyruns10,223 bytes
  • scripts/transcribe_video.pyruns55,304 bytes
  • scripts/ts_anchor.pyruns4,600 bytes
  • scripts/vlm_signals.pyruns39,795 bytes
  • scripts/xcorr_media_offsets.pyruns8,036 bytes
  • tests/conftest.pyruns380 bytes
  • tests/fixtures/hostile_course/L2/L2_seg01_hostile.mddoc718 bytes
  • tests/fixtures/hostile_course/L3/L3_seg01_hostile.mddoc1,890 bytes
  • tests/fixtures/hostile_course/_HUB_index.mddoc315 bytes
  • tests/fixtures/hostile_course/_intermediate/seg/segments.jsonasset243 bytes
  • tests/fixtures/hostile_course/_raw/manifest.jsonasset108 bytes
  • tests/fixtures/hostile_course/clips/clip01/slides_grounded.jsonasset319 bytes
  • tests/test_ct2_teardown_suite.pyruns429 bytes
  • tests/test_gemini_asr.pyruns8,799 bytes
  • tests/test_html_safety.pyruns11,257 bytes
  • tests/test_import_transcript.pyruns7,959 bytes
  • tests/test_packaging.pyruns1,048 bytes
  • tests/test_path_containment.pyruns11,705 bytes
  • tests/test_provenance.pyruns6,873 bytes
  • tests/test_route_plan.pyruns4,956 bytes
  • tests/test_sync_leak_scan.pyruns1,667 bytes
  • tests/test_viewer_hostile.pyruns12,128 bytes
  • tools/sync_from_skill.pyruns15,510 bytes
  • tools/templates/ocr_bench_README.mddoc4,220 bytes
Read SKILL.md

# Lecture-to-Notes

Turn a lecture recording (video or audio-only) into structured notes. Every heavy
stage runs locally at 0 Claude tokens; Claude only does the final synthesis. This
page is the map; detail lives in `reference/`, one topic per file.

| File | What is in it |
|---|---|
| `reference/pipeline.md` | Per-stage flags, thresholds, JSON schemas, timeouts, observability |
| `reference/note-spec.md` | Note quality spec, tier scoring, width table, synthesis prompt requirements |
| `reference/segmented-mode.md` | Multi-talk workshop folders → per-segment L2/L3 + Hub + web viewer |
| `reference/multi-camera.md` | One long recording + many phone clips/photos → one timeline |
| `reference/decisions.md` | Post-mortems, benchmarks, wrong turns, VRAM measurements |
View the complete source on GitHub

Skills included

  • lecture-to-notes

Repository facts

License
MIT
Created
Aug 2, 2026
Last pushed
Nov 3, 2026
Forks
26
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 23 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 256 signals by file

.github/workflows/tests.yml

  • Dangerous shell operationline 43
    run: sudo apt-get update && sudo apt-get install -y --no-install-recommends pandoc ffmpeg

CHANGELOG.md

  • Network accessline 3
    All notable changes to this project are documented here. This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
  • Network accessline 4
    [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
  • Network accessline 8
    Follow-up to [issue #1](https://github.com/drpwchen/lecture-to-notes/issues/1):
  • Access to secretsline 121
    [Credential-related source omitted]
  • Network accessline 190
    Follow-up to [issue #1](https://github.com/drpwchen/lecture-to-notes/issues/1)
  • Network accessline 298
    - `VIEWER_VERSION` → `layout2/2026.10.13`. Schema unchanged (still v3); old   pages keep working, re-export to get the hardening. - Stage D's default ollama endpoint is `http://127.0.0.1:11434/api/generate`
  • Network accessline 299
    pages keep working, re-export to get the hardening. - Stage D's default ollama endpoint is `http://127.0.0.1:11434/api/generate`   instead of `localhost` (committed 2026-10-07, first released here): on Windows
  • Network accessline 300
    - Stage D's default ollama endpoint is `http://127.0.0.1:11434/api/generate`
  • Network accessline 670
    (1 line-dup hit, 0 diversity hits; a genuinely looping paragraph lands at   diversity 0.03). *Failure mode reported from batch runs by   [jieyu166/rad-workflow](https://github.com/jieyu166/rad-workflow)'s author
  • Network accessline 671
    diversity 0.03). *Failure mode reported from batch runs by   [jieyu166/rad-workflow](https://github.com/jieyu166/rad-workflow)'s author   (「重複無意義的文字」) — thanks again!*
  • Network accessline 672
    [jieyu166/rad-workflow](https://github.com/jieyu166/rad-workflow)'s author
  • Network accessline 685
    not a device-UI overlay; VLM summaries only for information graphics). Courses   without grounding files export exactly as before. *Idea borrowed from   [jieyu166/rad-workflow](https://github.com/jieyu166/rad-workflow)'s course-hub
  • Network accessline 686
    without grounding files export exactly as before. *Idea borrowed from   [jieyu166/rad-workflow](https://github.com/jieyu166/rad-workflow)'s course-hub   cross-lecture search — thanks!*
  • Network accessline 687
    [jieyu166/rad-workflow](https://github.com/jieyu166/rad-workflow)'s course-hub

README.md

  • Network accessline 3
    [![CI](https://github.com/drpwchen/lecture-to-notes/actions/workflows/secret-scan.yml/badge.svg)](https://github.com/drpwchen/lecture-to-notes/actions/workflows/secret-scan.yml)
  • Access to secretsline 197
    [Credential-related source omitted]
  • Network accessline 220
    GPU pre-flight yet. Reports welcome. - **`ffmpeg` and `ffprobe` on PATH** — not optional. - Optional: [ollama](https://ollama.com) with `minicpm-v:8b` for Stage D slide
  • Network accessline 221
    - **`ffmpeg` and `ffprobe` on PATH** — not optional. - Optional: [ollama](https://ollama.com) with `minicpm-v:8b` for Stage D slide   semantics; a separate venv with [Surya](https://github.com/VikParuchuri/surya)
  • Network accessline 222
    - Optional: [ollama](https://ollama.com) with `minicpm-v:8b` for Stage D slide
  • Network accessline 223
    semantics; a separate venv with [Surya](https://github.com/VikParuchuri/surya)
  • Network accessline 235
    git clone https://github.com/drpwchen/lecture-to-notes
  • Network accessline 271
    The repo is laid out as a [Claude Code](https://claude.com/claude-code) skill:
  • Network accessline 359
    1. [從零開始:安裝、看懂 GitHub、跑起你的第一個工具](https://drpwchen.com/posts/getting-started/)
  • Network accessline 360
    2. [怎麼跟 AI agent 講話:心法、元技能與規則檔](https://drpwchen.com/posts/talking-to-agents/)
  • Network accessline 361
    3. [自動化流程不是設計出來的,是長出來的](https://drpwchen.com/posts/growing-your-workflow/)
  • Network accessline 363
    The story behind this particular tool → [演講影片變成筆記:本機 GPU 轉錄 + 投影片對位](https://drpwchen.com/posts/lecture-to-notes/)
  • Network accessline 364
    [演講影片變成筆記:本機 GPU 轉錄 + 投影片對位](https://drpwchen.com/posts/lecture-to-notes/)
  • Network accessline 366
    Full map of my tools and posts → [drpwchen.com/map](https://drpwchen.com/map/)
  • Network accessline 374
    覺得這個工具有幫助嗎?歡迎[請我喝飲料](https://drpwchen.com/support/) 🧋
  • Network accessline 375
    If this tool helped you, you can [buy me a drink](https://drpwchen.com/en/support/).

README.zh-TW.md

  • Network accessline 3
    [![CI](https://github.com/drpwchen/lecture-to-notes/actions/workflows/secret-scan.yml/badge.svg)](https://github.com/drpwchen/lecture-to-notes/actions/workflows/secret-scan.yml)
  • Access to secretsline 126
    [Credential-related source omitted]
  • Network accessline 151
    git clone https://github.com/drpwchen/lecture-to-notes
  • Network accessline 207
    1. [從零開始:安裝、看懂 GitHub、跑起你的第一個工具](https://drpwchen.com/posts/getting-started/)
  • Network accessline 208
    2. [怎麼跟 AI agent 講話:心法、元技能與規則檔](https://drpwchen.com/posts/talking-to-agents/)
  • Network accessline 209
    3. [自動化流程不是設計出來的,是長出來的](https://drpwchen.com/posts/growing-your-workflow/)
  • Network accessline 211
    這個工具本身的來龍去脈 → [演講影片變成筆記:本機 GPU 轉錄 + 投影片對位](https://drpwchen.com/posts/lecture-to-notes/)
  • Network accessline 212
    [演講影片變成筆記:本機 GPU 轉錄 + 投影片對位](https://drpwchen.com/posts/lecture-to-notes/)
  • Network accessline 214
    所有工具與文章的全貌 → [drpwchen.com/map](https://drpwchen.com/map/)
  • Network accessline 220
    覺得這個工具有幫助嗎?歡迎[請我喝飲料](https://drpwchen.com/support/) 🧋
  • Network accessline 221
    If this tool helped you, you can [buy me a drink](https://drpwchen.com/en/support/).

SKILL.md

  • Broad permissionsline 1
    Read Write Edit Bash Glob Grep Agent

SYNC-LEDGER.md

  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 57
    [Credential-related source omitted]

config.example.yaml

  • Access to secretsline 321
    [Credential-related source omitted]

data/real_acronyms.txt

ocr_bench/README.md

  • Network accessline 74
    # Surya (isolated venv) uv venv /path/to/surya-venv --python 3.12 uv pip install --python /path/to/surya-venv/bin/python torch --index-url https://download.pytorch.org/whl/cu124
  • Network accessline 75
    uv venv /path/to/surya-venv --python 3.12 uv pip install --python /path/to/surya-venv/bin/python torch --index-url https://download.pytorch.org/whl/cu124 uv pip install --python /path/to/surya-venv/bin/python surya-ocr pillow
  • Network accessline 76
    uv pip install --python /path/to/surya-venv/bin/python torch --index-url https://download.pytorch.org/whl/cu124

ocr_bench/adapters/paddleocr_vl_adapter.py

  • Executable scriptline 1
    Executable file

ocr_bench/adapters/rapidocr_adapter.py

  • Executable scriptline 1
    Executable file

ocr_bench/report.py

  • Executable scriptline 1
    Executable file

ocr_bench/run_bench.py

  • Executable scriptline 1
    Executable file

ocr_bench/schema.py

  • Executable scriptline 1
    Executable file

pyproject.toml

  • Network accessline 47
    [project.urls] Homepage = "https://github.com/drpwchen/lecture-to-notes"
  • Network accessline 48
    Homepage = "https://github.com/drpwchen/lecture-to-notes"
  • Network accessline 49
    Changelog = "https://github.com/drpwchen/lecture-to-notes/blob/main/CHANGELOG.md"
  • Network accessline 50
    Issues = "https://github.com/drpwchen/lecture-to-notes/issues"

requirements-optional.txt

  • Network accessline 11
    #     uv venv /path/to/surya-venv --python 3.12 #     uv pip install --python /path/to/surya-venv/bin/python \ #         torch --index-url https://download.pytorch.org/whl/cu124
  • Network accessline 12
    #     uv pip install --python /path/to/surya-venv/bin/python \ #         torch --index-url https://download.pytorch.org/whl/cu124 #     uv pip install --python /path/to/surya-venv/bin/python surya-ocr pillow
  • Network accessline 13
    #         torch --index-url https://download.pytorch.org/whl/cu124

scripts/_common.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 144
    [Credential-related source omitted]
  • Access to secretsline 254
    [Credential-related source omitted]
  • Access to secretsline 331
    [Credential-related source omitted]
  • Access to secretsline 365
    [Credential-related source omitted]
  • Access to secretsline 408
    [Credential-related source omitted]

scripts/_html_safety.py

  • Executable scriptline 1
    Executable file

scripts/_log.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 225
    [Credential-related source omitted]
  • Access to secretsline 226
    [Credential-related source omitted]
  • Access to secretsline 548
    [Credential-related source omitted]
  • Access to secretsline 549
    [Credential-related source omitted]

scripts/_mdpm.py

  • Executable scriptline 1
    Executable file

scripts/_paths.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]

scripts/adapters/surya_adapter.py

  • Executable scriptline 1
    Executable file

scripts/asr_gemini_primary.py

  • Executable scriptline 1
    Executable file

scripts/audit_note.py

  • Executable scriptline 1
    #!/usr/bin/env python
  • Access to secretsline 752
    [Credential-related source omitted]

scripts/batch/add_dhash.py

  • Executable scriptline 1
    Executable file

scripts/batch/audit_segmentation.py

  • Executable scriptline 1
    Executable file

scripts/batch/build_L1.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/batch/course_timeline.py

  • Executable scriptline 1
    Executable file

scripts/batch/detect_language.py

  • Executable scriptline 1
    Executable file

scripts/batch/detect_language_audio.py

  • Executable scriptline 1
    Executable file

scripts/batch/phi_mask.py

  • Executable scriptline 1
    Executable file

scripts/batch/process_slide_deck.py

  • Executable scriptline 1
    Executable file

scripts/batch/split_L1_by_segment.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/batch/split_segments.py

  • Executable scriptline 1
    Executable file

scripts/batch/vlm_cache.py

  • Executable scriptline 1
    Executable file

scripts/build_real_words.py

  • Executable scriptline 1
    Executable file

scripts/build_single_talk_web.py

  • Executable scriptline 1
    Executable file

scripts/build_slides_from_images.py

  • Executable scriptline 1
    Executable file

scripts/build_slides_from_pdf.py

  • Executable scriptline 1
    Executable file

scripts/crop_multiup_pdf.py

  • Executable scriptline 1
    Executable file

scripts/dedup_semantic.py

  • Executable scriptline 1
    Executable file

scripts/export_web.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 1490
    [Credential-related source omitted]

scripts/extract_slides.py

  • Executable scriptline 1
    Executable file

scripts/finalize_to_vault.py

  • Executable scriptline 1
    Executable file

scripts/flag_asr_suspects.py

  • Executable scriptline 1
    Executable file

scripts/gemini_asr.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 86
    [Credential-related source omitted]
  • Access to secretsline 87
    [Credential-related source omitted]
  • Network accessline 88
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Network accessline 89
    if not k:         raise RuntimeError("GEMINI_API_KEY is not set: create a key at https://aistudio.google.com/apikey "                            "and export it, or use --via agy")
  • Network accessline 90
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 97
    [Credential-related source omitted]
  • Network accessline 118
    body = {"contents": [{"parts": [{"inline_data": {"mime_type": "audio/mp3", "data": base64.b64encode(audio).decode()}},                                     {"text": prompt}]}], "generationConfig": {"temperature": 0}}     req = urllib.request
  • Network accessline 119
    {"text": prompt}]}], "generationConfig": {"temperature": 0}}     req = urllib.request.Request(f"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",                                  data=json.dumps(body).encode(
  • Network accessline 120
    req = urllib.request.Request(f"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",
  • Network accessline 124
    while True:         try:             d = json.load(urllib.request.urlopen(req, timeout=900))
  • Network accessline 125
    try:             d = json.load(urllib.request.urlopen(req, timeout=900))             break
  • Network accessline 126
    d = json.load(urllib.request.urlopen(req, timeout=900))
  • Dangerous shell operationline 156
    f"rm -f /tmp/agy_asr_{tag}.txt\n")
  • Access to secretsline 212
    [Credential-related source omitted]
  • Access to secretsline 254
    [Credential-related source omitted]

scripts/gpu_check.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 80
    [Credential-related source omitted]

scripts/groq_asr.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 26
    [Credential-related source omitted]
  • Network accessline 37
    GROQ_ENDPOINT = "https://api.groq.com/openai/v1/audio/transcriptions"
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 107
    with open(chunk_path, "rb") as fh:         resp = requests.post(
  • Network accessline 108
    resp = requests.post(
  • Access to secretsline 142
    [Credential-related source omitted]
  • Network accessline 146
    raise RuntimeError(             "No usable Groq API key. Set the GROQ_API_KEY environment variable "             "(get one at https://console.groq.com/keys), or use the local "
  • Network accessline 147
    [Credential-related source omitted]
  • Access to secretsline 147
    [Credential-related source omitted]
  • Network accessline 148
    "(get one at https://console.groq.com/keys), or use the local "

scripts/ground_slides.py

  • Executable scriptline 1
    Executable file

scripts/import_transcript.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 151
    text = text.lstrip("<U+FEFF>")
  • Possible obfuscationline 239
    h = head.lstrip("<U+FEFF>").lstrip()

scripts/layout2/viewer.js

  • Executable scriptline 1
    Executable file

scripts/make_glossary.py

  • Executable scriptline 1
    Executable file

scripts/media_capture_index.py

  • Executable scriptline 1
    Executable file

scripts/ocr_slides.py

  • Executable scriptline 1
    Executable file

scripts/ocr_surya.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 85
    [Credential-related source omitted]

scripts/provenance.py

  • Executable scriptline 1
    Executable file

scripts/query_near_field.py

  • Executable scriptline 1
    Executable file

scripts/quick_ocr.py

  • Executable scriptline 1
    Executable file

scripts/render_embeds.py

  • Executable scriptline 1
    Executable file

scripts/retranscribe_segment.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 282
    [Credential-related source omitted]
  • Access to secretsline 767
    [Credential-related source omitted]

scripts/route_inputs.py

  • Executable scriptline 1
    Executable file

scripts/test_ct2_teardown.py

  • Executable scriptline 1
    Executable file

scripts/transcribe_video.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 710
    [Credential-related source omitted]
  • Access to secretsline 792
    [Credential-related source omitted]
  • Access to secretsline 797
    [Credential-related source omitted]
  • Access to secretsline 974
    [Credential-related source omitted]
  • Access to secretsline 1057
    [Credential-related source omitted]
  • Access to secretsline 1125
    [Credential-related source omitted]

scripts/ts_anchor.py

  • Executable scriptline 1
    Executable file

scripts/vlm_signals.py

  • Executable scriptline 1
    Executable file
  • Network accessline 43
    Environment:     OLLAMA_URL      full generate endpoint (default http://127.0.0.1:11434/api/generate)
  • Network accessline 44
    OLLAMA_URL      full generate endpoint (default http://127.0.0.1:11434/api/generate)
  • Network accessline 86
    [Credential-related source omitted]
  • Access to secretsline 86
    [Credential-related source omitted]
  • Access to secretsline 225
    [Credential-related source omitted]
  • Network accessline 281
    resp = requests.post(OLLAMA_URL, json=payload,
  • Network accessline 351
    "options": options,     }     resp = requests.post(OLLAMA_URL, json=payload,
  • Network accessline 352
    }     resp = requests.post(OLLAMA_URL, json=payload,                          timeout=(connect_timeout, inference_timeout))
  • Network accessline 353
    resp = requests.post(OLLAMA_URL, json=payload,
  • Network accessline 800
    if args.save_every > 0 and (idx + 1) % args.save_every == 0:                 partial = list(results)                 for nc in non_canonical:
  • Network accessline 801
    partial = list(results)                 for nc in non_canonical:                     nc_copy = dict(nc)
  • Network accessline 802
    for nc in non_canonical:

scripts/xcorr_media_offsets.py

  • Executable scriptline 1
    Executable file

tests/conftest.py

  • Executable scriptline 1
    Executable file

tests/fixtures/hostile_course/L2/L2_seg01_hostile.md

  • Possible obfuscationline 12
    - `(V1 00:30)` Unicode:<U+202E>RTL override<U+202C>、零寬<U+200B>字元、行分隔 [

tests/fixtures/hostile_course/L3/L3_seg01_hostile.md

  • Network accessline 17
    - 大小寫空白 <a href="  JaVaScRiPt:window.__pwned='mixed'">mixed case</a> - data URL <img src="data:image/svg+xml,%3Csvg onload=alert(1)%3E"> - 外部追蹤 <img src="https://tracker.example/pixel.gif"> 與 <img src="//tracker.example/p.gif">
  • Network accessline 18
    - data URL <img src="data:image/svg+xml,%3Csvg onload=alert(1)%3E"> - 外部追蹤 <img src="https://tracker.example/pixel.gif"> 與 <img src="//tracker.example/p.gif"> - 跳脫路徑 <img src="../../../secret.png"> 與 <img src="..%2f..%2fsecret.png">
  • Network accessline 19
    - 外部追蹤 <img src="https://tracker.example/pixel.gif"> 與 <img src="//tracker.example/p.gif">
  • Network accessline 21
    - SVG <svg onload="window.__pwned='svg'"><circle r="1"/></svg> - iframe <iframe src="javascript:window.__pwned='iframe'"></iframe> - object <object data="https://evil.example/x.swf"></object><embed src="https://evil.example/y">
  • Network accessline 22
    - iframe <iframe src="javascript:window.__pwned='iframe'"></iframe> - object <object data="https://evil.example/x.swf"></object><embed src="https://evil.example/y"> - form <form action="https://evil.example/collect"><input name="q"><button>
  • Network accessline 23
    - object <object data="https://evil.example/x.swf"></object><embed src="https://evil.example/y">
  • Network accessline 24
    - form <form action="https://evil.example/collect"><input name="q"><button>送出</button></form>
  • Network accessline 25
    - base <base href="https://evil.example/">
  • Network accessline 26
    - meta <meta http-equiv="refresh" content="0;url=https://evil.example">
  • Network accessline 27
    - style <style>body{background:url(https://tracker.example/css)}</style>
  • Network accessline 28
    - inline style <span style="color: red; background:url(https://tracker.example/y)">紅字</span>

tests/test_ct2_teardown_suite.py

  • Executable scriptline 1
    Executable file

tests/test_gemini_asr.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]

tests/test_html_safety.py

  • Executable scriptline 1
    Executable file
  • Network accessline 62
    '<svg onload="alert(1)"><circle r="1"/></svg>',     '<iframe src="javascript:alert(1)"></iframe>',     '<object data="https://evil.example/x.swf"></object>',
  • Network accessline 63
    '<iframe src="javascript:alert(1)"></iframe>',     '<object data="https://evil.example/x.swf"></object>',     '<embed src="https://evil.example/y">',
  • Network accessline 64
    '<object data="https://evil.example/x.swf"></object>',
  • Network accessline 65
    '<embed src="https://evil.example/y">',
  • Network accessline 66
    '<form action="https://evil.example"><input name="q"><button>go</button></form>',
  • Network accessline 67
    '<base href="https://evil.example/">',
  • Network accessline 68
    '<meta http-equiv="refresh" content="0;url=https://evil.example">',
  • Network accessline 69
    '<link rel="stylesheet" href="https://evil.example/a.css">',
  • Network accessline 70
    "<style>body{background:url(https://tracker.example/c)}</style>",
  • Network accessline 71
    '<span style="background:url(https://tracker.example/y)">x</span>',
  • Network accessline 77
    '<a href="data:text/html,<script>alert(1)</script>">x</a>',     '<img src="data:image/svg+xml,%3Csvg onload=alert(1)%3E">',     '<img src="https://tracker.example/pixel.gif">',
  • Network accessline 78
    '<img src="data:image/svg+xml,%3Csvg onload=alert(1)%3E">',     '<img src="https://tracker.example/pixel.gif">',     '<img src="//tracker.example/pixel.gif">',
  • Network accessline 79
    '<img src="https://tracker.example/pixel.gif">',
  • Network accessline 134
    def test_mailto_http_fragment_links_kept():     for href in ("https://example.org/a?b=1", "http://example.org", "mailto:a@b.c",
  • Network accessline 135
    for href in ("https://example.org/a?b=1", "http://example.org", "mailto:a@b.c",
  • Network accessline 220
    @pytest.mark.parametrize("u", [     "", "   ", "javascript:alert(1)", "JAVASCRIPT:x", " java\nscript:x", "data:image/png;base64,AA",     "https://x.example/a.png", "//x.example/a.png", "/abs.png", "\\\\server\\share\\a.png",
  • Network accessline 221
    "", "   ", "javascript:alert(1)", "JAVASCRIPT:x", " java\nscript:x", "data:image/png;base64,AA",     "https://x.example/a.png", "//x.example/a.png", "/abs.png", "\\\\server\\share\\a.png",     "C:/x.png", "c|/x.png", "C|\\x.png", "file:///e
  • Network accessline 222
    "https://x.example/a.png", "//x.example/a.png", "/abs.png", "\\\\server\\share\\a.png",
  • Network accessline 231
    assert is_safe_relative_url("../video/x.mp4", allow_parent=True)     assert not is_safe_relative_url("../video/x.mp4")     assert not is_safe_relative_url("https://x/a.mp4", allow_parent=True)
  • Network accessline 233
    assert not is_safe_relative_url("https://x/a.mp4", allow_parent=True)

tests/test_import_transcript.py

  • Executable scriptline 1
    Executable file

tests/test_packaging.py

  • Executable scriptline 1
    Executable file

tests/test_path_containment.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 205
    [Credential-related source omitted]
  • Access to secretsline 206
    [Credential-related source omitted]
  • Access to secretsline 219
    [Credential-related source omitted]

tests/test_provenance.py

  • Executable scriptline 1
    Executable file

tests/test_route_plan.py

  • Executable scriptline 1
    Executable file

tests/test_sync_leak_scan.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 21
    [Credential-related source omitted]

tests/test_viewer_hostile.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 31
    [Credential-related source omitted]
  • Possible obfuscationline 45
    + chunk(b"IDAT", zlib.compress(b"\x00\xff\x00\x00"))
  • Network accessline 261
    injected = ('<script>window.__pwned="inline"</script>'                 '<img src="x" onerror="window.__pwned=\'onerror\'">'                 '<img src="https://tracker.example/p.gif">')
  • Network accessline 262
    '<img src="x" onerror="window.__pwned=\'onerror\'">'                 '<img src="https://tracker.example/p.gif">')     page_html = exported["page"].replace('<div class="app-v3"', injected + '<div class="app-v3"', 1)
  • Network accessline 263
    '<img src="https://tracker.example/p.gif">')

tools/sync_from_skill.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 74
    [Credential-related source omitted]
  • Access to secretsline 87
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Access to secretsline 112
    [Credential-related source omitted]
  • Access to secretsline 114
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Network accessline 116
    [Credential-related source omitted]
  • Access to secretsline 116
    [Credential-related source omitted]
  • Network accessline 117
    '    if not k:\n'     '        raise RuntimeError("GEMINI_API_KEY is not set: create a key at https://aistudio.google.com/apikey "\n'     '                           "and export it, or use --via agy")\n'
  • Network accessline 118
    [Credential-related source omitted]
  • Access to secretsline 118
    [Credential-related source omitted]
  • Access to secretsline 126
    [Credential-related source omitted]

tools/templates/ocr_bench_README.md

  • Network accessline 74
    # Surya (isolated venv) uv venv /path/to/surya-venv --python 3.12 uv pip install --python /path/to/surya-venv/bin/python torch --index-url https://download.pytorch.org/whl/cu124
  • Network accessline 75
    uv venv /path/to/surya-venv --python 3.12 uv pip install --python /path/to/surya-venv/bin/python torch --index-url https://download.pytorch.org/whl/cu124 uv pip install --python /path/to/surya-venv/bin/python surya-ocr pillow
  • Network accessline 76
    uv pip install --python /path/to/surya-venv/bin/python torch --index-url https://download.pytorch.org/whl/cu124

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 5 facts
  • Contacts aistudio.google.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/gemini_asr.py:90High confidence
  • Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/gemini_asr.py:120High confidence
  • Contacts api.groq.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/groq_asr.py:37High confidence
  • Contacts console.groq.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/groq_asr.py:148High confidence
  • Contacts aistudio.google.com, which SKILL.md, the README and the plugin manifest do not mentiontools/sync_from_skill.py:118High confidence
Signal confidence: 250 facts

and 200 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.