@jamestesting888/tum-mcp 0.9.5 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,72 @@
1
1
  # Changes
2
2
 
3
+ ## 0.11.0 — 2026-10-28
4
+
5
+ - Add the base `prepare-exams` workflow and the local **Exam Prep** workspace: a
6
+ cheatsheet with a semester map you can pan, zoom and open full screen, exam patterns
7
+ with solving workflows and a worked practice question each, guided past papers, and
8
+ practice exams with a solution under every question. Statistics, map layout,
9
+ blueprint and novelty checks are derived by code. Exam Prep is never published.
10
+ - Add `tum-mcp study exam-report`, `study text` (page text extracted once per file),
11
+ `study import` (private local files such as past exams you hold) and
12
+ `study duplicates` (identical and near-duplicate copies across Moodle, Artemis,
13
+ Studocu and local files); `study inspect` lists identical copies.
14
+ - Students answer on paper. Only multiple-choice answers are checked; every other step
15
+ offers Compare, which shows one answer, its explanation and a hint for the likeliest
16
+ mistake. Exercises no longer show answer boxes, review buttons or status lines;
17
+ finishing an exercise marks it completed in the outline.
18
+ - Exercises gain code-writing steps that open the function skeleton in an editor and
19
+ show the model answer as code, numbered code blocks and distilled practice for large
20
+ programming tasks; prepare-exercises documents how to distil Artemis programming
21
+ exercises. Text and numeric checks hold a single answer, and authors are told to give
22
+ every question the context its answers use.
23
+ - Authored questions must show code, a diagram, a formula, a table or a plot beside
24
+ their text, and their first sentence says what the student produces. A new `uml`
25
+ block draws UML class, sequence and state diagrams in every workspace, and
26
+ `` `code` `` in text renders as inline code.
27
+ - Code is syntax-highlighted in blocks, editors and model answers. A new `files` block
28
+ shows a small project with a file tree, tabs and editable files kept in the browser;
29
+ steps point at file lines with an "Open in files" jump, code-writing steps edit
30
+ the project file they point at, and the file tree folds away. Distilled exercises no
31
+ longer carry concept tags. Code blocks can carry a step-by-step walkthrough, and
32
+ prepare-study asks for examples shown as a diagram or walkthrough, not only told.
33
+ - Right-click (or Shift+F10) any sidebar entry to mark it completed.
34
+ - A page whose sections all cite the same sources shows one citation beside its title
35
+ line, and a cheatsheet section whose entries share sources cites them once; exam
36
+ pages mention past exams only when there are some. Lines that only described a page
37
+ or told students to compare (such as the Exam Prep summary) are gone, and the skills
38
+ ask for text that teaches.
39
+ - A new `tree` block draws hierarchies such as file structures, object trees and call
40
+ trees with icons, connector lines and optional notes.
41
+ - Cheatsheet entries show their recognition cue and pitfall as labelled rows with icons;
42
+ the semester map has an icon toolbar and an in-canvas legend.
43
+ - Give every skill a Codex display name, so Codex no longer shows "Tum MCP:" prefixes.
44
+ - Pages no longer wait for the local video index; the video panel appears once it loads,
45
+ so a slow preview server cannot drop it.
46
+ - Pages no longer over-scroll: hidden labels cannot stretch the page, and the space that
47
+ keeps step arrows in place goes once you scroll back up.
48
+
49
+ ## 0.10.0 — 2026-10-27
50
+
51
+ - Add the optional `video-notes` extension (`tum-mcp install video-notes`): short
52
+ narrated, animated explainers from prepared Study topics, one per selected topic,
53
+ under the course's `videos/` folder. The skill plans storyboards from the prepared
54
+ content only; `tum-mcp video-notes` checks storyboards, measures narration, renders
55
+ with a pinned Manim/Typst runtime installed on first use, verifies sync, loudness,
56
+ captions and layout, and publishes with receipts, archives and crash recovery.
57
+ - Play published videos in the local app above each topic's Content, with chapters,
58
+ captions, a transcript and a notice when the topic changed after the video was made.
59
+ Hosted study sites never request or include videos.
60
+ - Keep extension selections forward compatible: unknown on/off settings from newer
61
+ releases are preserved, and the video setting is only written when enabled.
62
+ - Use NVIDIA GPUs for Prepare Lecture recognition on Windows x64 and Linux/WSL x86_64.
63
+ `auto` selects CUDA for a CUDA 12 GPU of compute capability 7.0+, adds a pinned cuBLAS to
64
+ the runtime (no CUDA toolkit or cuDNN), checks the GPU during installation and
65
+ otherwise stays on CPU int8. `TUM_MCP_LECTURE_ENGINE` also accepts `cuda`.
66
+ - Document the eSpeak data path limit that breaks local Kokoro on macOS in Audio Notes.
67
+ - Keep the local course app loading on Windows: the preview server now queues the
68
+ app's burst of parallel module requests instead of refusing all but five.
69
+
3
70
  ## 0.9.5 — 2026-10-27
