Add recipe-youtube-research-pipeline skill - #898
Open
WudangHan wants to merge 6 commits into
Open
Conversation
New recipe skill that orchestrates a full YouTube research workflow: - Searches YouTube for 10 relevant videos via yt-search skill - Creates a NotebookLM notebook and ingests all video URLs as sources - Runs AI-powered topic analysis with citation back to specific videos - Asks the user if they want a deliverable (flashcards, infographic, mindmap, audio) - Saves a fully-cited markdown report to the vault including view counts, channel names, engagement ratios, and full source metadata - Displays the report in chat immediately after saving https://claude.ai/code/session_018eaBpEffif4qWVEgCL53Kt
… skill stubs - Register youtube-research-pipeline in registry/recipes.yaml so gws generate-skills can include it in the auto-generated docs/skills.md (fixes manual edit that would have been overwritten on regeneration) - Revert manual edit to docs/skills.md (auto-generated, do not edit) - Add skills/yt-search/SKILL.md stub documenting the yt-search CLI interface - Add skills/notebooklm/SKILL.md stub documenting the notebooklm CLI interface (notebook create, source add, query, deliverable create subcommands) Both prerequisite skills are now present in the repo, making the recipe-youtube-research-pipeline prerequisites satisfiable. https://claude.ai/code/session_018eaBpEffif4qWVEgCL53Kt
Add recipe-youtube-research-pipeline skill
…project Standalone Python application (under laban-calib/) that calibrates a multi-camera rig — intrinsics, distortion and relative extrinsics — so dance captation footage can be triangulated into metric 3D joint trajectories. Engine (no GUI dependency): - ChArUco, asymmetric/symmetric circle grids and chessboard targets, with partial detections treated as first-class (ids + points per view) - pinhole (Brown-Conrady) and OpenCV fisheye models, parameterised as f, ar, cx, cy, alpha + distortion - rig initialisation from board poses shared by camera pairs, chained along a maximum spanning tree from the reference camera - bundle adjustment over free intrinsics, camera poses and per-instant board poses, with a sparse Jacobian, optional Huber loss and outlier rejection; parameter standard deviations read off the Jacobian at the optimum - vectorised projection (validated against OpenCV to 1e-13 px) which keeps the optimisation interactive - printable target generation (true-to-scale PDF), video frame extraction and synchronised live capture - JSON / OpenCV FileStorage / text export, and a Rig class that triangulates 2D joint tracks into 3D with per-point reprojection error Interface (PySide6): pose/camera tree, image view with detection and reprojection overlays, log console, 3D rig view, and convergence, initialisation, parameters, RPE scatter, RPE bars and coverage panels. Long runs happen in worker threads with progress and cancellation. A command-line front-end (labancalib.cli) drives the same pipeline headlessly. 53 tests cover projection against OpenCV, detection round-trips on all four target types, calibration accuracy against synthetic ground truth (sub-pixel intrinsics, sub-centimetre extrinsics) for both camera models, outlier rejection, disconnected-camera diagnostics, project persistence, export and a full end-to-end run on rendered images. Claude-Session: https://claude.ai/code/session_01ExykZpFoxmfdSbN1pYTP8V
MediaPipe reports 33 BlazePose landmarks per frame in image coordinates normalised to [0, 1], with a visibility score. labancalib.mediapipe_io turns those into the pixel tracks the calibrated rig triangulates, and back into named 3D trajectories in the studio frame. - landmarks_to_array/sequence_to_array read live results from either MediaPipe API — the Tasks PoseLandmarker (the only one left in MediaPipe 1.x) and the legacy solutions.pose — plus bare landmark lists and per-frame dicts; multi-person output is selected with person= - load_landmarks/save_landmarks round-trip .json, .jsonl, .npy and .npz - build_tracks scales normalised coordinates to pixels using each camera's calibrated image size, drops landmarks below a visibility threshold, and realigns cameras that started recording late (offsets in frames) - triangulate_mediapipe returns points, per-point reprojection error, how many cameras contributed, completeness, and median skeleton segment lengths as a sanity check on the calibration; results save to .npz or .csv - estimate_from_video runs MediaPipe on a captation video (Tasks API with a .task bundle, falling back to the legacy API on older installs) - CLI: `pose` (video -> landmarks) and `triangulate` (rig + landmarks -> 3D) - GUI: Analyse -> Trianguler des points MediaPipe… (F7), in a worker thread Image landmarks are triangulated, deliberately not pose_world_landmarks: those are metric but hip-centred and single-view, so they carry no rig geometry. 18 new tests, run against the real MediaPipe Tasks containers where installed (and skipped otherwise): reading both API shapes, coordinate scaling, visibility gating, frame offsets, reprojection-error filtering, file formats, and a full round trip recovering a known 3D skeleton to under a micrometre. Claude-Session: https://claude.ai/code/session_01ExykZpFoxmfdSbN1pYTP8V
With a wide-angle lens, straight lines bow and the bias grows towards the frame edges, so every joint angle and velocity measured on raw pixels inherits it. Removing the distortion first is what a calibration buys you when only one camera is available and metric 3D is out of reach. - labancalib/undistort.py: remap tables for both camera models, single-image and whole-video correction, and undistorted_intrinsics() for the corrected camera (new K, no distortion coefficients left) - rescales K when the footage resolution differs from the calibration one, and flags a changed aspect ratio, which means a crop the calibration cannot cover - CLI: `undistort <rig> <inputs...> --out`, one file or a batch into a directory, with --camera, --balance and --fourcc; prints the corrected intrinsic matrix and states that downstream tools must use it 13 tests: maps for pinhole and fisheye, point round-trip through the maps, distortion-free corrected intrinsics, resolution rescaling and aspect-change detection, video round trip, unreadable input, and the two CLI paths. Claude-Session: https://claude.ai/code/session_01ExykZpFoxmfdSbN1pYTP8V
🦋 Changeset detectedLatest commit: c7093da The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
EDDOEDDO
approved these changes
Aug 16, 2026
| @@ -0,0 +1,5 @@ | |||
| --- | |||
| "@googleworkspace/cli": patch | |||
| @@ -0,0 +1,6 @@ | |||
| __pycache__/ | |||
| *.pyc | |||
|
|
||
| ```bash | ||
| cd laban-calib | ||
| python -m pip install -e ".[gui]" # cœur + interface graphique |
| python -m labancalib # interface graphique | ||
| python -m labancalib.cli -h # version en ligne de commande | ||
| ``` | ||
|
|
EDDOEDDO
approved these changes
Aug 16, 2026
| | **Cercles symétriques**, **échiquier** | Fournis pour compatibilité avec des jeux d'images existants. | | ||
|
|
||
| 2. **Alimenter le projet** — trois sources, au choix ou combinées : | ||
| - `Définir les images…` : un dossier par caméra ; |
There was a problem hiding this comment.
**
Suggested change
| - `Définir les images…` : un dossier par caméra ; | |
| - `Définir les images…` : un dossier par caméra ; | |
**
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
New recipe skill that orchestrates a full YouTube research workflow:
channel names, engagement ratios, and full source metadata
https://claude.ai/code/session_018eaBpEffif4qWVEgCL53Kt## Description
Please include a summary of the change and which issue is fixed. If adding a new feature or command, please include the output of running it with
--dry-runto prove the JSON request body matches the Discovery Document schema.Dry Run Output:
// Paste --dry-run output here if applicableChecklist:
AGENTS.mdguidelines (no generatedgoogle-*crates).cargo fmt --allto format the code perfectly.cargo clippy -- -D warningsand resolved all warnings.pnpx changeset) to document my changes.