diff --git a/app_qt.py b/app_qt.py index d982661..57134d6 100644 --- a/app_qt.py +++ b/app_qt.py @@ -642,8 +642,13 @@ def _show_help_dialog(self, title: str, html: str) -> None: lay.addWidget(btns) dlg.exec() - def _on_help_anchor(self, url: QUrl, _dlg: QDialog) -> None: + def _on_help_anchor(self, url: QUrl, _dlg: QDialog, browser: QTextBrowser | None = None) -> None: spec = url.toString() + # In-page jump (the How-To index links): scroll this tab, don't leave it. + if spec.startswith("#"): + if browser is not None: + browser.scrollToAnchor(spec[1:]) + return if not spec.startswith("action:"): QDesktopServices.openUrl(url) # external link → system browser return @@ -705,7 +710,8 @@ def _show_user_guide(self) -> None: browser.setStyleSheet( f"QTextBrowser {{ border: none; background: {pal.surface}; padding: 20px 26px; }}") browser.setHtml(css + body) - browser.anchorClicked.connect(lambda url, d=dlg: self._on_help_anchor(url, d)) + browser.anchorClicked.connect( + lambda url, d=dlg, b=browser: self._on_help_anchor(url, d, b)) tabs.addTab(browser, title.replace("&", "&&")) # && → literal & (not a mnemonic) lay.addWidget(tabs) btns = QDialogButtonBox(QDialogButtonBox.StandardButton.Close) @@ -746,6 +752,176 @@ def _guide_sections() -> list[tuple[str, str]]: show/hide panels from View. Press ⌘K for the command palette, and switch light/dark in View. First, point the app at Blender (or let it fetch one) in Properties.
+ """), + ("How-To Guides", """ +Step-by-step recipes for the things you'll actually do. + Each is self-contained — jump to the one you need.
+| 1 | Drag your 3D file (.blend,
+ .c4d, .glb) onto the Scene box and click
+ Scan Scene. Its materials appear in the list. |
| 2 | Drag your videos into the Videos list and + choose a Camera. |
| 3 | Click Auto-match to pair clips to materials + by name — or drag a clip onto a material to link them by hand. |
| 4 | Check resolution, frame range, format and quality + in the Render panel (see the Render Settings tab). |
| 5 | Press Render (⌘R). Watch progress + and the Live Preview; the finished file can open, reveal, or copy + itself somewhere when done. |
Hands-off: point the app at a folder and every clip dropped + there imports, maps onto your scene, and renders — great for “drop a new cut, + get a new preview” loops.
+
| 1 | Load the scene and clips once, and + mark which screens matter: right-click a material → Mark as Render + Target (or click the coloured stripe on its left edge). |
| 2 | Open View → Watch & Auto-render. In + ① Source, click Choose… and pick the folder to watch. |
| 3 | In ② Mode, leave it on Auto-map onto the + current scene. |
| 4 | In ④ Output, turn on Start renders
+ automatically (off = jobs just queue for you to start). Set the output
+ folder, or leave it blank for a PREVIZ subfolder. |
| 5 | Press Start. Drop a clip named like a
+ material and it maps + renders on its own. A newer _v2 next to
+ _v1 takes over automatically — latest wins. |
Tips: raise Wait if very large files are still + copying when grabbed; tick Include subfolders to watch per-day/per-setup + folders too; the ⑤ Activity feed logs every ingest (and survives a + restart).
+ +If your footage is named by a convention, the watch folder can + build one multi-screen render per asset instead of mapping onto one + scene — drop 10 clips, get 5 assembled previz renders.
+
| 1 | Open View → Watch & + Auto-render and in ② Mode choose Previz assembly — one render + per asset. The ③ Naming card appears. |
| 2 | Build the filename pattern from chips — no
+ regex. {Field} = text, {Field#} = number,
+ add ? for optional. Hyphens are fine
+ (TC-MASTER). |
| 3 | Paste a real filename into the sample box. + The live preview shows exactly what parses — or where it stopped and + what it expected. |
| 4 | Fill Screen → Material (which material each + screen code drives) and, if you have multiple scenes, + Setup # → Scene (see guide D). |
| 5 | Click Preview (dry run) to see exactly what + WOULD assemble — per asset: screen → material → clip → version — plus every + skipped clip and why. Then press Start. |

Example pattern for a touring show:
+ {ID#}_D{Day#}_{Section}_{Cue}_{Screen}_v{Version#} parses
+ 80230_D2_War-Treaty_MusicH_TC-MASTER_v001.mp4 into its fields
+ automatically.
A show with several stage layouts (D1, D2, …) can send each + setup’s clips to its own scene.
+| 1 | Add a Setup field to your naming
+ pattern, e.g. …_S{Setup#}_… (or use the Day field if
+ that’s what distinguishes them). |
| 2 | In the ③ Naming card’s Setup # → Scene
+ table, click + Add and map each setup number to its scene file —
+ 1 → /…/D1.c4d, 2 → /…/D2.c4d. |
| 3 | Unmapped setups fall back to the currently loaded + scene. Use Preview (dry run) to confirm each asset shows the right + scene before rendering. |
| 1 | Set up the scene + mapping once + (guide A). |
| 2 | Add all the clips you want rendered with that + mapping to the Videos list. |
| 3 | Use Queue current mapping — one job per clip + is added, each with its own resolved output name. Reorder, rename, set + priority, or remove any of them in the Queue. |
| 4 | Press Render All. Jobs run in order; each + reports duration and per-frame metrics when done. |
| 1 | Open View → Watch & + Auto-render (or the render settings) and find ④ Output → Delivery. |
| 2 | Set a Copy to folder — a synced review + folder, a hand-off share, anything. |
| 3 | Every finished render is now also copied there + automatically. Combine with a watch folder + auto-start for a fully + hands-off “clip lands → assembled preview appears in the review folder” + pipeline. |
| 1 | Open
+ Properties → Deadline and point the
+ app at your Deadline repository (and deadlinecommand if
+ it isn’t auto-found). Click Test. |
| 2 | Build your jobs in the Queue as usual (Blender + and C4D both submit). |
| 3 | Choose Submit to Deadline instead of a local + render. Frames spread across your nodes; the app hands off and the farm + takes it from there. |
| 1 | Dial in resolution, format, quality, + tone-mapping and the other render settings you like. |
| 2 | Save Preset… and name it (e.g. “Client + Review 1080p”). |
| 3 | Later, Load Preset… — or apply it to queued + jobs — to reproduce that look in one click. Presets live in the + Presets browser. |

| Skipped badge | If ⑤ Activity shows + “N clip(s) skipped — why?”, click it — the dry run names every + skipped file and the reason (name doesn’t match, screen not mapped, older + version). |
| In a subfolder? | Turn on Include subfolders + in ① Source if clips land in nested folders. |
| Cloud placeholder | Dropbox/OneDrive “online-only” + files are skipped until their contents actually download — right-click → + Always keep on this device. |
| Still copying | A file must hold its size for the + Wait window before import; raise it for slow copies of huge + files. |
| Pattern mismatch | Use the live preview in ③ Naming + with a real filename — it pinpoints the first character where it + diverged. |