4
71
 
5
72
  - Simplify the course project overview wording.
package/README.md CHANGED
@@ -30,6 +30,7 @@ submissions, posting and exercise execution are unavailable.
30
30
  | `sync-course` | “Set up a project for this course and collect its materials.” |
31
31
  | `prepare-study` | “Build lessons, flashcards and practice in a study website.” |
32
32
  | `prepare-exercises` | “Add guided exercises from this week's released sheet.” |
33
+ | `prepare-exams` | “Make a cheatsheet and practice exams from the past papers.” |
33
34
  | `publish-course` | “Publish my reviewed study site for phone access.” |
34
35
 
35
36
  Each project holds one course. Run `tum-mcp study` in its folder to open the app.
@@ -51,12 +52,14 @@ Run `tum-mcp install` to choose extensions, then reload your client.
51
52
  | `lecture` | `prepare-lecture` | Lecture Notes with the professor's extra explanations, timestamps and selected critical visuals. Prefers transcripts and slides; local recognition is optional. |
52
53
  | `studocu` | `sync-studocu` | Search and collect selected supplementary PDFs saved in your browser. Personal use only; excluded from published sites. |
53
54
  | `audio-notes` | `audio-notes` | Turn prepared Study lessons into concise audio tracks, with resumable generation and coverage tracking. Voice setup happens when used. |
55
+ | `video-notes` | `video-notes` | Turn prepared Study topics into short narrated, animated explainers that play inside the local app, with checked sync, captions and layout. The render runtime installs when first used. |
54
56
 
55
57
  Use `tum-mcp doctor` to see installed workflows and `tum-mcp uninstall` to remove
56
58
  them.
57
59
 
58
60
  [Lecture and recognition](docs/lecture-notes.md) ·
59
- [Studocu collection](docs/study.md#studocu-materials) · [Setup details](docs/setup.md)
61
+ [Studocu collection](docs/study.md#studocu-materials) ·
62
+ [Video Notes](docs/study.md#create-and-maintain-video-notes) · [Setup details](docs/setup.md)
60
63
 
61
64
  ## Course project
62
65
 
@@ -67,13 +70,15 @@ course/
67
70
  AGENTS.md Course instructions and inventory
68
71
  materials/ Course content, exams, exercises and other sources
69
72
  studocu/ Optional: summaries/, exams/ and other/ PDFs
70
- app/ Study, Exercises and optional Lecture Notes website
73
+ app/ Study, Exercises, Exam Prep and optional Lecture Notes website
71
74
  content.json Study lessons, flashcards and practice
72
75
  exercises.json Guided exercise content
76
+ exam.json Exam Prep: cheatsheet, exam patterns, practice exams (local only)
73
77
  lectures.json Optional: Lecture Notes
74
78
  lecture-assets/ Optional: selected lecture figures
75
79
  .tum-mcp/ Private course state, comments and lecture evidence
76
80
  audio/ Optional: scripts, tracks and chapters for Audio Notes
81
+ videos/ Optional: storyboards, scenes and explainer videos for Video Notes
77
82
  ```
78
83
 
79
84
  ## Privacy, updates and removal
@@ -70,6 +70,9 @@ Desktop jobs additionally install the optional hash-locked CPU recognizer and
70
70
  transcribe the synthetic speech fixture; supported Apple Silicon runners also
71
71
  exercise MLX. This explicit test downloads public pinned model files, never campus
72
72
  recordings. Ordinary test runs skip it unless `TUM_MCP_LECTURE_ASR_INTEGRATION=1`.
73
+ Linux and Windows jobs also install the hash-locked CUDA runtime and load its pinned
74
+ cuBLAS the way CTranslate2 does, without a GPU (`TUM_MCP_LECTURE_CUDA_LIBRARIES=1`);
75
+ GPU inference itself runs in the native test only on a host with an NVIDIA GPU.
73
76
  Recognition runs before package lifecycle checks to expose native dependency
74
77
  failures early. Windows also runs the affected browser/UTF-8 fixture checks first.
75
78
  Its complete job budget is 35 minutes for native ACL and subprocess coverage;
@@ -105,7 +108,10 @@ tag and artifact integrity before pushing the release documentation.
105
108
  | `src/tum_mcp/credentials.py`, `transport.py`, `settings.py` | Shared campus credential vault, HTTP transport and account policy |
106
109
  | `src/tum_mcp/client_*.py` | Host-specific configuration and managed skill installation |
107
110
  | `src/tum_mcp/study_*.py` | Course snapshots, teaching, build, preview and project-local passage comments |
108
- | `src/tum_mcp/bundled/skills/` | Canonical versioned source of reading, study and audio skills and their references/assets |
111
+ | `src/tum_mcp/bundled/skills/` | Canonical versioned source of reading, study, audio and video skills and their references/assets |
112
+ | `src/tum_mcp/exam_*.py` | Exam Prep contracts, derived statistics, report and map layout; never published |
113
+ | `src/tum_mcp/study_text.py`, `study_import.py`, `study_duplicates.py` | Page-text cache, private local imports and cross-provider duplicate reports |
114
+ | `src/tum_mcp/video_*.py`, `bundled/video_runtime/` | Video Notes contracts, lint, media checks, orchestration and the isolated render worker |
109
115
  | `npm/` | Private-runtime installation, updates, integrity and cleanup |
110
116
  | `tests/` | Synthetic backend, package and owned-browser checks |
111
117
 
@@ -147,9 +153,24 @@ session reuse. Automated synthetic sign-in does not certify human SSO on every O
147
153
  For UI changes, exercise the generated app at narrow/wide widths in both themes;
148
154
  check keyboard navigation, reduced motion, source links and retained progress.
149
155
 
156
+ ## Optional Video Notes runtime
157
+
158
+ `install video-notes` only selects the workflow. `tum-mcp video-notes runtime install`
159
+ creates a uv venv per lock under the data directory from
160
+ `bundled/video_runtime/requirements.lock` (universal, hash-pinned). Everything is a
161
+ wheel except `pycairo`, `manimpango` and `srt`, which build from hashed sources; the
162
+ locked `pkgconf` wheel is installed first and provides `pkg-config`. Regenerate the
163
+ lock with the command in its header. Helper code (`vnotes/`, `worker.py`, fonts) runs
164
+ from the package, so changing it never reinstalls the runtime; it does change the
165
+ render profile and therefore the chapter cache. Default tests use a fake worker and
166
+ the synthetic media in `tests/fixtures/video/` (`generate.py` recreates them). Set
167
+ `TUM_MCP_VIDEO_RENDER_INTEGRATION=1` to install the real runtime into a temporary
168
+ data directory and render, mix, check and publish a synthetic video; the browser
169
+ playback tests also run WebKit when Playwright's WebKit is installed.
170
+
150
171
  ## Optional Lecture extension
151
172
 
152
- Base setup exposes five workflows and no `tum_live_*` tools. `install lecture`
173
+ Base setup exposes six workflows and no `tum_live_*` tools. `install lecture`
153
174
  records explicit selection, refreshes managed clients and provisions the optional
154
175
  recognizer only when requested/supported. `--no-asr` keeps captions/imported WebVTT.
155
176
  Heavy recognition dependencies and model weights stay outside the base environment
@@ -64,8 +64,9 @@ revision-pinned public model weights; neither is part of the base runtime.
64
64
  | Apple Silicon macOS 15+ | MLX acceleration by default |
65
65
  | Apple Silicon macOS 14 | CPU int8 |
66
66
  | Intel macOS 13+ | CPU int8 |
67
- | Windows x64 | CPU int8; Microsoft Visual C++ runtime required |
68
- | Linux/WSL x86_64 or ARM64, glibc 2.28+ | CPU int8 |
67
+ | Windows x64 | NVIDIA CUDA when a GPU is detected, otherwise CPU int8; Microsoft Visual C++ runtime required |
68
+ | Linux/WSL x86_64, glibc 2.28+ | NVIDIA CUDA when a GPU is detected, otherwise CPU int8 |
69
+ | Linux ARM64, glibc 2.28+ | CPU int8 |
69
70
 
70
71
  Native Windows ARM64, 32-bit systems and musl Linux have no supported locked
71
72
  runtime. Use captions/imported WebVTT there. CPU inference requires compatible
@@ -80,9 +81,20 @@ video frames. They are unnecessary for imported captions and cached text.
80
81
  `lecture runtime status` reports the selected engine and missing prerequisites.
81
82
  Use `lecture runtime install` to retry after fixing a prerequisite. Advanced users
82
83
  can set `TUM_MCP_LECTURE_ENGINE=cpu` consistently for installation and preparation
83
- to bypass Metal; the default `auto` retains existing MLX runtimes and model caches.
84
+ to bypass Metal or CUDA; the default `auto` retains existing MLX runtimes and model caches.
84
85
  An engine switch uses separate caches. No cloud transcription API is configured.
85
86
 
87
+ On Windows x64 and Linux/WSL x86_64, `auto` uses an NVIDIA GPU of compute capability
88
+ 7.0 or newer (GTX 16, RTX 20 series and later) when its driver supports CUDA 12
89
+ (driver 525 or newer); older GPUs stay on CPU. Only the driver is needed: the runtime
90
+ adds a pinned cuBLAS (about 600 MB) and decodes in float16, without a CUDA toolkit
91
+ or cuDNN. Installation first creates a cuBLAS handle on the GPU. If that fails,
92
+ automatic selection records it (`lecture-runtime/cuda-unusable.json` in the data
93
+ directory) and installs the CPU runtime instead, so `tum-mcp update` keeps working.
94
+ After a driver fix, `TUM_MCP_LECTURE_ENGINE=cuda tum-mcp lecture runtime install`
95
+ retries and, on success, clears that record. `cuda` never falls back silently;
96
+ `lecture runtime status` shows when a GPU was declined.
97
+
86
98
  CPU decoding uses int8, one worker and at most four threads. It consumes the full
87
99
  retained audio, with word timestamps and no VAD retiming. ASR remains fallible,
88
100
  especially for names and notation; compare important wording with slides and the
package/docs/setup.md CHANGED
@@ -38,6 +38,15 @@ Audio Notes is optional: use `tum-mcp install audio-notes`. It adds the
38
38
  `audio-notes` skill for prepared Study content; synthesis is set up when used.
39
39
  Existing course audio is retained when the extension is disabled.
40
40
 
41
+ Video Notes is optional: use `tum-mcp install video-notes`. It adds the
42
+ `video-notes` skill and the `tum-mcp video-notes` commands for prepared Study content.
43
+ Its render runtime (about 320 MB) installs on first use; `tum-mcp video-notes runtime
44
+ status` lists any prerequisite (macOS: `brew install cairo`; Linux/WSL: Cairo and
45
+ Pango development packages and a C compiler) without installing it. Course videos are
46
+ retained when the extension is disabled. Clients pinned to a runtime generation older
47
+ than this release cannot read the enabled Video Notes setting and would hide Studocu
48
+ tools; refresh them with `tum-mcp update` or `setup --client NAME`.
49
+
41
50
  ## Terminal output
42
51
 
43
52
  `tum-mcp doctor` is the overview for saved connections, optional extensions,
@@ -229,7 +238,8 @@ protected. `--forget-credentials` removes saved local credentials and session
229
238
  keys; it does not revoke remote credentials. Settings, custom skills, course
230
239
  cache, downloads and assignment work are retained by these commands.
231
240
  No command recursively deletes the campus
232
- data root. Course audio and optional shared speech models/runtimes also remain.
241
+ data root. Course audio and videos, the optional video render runtime and shared
242
+ speech models/runtimes also remain.
233
243
  Remove a shared speech cache only when explicitly requested and no other course
234
244
  needs it; its host paths are documented in the audio skill. If removal is
235
245
  interrupted, run `tum-mcp setup --client NAME` to recover before reuse.
package/docs/study.md CHANGED
@@ -1,14 +1,15 @@
1
1
  # Course study projects
2
2
 
3
- Five base skills cover source reading, course sync, Study preparation, Exercises
4
- preparation and publishing. They run in your local agent, using the connected
3
+ Six base skills cover source reading, course sync, Study preparation, Exercises
4
+ preparation, exam preparation and publishing. They run in your local agent, using the connected
5
5
  MCP tools to read course sources. The CLI validates and stores the resulting local
6
6
  files; it does not run an AI model.
7
7
  The optional `prepare-lecture` skill adds a Lecture Notes workspace; install it with
8
8
  `tum-mcp install lecture`. See [Lecture Notes](lecture-notes.md).
9
9
  The optional `sync-studocu` skill collects selected student-uploaded material separately.
10
10
  The optional `audio-notes` skill turns prepared lessons into spoken tracks; install
11
- it with `tum-mcp install audio-notes`.
11
+ it with `tum-mcp install audio-notes`. The optional `video-notes` skill turns prepared
12
+ topics into short narrated explainer videos; install it with `tum-mcp install video-notes`.
12
13
 
13
14
  ## Start with one course
14
15
 
@@ -39,10 +40,12 @@ pse-ws26/
39
40
  course.md Cited course structure, logistics, rules and unknowns
40
41
  state.json Course binding, source versions and coverage
41
42
  notes/ Detailed course/agent notes when needed
42
- app/ Shared Study, Exercises and optional Lecture Notes website
43
+ app/ Shared Study, Exercises, Exam Prep and optional Lecture Notes website
43
44
  content.json Optional source-backed Study content
44
45
  exercises.json Optional prepared exercise guidance
46
+ exam.json Optional Exam Prep content (local only)
45
47
  audio/ Optional category audio derived from the prepared website
48
+ videos/ Optional explainer videos derived from the prepared website
46
49
  ```
47
50
 
48
51
  `AGENTS.md` retains user rules and points agents to `.tum-mcp/course.md`. That short
@@ -181,22 +184,54 @@ at the bottom of the outline switches between them and remembers your place; on
181
184
  it sits inside the open outline. The exercise list groups exercises by sheet and shows
182
185
  each sheet's summary and due date when the sources provide them.
183
186
 
184
- Each exercise shows the original statement and subparts first. Work on paper or in
185
- the app, open the worked solution directly, or open **Guidance** for the exercise's
186
- goals and one step at a time with optional hints and specific feedback. Checks cover
187
- numbers with units and tolerance, multiple choice, fillable tables, graph selections
188
- and paths, and plotted sample points. Long math and programming work use saved drafts
189
- and prepared rubrics; code is never executed, and symbolic work, proofs and programs
190
- are not graded automatically. Mark an exercise reviewed when you are done; Reviewed
191
- records an action, not mastery or an assessment result. A Next link leads to the
192
- following exercise.
193
-
194
- Drafts and assistance stay in this browser. Editing a checked answer clears its
195
- verdict. Semantic changes start fresh progress for only that exercise, while retaining older
187
+ Each exercise shows the original statement and subparts first. Work on paper, open the
188
+ worked solution directly, or open **Guidance** for the exercise's goals and one step at
189
+ a time with optional hints. Multiple-choice steps are checked; for every other step you
190
+ work on paper and press **Compare** to see the answer, its explanation and a hint for
191
+ the likeliest mistake. Code steps open the function skeleton in a small editor and
192
+ show the model answer as code; code is never run, and nothing is graded by keywords.
193
+ Finishing the last step marks the exercise completed in the outline; you can also
194
+ right-click any entry to mark it. A Next link leads to the following exercise. Large
195
+ programming exercises can come with small distilled practice exercises that train one
196
+ idea each and link back to the original.
197
+
198
+ Choices, code drafts, hints and completion marks stay in this browser. Changing a
199
+ checked choice clears its verdict. Semantic changes start fresh progress for only that exercise, while retaining older
196
200
  browser records; source-hash review alone preserves progress.
197
201
  Reset on each workspace home affects only that workspace. Exercise passage comments
198
202
  use the existing private comment service; hosted exports do not expose it.
199
203
 
204
+ ## Prepare for exams
205
+
206
+ Ask `prepare-exams` to build the **Exam Prep** workspace from the course's past exams,
207
+ exercises and materials. Past exams come from `materials/exams` (Moodle),
208
+ `materials/studocu/exams` (Studocu) or files you hold yourself:
209
+
210
+ ```bash
211
+ tum-mcp study import ./pse-ws26 --file "Klausur WS23.pdf" --kind exam --title "Endterm WS23/24"
212
+ tum-mcp study duplicates ./pse-ws26 --near # identical and likely duplicate copies
213
+ tum-mcp study exam-report ./pse-ws26 # what the agent reads before authoring
214
+ ```
215
+
216
+ Imported files stay private and survive campus syncs. Copies of the same exam from
217
+ different places count once.
218
+
219
+ - **Cheatsheet**: a semester map of the exam-relevant ideas and one-line entries with
220
+ formulas, triggers and pitfalls; open an entry for details. The map can be dragged,
221
+ zoomed and opened full screen.
222
+ - **Exam patterns**: recurring question types with recognition cues, a solving workflow,
223
+ answer template, marking points, a worked practice that applies each workflow step,
224
+ and drills whose answers you can open at any time.
225
+ - **Practice exams**: work through real past papers question by question with
226
+ guidance, or read a whole paper and open each question's solution to check yourself;
227
+ forecast practice exams follow the real exam's length and weighting with new
228
+ variants and untested topics.
229
+
230
+ Right-click any entry in the sidebar, in any workspace, to mark it as completed.
231
+
232
+ Statistics such as "seen in 4 of 6 exams" are history, never a prediction. Exam Prep
233
+ always stays local: it is never published.
234
+
200
235
  Existing `study/` projects continue to work. New projects use `app/`. To upgrade a
201
236
  verified legacy layout explicitly, run `tum-mcp study build PROJECT --upgrade-layout`.
202
237
  It keeps the original tree at `.tum-mcp/layout-backup/`, preserves the course identity,
@@ -241,7 +276,7 @@ previously managed lecture images. A notes-only export with notes excluded is re
241
276
 
242
277
  Only the selected generated website renderer and data are uploaded. Downloaded
243
278
  originals, credentials, AGENTS.md, study inventory, passage comments, progress,
244
- audio and arbitrary files stay local. Git itself is not required: the publisher
279
+ audio, videos and arbitrary files stay local. Git itself is not required: the publisher
245
280
  uses authenticated GitHub API calls through `gh`. Local publication settings do
246
281
  not contain credentials.
247
282
 
@@ -339,6 +374,73 @@ for the updated study website”** to reconcile added, changed, removed or moved
339
374
  material with the previous verified coverage. This is an agent skill, not a new
340
375
  `tum-mcp study` CLI subcommand or a built-in speech service.
341
376
 
377
+ ## Create and maintain video notes
378
+
379
+ Install the optional workflow with `tum-mcp install video-notes`. After
380
+ `prepare-study` has authored the course, ask for explainer videos, for example:
381
+
382
+ ```text
383
+ Plan explainer videos for the topics in this study website that benefit from animation,
384
+ then make the BFS one first.
385
+ ```
386
+
387
+ The agent proposes which topics get a video and records a reason for each topic it
388
+ leaves text-first. Each video covers one topic, usually 3 to 8 minutes, in short
389
+ chapters. It is a visual adaptation of the prepared lesson: the problem first, the
390
+ course's own example before the general rule, consistent colors per symbol, one or
391
+ two pause-and-think questions from the topic's practice, and a short recap. Nothing
392
+ outside the prepared content is added; a missing example is reported back to
393
+ `prepare-study`.
394
+
395
+ Behind the skill, `tum-mcp video-notes` does the checkable work. It prints the
396
+ fingerprints a storyboard cites and rejects storyboards whose sources changed. It
397
+ measures one narration file per sentence and renders the scenes with a pinned Manim
398
+ and Typst runtime (no LaTeX needed). It enforces that animations fit their narration
399
+ frame by frame and reports overlapping or off-screen text. Each run produces a
400
+ contact sheet per chapter for review, and the final video is checked for codec,
401
+ sync, loudness, captions and chapters before publication. Unchanged chapters are
402
+ reused, interrupted runs resume, and a failed publication restores the previous
403
+ files.
404
+
405
+ Narration follows the Audio Notes policy: the free ElevenLabs website when it really
406
+ generates and downloads the text, otherwise local Kokoro, with no accounts or
407
+ payments. Kokoro has no German voice, so a German topic without a working voice
408
+ keeps its narration pending; a silent draft can be rendered for review but is never
409
+ published.
410
+
411
+ ```text
412
+ videos/
413
+ plan.json Which topics get videos, and why others are text-first
414
+ storyboards/03_topic.json Beats, narration, on-screen items and source locators
415
+ scenes/03_topic/chapters.py Manim scenes using the bundled helpers
416
+ tracks/03_topic.mp4 Published H.264/AAC video
417
+ captions/03_topic.vtt Captions from measured narration
418
+ chapters/03_topic.vtt Chapter markers (and a JSON copy)
419
+ posters/03_topic.jpg Poster frame
420
+ narration/03_topic.txt Transcript
421
+ manifest.json Verified receipts for published videos
422
+ style.json, voice.json Course look and actual narrator profiles
423
+ README.md, COVERAGE.md Generated overview and coverage
424
+ .build/ Narration audio, timing, runs and caches
425
+ archive/ Superseded published files
426
+ ```
427
+
428
+ Published videos appear above the topic's Content in the local app (`tum-mcp study`)
429
+ with chapters, captions and a transcript link, and show a notice when the topic
430
+ changed after the video was made. They load when you press play. Hosted study sites
431
+ never include or request videos; copy files from `videos/tracks/` to watch them
432
+ elsewhere. `tum-mcp video-notes inspect PROJECT` reports planned, stale, pending and
433
+ published videos, and `tum-mcp study demo PROJECT --videos` adds a synthetic preview
434
+ clip.
435
+
436
+ The render runtime (about 320 MB) installs on first use with
437
+ `tum-mcp video-notes runtime install`. Windows x64 needs nothing else. macOS 14+ on
438
+ Apple Silicon needs `brew install cairo` and the Xcode Command Line Tools; Linux and
439
+ WSL on x86_64 with glibc 2.28+ need `libcairo2-dev`, `libpango1.0-dev` and a C
440
+ compiler. `runtime status` prints the exact command and never runs it for you.
441
+ Windows on ARM, Intel Macs, Linux ARM64 and musl Linux are not supported: Manim's
442
+ OpenGL dependencies publish no wheels there.
443
+
342
444
  ## Studocu materials
343
445
 
344
446
  Install the optional extension with `tum-mcp install studocu` and reload your
package/docs/tum-mcp.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Package: `@jamestesting888/tum-mcp`, CLI: `tum-mcp`, backend: Python 3.13.
4
4
  The package combines read-only course retrieval, managed client installation and
5
- five base course workflows and three optional extensions.
5
+ six base course workflows and four optional extensions.
6
6
 
7
7
  ## Current capabilities
8
8
 
@@ -208,7 +208,7 @@ in JSON for troubleshooting. Default diagnostics do not create state folders.
208
208
  uses read-only local status to initialize an explicitly chosen available course or
209
209
  reconcile an existing project. Incomplete state is preserved for recovery.
210
210
  `prepare-study` authors lessons; `prepare-exercises` authors guided released sheets
211
- in the same local app. See the
211
+ and `prepare-exams` builds a local Exam Prep workspace in the same app. See the
212
212
  [study guide](study.md) for examples, state structure and helper commands.
213
213
 
214
214
  One project holds one course. Source revisions, coverage and course knowledge
@@ -225,14 +225,18 @@ writing files with activation.
225
225
 
226
226
  The Codex adapter uses a contained Node launcher to pin the managed Python in
227
227
  isolated mode; portable stdio manifests require a bare or contained executable.
228
- The base pack contains five skills: `read-content`, `sync-course`,
229
- `prepare-study`, `prepare-exercises` and `publish-course`. Optional extensions add
230
- `prepare-lecture`, `sync-studocu` and `audio-notes`; choose them with `tum-mcp install`.
228
+ The base pack contains six skills: `read-content`, `sync-course`,
229
+ `prepare-study`, `prepare-exercises`, `prepare-exams` and `publish-course`. Optional extensions add
230
+ `prepare-lecture`, `sync-studocu`, `audio-notes` and `video-notes`; choose them with
231
+ `tum-mcp install`.
231
232
  Website-specific retrieval guidance is loaded from references within read-content.
232
233
  Teaching and content guidance lives with prepare-study; the course app and its
233
234
  synthetic example ship as reusable assets and define the site's design.
234
235
  Audio Notes converts prepared content into category tracks and maintains coverage,
235
236
  scripts, voice settings, candidates and archives under the course's `audio/` root.
237
+ Video Notes turns prepared topics into narrated explainer videos under `videos/`;
238
+ `tum-mcp video-notes` validates storyboards, measures narration, renders with an
239
+ optional pinned runtime and publishes checked videos for the local app only.
236
240
  Publish Course uses host GitHub CLI authentication to create a private repository
237
241
  and a public Pages website after explicit publication consent. It chooses a course
238
242
  and semester name, updates the same site after successful study builds, and shows
@@ -1,5 +1,5 @@
1
1
  {
2
- "wheel": "tum_mcp-0.9.5-py3-none-any.whl",
3
- "wheelSha256": "3321ea5475c34336b783a7b5487a544eacffc9207e5fd744a66482ae53214cda",
2
+ "wheel": "tum_mcp-0.11.0-py3-none-any.whl",
3
+ "wheelSha256": "0706ba3855ca5cba44e7ab9d46474129a92f3b7e902f4f610e2273f4c31e2975",
4
4
  "requirementsSha256": "39a401b6e606d3292eb91b8fe9ef60367d4852f203eb409dc52f38b76e513ccf"
5
5
  }
package/npm/tum-mcp.mjs CHANGED
@@ -24,13 +24,14 @@ try {
24
24
  ['setup', 'Configure your coding client and managed runtime.'],
25
25
  ['login', 'Sign in to selected campus services.'],
26
26
  ['doctor', 'Show connections, extensions and relevant client/runtime health.'],
27
- ['install', 'Choose optional Lecture, Studocu or Audio Notes workflows.'],
27
+ ['install', 'Choose optional Lecture, Studocu, Audio Notes or Video Notes workflows.'],
28
28
  ['uninstall', 'Choose extensions or All to remove TUM MCP.'],
29
29
  ['manage', 'Manage TUMonline permissions.'],
30
30
  ['skills', 'Inspect and validate workflow skills.'],
31
31
  ['study', 'Prepare, preview and publish a course app.'],
32
32
  ['lecture', 'Prepare lecture recording evidence (optional extension).'],
33
33
  ['studocu', 'Collect selected supplementary materials (optional extension).'],
34
+ ['video-notes', 'Render and maintain explainer videos (optional extension).'],
34
35
  ['discover', 'List accessible courses or channels.'],
35
36
  ['update', 'Update the package and configured clients.'],
36
37
  ['logout', 'Remove one saved connection.'],
@@ -42,7 +43,7 @@ try {
42
43
  } else if (['--version', 'version'].includes(args[0])) {
43
44
  console.log(version);
44
45
  } else if (args[0] === 'install' && args.some(arg => ['--help', '-h'].includes(arg))) {
45
- printHelp(version, 'Choose optional workflows to install, or provide their names.', 'tum-mcp install [lecture|studocu|audio-notes]... [OPTIONS]', [
46
+ printHelp(version, 'Choose optional workflows to install, or provide their names.', 'tum-mcp install [lecture|studocu|audio-notes|video-notes]... [OPTIONS]', [
46
47
  ['Options', [['--asr / --no-asr', 'Provision isolated lecture recognition; models load on demand.'], ['--json', 'Print machine-readable results.'], ['-h, --help', 'Show this help.']]],
47
48
  ]);
48
49
  } else if (['setup', 'update', 'uninstall'].includes(args[0]) && args.some(arg => ['--help', '-h'].includes(arg))) {
@@ -59,7 +60,7 @@ try {
59
60
  },
60
61
  uninstall: {
61
62
  description: 'Remove managed setup while retaining saved user data by default.',
62
- usage: 'tum-mcp uninstall [lecture|studocu|audio-notes]... [OPTIONS]',
63
+ usage: 'tum-mcp uninstall [lecture|studocu|audio-notes|video-notes]... [OPTIONS]',
63
64
  options: [['(no arguments)', 'Choose extensions or All in the interactive picker.'], ['--client NAME', 'Remove one client registration.'], ['--host local|windows', 'Choose the client host.'], ['--purge-runtime', 'Remove verified runtimes when All is selected.'], ['--forget-credentials', 'Forget saved credentials when All is selected.']],
64
65
  },
65
66
  };
@@ -68,7 +69,7 @@ try {
68
69
  ['Options', [...selected.options, ['-h, --help', 'Show this help.']]],
69
70
  ]);
70
71
  } else {
71
- const hasExtension = args.slice(1).some(arg => ['lecture', 'studocu', 'audio-notes'].includes(arg));
72
+ const hasExtension = args.slice(1).some(arg => ['lecture', 'studocu', 'audio-notes', 'video-notes'].includes(arg));
72
73
  let packageAction = args[0] === 'update';
73
74
  if (args[0] === 'update') {
74
75
  if (args.length > 2 || (args.length === 2 && args[1] !== '--local')) throw new Error('Usage: tum-mcp update [--local]. Use --help for details.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jamestesting888/tum-mcp",
3
- "version": "0.9.5",
3
+ "version": "0.11.0",
4
4
  "description": "Read-only TUM campus tools and source-backed study, exercise and lecture workflows",
5
5
  "license": "MIT",
6
6
  "type": "module",