Curated Formatv0.4.0

Tutorial Video

Compose a polished proof-first 16:9 Wiggly tutorial from real browser, coding-agent, narration, caption, checkpoint, and finished-result ingredients.

By Wiggly Studio · Updated September 2026

Before you start

Services & costs

Fish Audio

s2.1-pro-free

Required for new tutorial narration; supplied audio supports offline replay. Uses only s2.1-pro-free, with measured phrase captions and no paid fallback.

FISH_STUDIO_APIKEYFISH_API_KEY

Social Publisher (Buffer MCP or API)

Optional simultaneous publishing to YouTube, Instagram, TikTok, and X after the finished tutorial is approved.

BUFFER_API_KEY

Local runtime

Setup, validation & inspection

Node.js >=22 · npm · FFmpeg · FFprobe · Chrome/Chromium or Remotion-managed browser · ffmpeg · ffprobe

Optional local tools

  • yt-dlp
  • whisper.cpp

Typical run estimate

$0 provider cost with supplied media or Fish s2.1-pro-free; coding-agent usage is separate. Paid calls require an estimate and approval.

Estimates describe the saved recipe, not a price guarantee. Confirm current provider pricing and approve any spend before generation. Your coding agent may have its own fees or usage limits. Never paste API keys into chat.

Setup notes from requirements.json
  • npm ci installs the pinned local Remotion runtime; this is dependency setup, not a paid media/model call.
  • The compositor makes zero provider calls and works entirely from authorized local ingredients.
  • Remotion binds a temporary localhost port for its local browser. Sandboxed agents must request that local permission before the first test or render; this is not internet access.
  • New narration uses runtime/voice.mjs or runtime/narrate.mjs with Fish s2.1-pro-free ($0 subject to fair-use limits). A configured key and selected voice ID are required. Errors stop without automatic retries or paid fallback.
  • The host agent captures the real browser/terminal workflow using the packaged instructions; optional yt-dlp or whisper.cpp can help prepare permitted source media.
  • Social publishing is optional, requires explicit approval of channels and copy, and is never called by render, smoke, or verification.
  • Never invoke a paid provider without showing an estimate and receiving explicit user approval.

Included assets

The ingredients behind the format.

The published package includes its agent instructions, input contract, and quality rules, plus 4 viewable asset references below. Reference media teaches the recipe; it is not a new result for your input.

Acid-lime retro grid

Acid-lime retro grid

Signature proof-first and browser-step background.

Electric-blue retro grid

Electric-blue retro grid

Signature coding-agent and terminal-step background.

Warm-cream retro grid

Warm-cream retro grid

Signature closing and final-result background.

Creator reference input

Creator reference input

Both public proof videos are direct outputs of runtime/tutorial-video.jsx from editable ingredient JSON; the Batman proof is the canonical regression target.

What stays consistent

  • The finished Wiggly result appears before the explanation
  • Real browser and coding-agent actions inside macOS window chrome
  • Retro grids, numbered badges, neon checkpoints, captions, and a progress rail
  • One packaged Remotion compositor with inspection, hashes, and a zero-provider receipt

What you bring

  • Permitted browser and coding-agent captures from the real workflow
  • The Wiggly Format metadata, URL, and finished-result video
  • A Fish Audio key and authorized voice ID for new narration, or supplied narration for offline replay
  • Reviewed caption timings and checkpoint copy
  • A coding agent with terminal, filesystem, and media access
Read the included contracts and asset inventory ↓

Examples

Examples & references.

1 saved examples for this recipe—not 1 separate Repos. Each example keeps its original version and provenance.

Example 01 · Wiggly Tutorial Format · 16:9

A format becomes a finished tutorial

Open finished ad

From input to output

How the run works.

From the published pipeline.json. The agent follows the packaged runtime and its approval gates.

  1. Step 01 · approval

    Ingredients

    Agent asks which format, finds its real result, scripts the walkthrough, and captures actual browser/terminal actions

  2. Step 02

    Critique script

    Deterministic 5-law retention & proof-first script linter report

  3. Step 03 · provider

    Narration

    Fish s2.1-pro-free narration and measured phrase captions; supplied-audio replay also supported

  4. Step 04

    Validation

    Validated editable timeline; pre-rendered source masters rejected

  5. Step 05

    Official composition

    Signature Wiggly tutorial rendered by runtime/tutorial-video.jsx

  6. Step 06 · approval

    Inspection

    Metadata, hashes, every-step contact sheet, and explicit audiovisual review record

  7. Step 07 · approval

    Distribute

    Optional multi-platform publishing receipt for approved YouTube, Instagram, TikTok, and X posts with zero secret leakage

Proof & quality

What a good result looks like.

Two different Wiggly Formats exercise one ingredient-driven compositor without source masters or runtime edits.

Receipts bind input, runtime, and output hashes; contact sheets show the packaged signature features.

Both public proof videos are direct outputs of runtime/tutorial-video.jsx from editable ingredient JSON; the Batman proof is the canonical regression target.

Tutorial Video canonical proof contact sheet

canonical regression

Batman Arkham Conversations tutorial

  • Tests the exact format that exposed the old empty shell
  • Shows every required signature feature
  • Preserves native vertical result audio
  • Provider calls: 0

Known limitations

  • Full audiovisual approval must be recorded by a human viewer.

cross-format replay

Animal Conversations tutorial

  • Different content and timings use the same runtime
  • Uses moving browser and coding-agent captures
  • Shows the same signature grammar without code changes
  • Provider calls: 0

Known limitations

  • Recovered operator-approved narration is specific to the demonstrated handoff.

Quality gates

These are the acceptance criteria in quality.json—not a claim that every pictured example passed the current version. Inspect each new output before finalizing.

Automatic · 8 checks
  • Width: 1920
  • Height: 1080
  • Fps: 30
  • Duration Seconds: sum of ingredient steps
  • Duration Tolerance Seconds: 0.12
  • Video Codec: h264
  • Audio Codec: aac
  • Audio Required: true
Technical Gates · 7 checks
  • schemaVersion 2 ingredient contract passes
  • sourceVideo master is rejected
  • required browser, terminal, narration, caption, checkpoint, and final ingredients exist
  • authorized local media remains inside media/ and is long enough
  • 1920x1080 H.264/AAC output matches the ingredient timeline
  • receipt binds input, runtime, and output hashes
  • providerCalls equals zero
Visual Gates · 7 checks
  • retro grid visible
  • macOS window chrome visible
  • numbered step badge visible
  • neon checkpoint readable
  • captions readable
  • progress rail visible
  • native result is framed without distortion
Human Review · 2 checks
  • Required: true
  • Criteria: ["watch and hear the entire video","narration is intelligible","captions match speech","native result audio is preserved","pacing feels intentional","no generic slide-deck substitution"]

Open the package

Readable Repo files.

Actual files from the published v0.4.0 package. Expand any file to inspect the instructions, requirements, or evidence before sending the Repo to your agent.

README.md
Open raw file ↗
# Tutorial Video v1

Tutorial Video is an executable 16:9 compositor, not a wrapper around a
finished master. Give it the editable ingredients of a first-run walkthrough:
format metadata, permitted browser and coding-agent captures, supplied
narration tracks, timed captions, checkpoint copy, and the format's finished
video. The packaged Remotion runtime directly renders the Wiggly tutorial look:

- acid-lime, electric-blue, and warm-cream retro grid backgrounds;
- macOS-style browser and terminal windows;
- numbered step badges and a bottom progress rail;
- neon checkpoint cards;
- bold, timed subtitles; and
- native-audio result playback before and after the walkthrough.

The runtime rejects `sourceVideo`. A fresh agent cannot hand it a pre-rendered
tutorial or replace the format with a generic slideshow.

## Quick start

```bash
npm ci --ignore-scripts --no-audit --no-fund
npm test
node runner.mjs init --output=my-tutorial.json
node runner.mjs validate --input=my-tutorial.json
node runner.mjs render --input=my-tutorial.json --output=my-tutorial.mp4
node runner.mjs inspect --input=my-tutorial.mp4 --report=quality-report.json
```

Run those commands **one at a time**. `npm test` already performs the official
smoke render; do not run `npm run smoke` beside it or immediately repeat the
same preflight. Use `npm run smoke` only when you want the smoke by itself.
Remotion also needs to bind a temporary localhost port. In a sandboxed coding
agent, grant that local browser/port permission before the first `npm test` or
`render` command. This is local process access—not internet or a provider call.
`doctor` reports `localhostPort: true` when the permission is ready.

Use `examples/batman-arkham-first-run/input.json` and
`examples/animal-conversations-compositor/input.json` as complete examples.
All media paths are relative to `media/`, even when the input JSON lives in a
different directory.

The bundled examples are immutable proofs and may be rendered unchanged when a
user asks to reproduce them. For a new tutorial, run `init`, copy new assets
under `media/runs/<name>/`, and edit the new input—not an example in place.

## Start with a target

Tell your agent which Wiggly Format to teach. It follows
`references/preparation.md` to find the result, capture real actions, write the
script, and generate narration using Fish Audio `s2.1-pro-free`. It asks one
short question at a time when needed. Configure `FISH_STUDIO_APIKEY` or
`FISH_API_KEY` locally for new narration; no paid model is selected.

`runner.mjs make` uses the strict Fish path in `runtime/voice.mjs`; the
lower-level `runtime/narrate.mjs` command takes a narration plan and produces
measured narration/caption ingredients. Captures use your coding agent's
browser or recording tools. Supplied audio still allows offline replay.

## Ingredients the agent prepares

1. Format name, promise, public URL, and output label.
2. Four to fourteen tutorial steps totaling 12–240 seconds.
3. At least one permitted browser capture and one permitted terminal/coding-
   agent capture, with provenance.
4. At least two generated or supplied narration audio tracks and their reviewed timed
   caption phrases.
5. At least one neon checkpoint and exactly one final-result step that keeps
   the result video's native audio.
6. Optional supplied music long enough for the full tutorial. Music is muted
   during native-result sections.

Copy files beneath `media/`, declare `authorized: true`, and write meaningful
`provenance` for each one. The validator refuses missing, external, symlinked,
oversized, or too-short media; it never silently loops or freezes a clip.

## Agent workflow

1. Read `SKILL.md`, the contracts, and a complete example. Run commands one at
   a time; concurrent Remotion commands can contend for local browser ports.
2. Confirm permission and provenance for every capture, audio file, and result.
3. Draft the tutorial as ingredient steps. Show the result first; use plain
   verbs such as choose, copy, send, render, inspect, and watch.
4. Put the media under `media/` and validate before spending render time. If
   `npm test` passed, do not run a redundant standalone smoke before the target.
5. Render through `runner.mjs`; do not duplicate or rewrite the compositor.
6. Inspect the output and contact sheet. A human must still watch and hear the
   entire output before finalization.

`inspect` reads the adjacent render receipt and samples the midpoint of every
declared ingredient step, so short browser or terminal steps cannot disappear
between evenly spaced screenshots. After complete playback, copy
`fixtures/creative-review.example.json`, record the reviewer decision, and run:

```bash
node runner.mjs finalize --input=my-tutorial.mp4 --report=quality-report.json \
  --review=creative-review.json --output=delivery.json
```

## Cost and boundaries

The compositor and offline tests make **zero provider calls**. New narration
uses the packaged Fish path, pinned to `s2.1-pro-free`; $0 under the provider's
fair-use limits. A key and selected voice are required. If Fish is unavailable,
the real run stops with a clear error—there is no OS-voice, sine-wave, or paid
fallback. Local dependency setup and rendering do not consume media-model
credits. Coding-agent usage is separate.
If an agent wants to generate music, images, or video with a paid service, it
must first show a per-provider estimate and receive explicit user approval. URL
downloading and screen capture use the host agent's tools and the preparation
recipe; narration and measured caption assembly are implemented in the Repo.

The two bundled proofs were rendered by this same runtime from different JSON
inputs. The Batman proof demonstrates the recovered visual identity against the
exact format that exposed the old shell; the Animal Conversations proof shows
that the compositor generalizes without code changes.
SKILL.md
Open raw file ↗
---
name: tutorial-video
description: Render a proof-first Wiggly tutorial from editable browser, terminal, narration, caption, checkpoint, and finished-result ingredients using the packaged 16:9 compositor.
---

# Tutorial Video Wiggly Repo (v0.4.0)

Use this skill when a user wants a polished first-run tutorial for a Wiggly
Format. The official renderer is `runner.mjs` plus `runtime/tutorial-video.jsx`.
Never replace it with slides, a second renderer, or a pre-rendered master.

## Conversation: keep it easy

Report the manifest version in one short sentence. If the target is unknown,
ask only: “Which Wiggly format should this tutorial teach?” Wait for the answer.
Ask one short question at a time only when a decision cannot be resolved from
the target page, workspace, or available tools. Default to 16:9, a friendly
narrator, and natural timing; do not force a 90-second length. Never ask the
user for an asset checklist, JSON, captions, or technical setup up front.
Keep progress updates to one sentence and ordinary replies under 60 words.

## Prepare the ingredients

Follow `references/preparation.md` in order. The agent owns preparation:
inspect the target Repo, locate its finished example, capture the real browser
and terminal workflow, write concise narration, and generate it through the
packaged Fish path using `s2.1-pro-free`. `runner.mjs make` uses
`runtime/voice.mjs`; the lower-level measured helper is
`node runtime/narrate.mjs narration-plan.json`.

Fish is required for new narration; supplied audio still supports offline
replay. Configure `FISH_STUDIO_APIKEY` or `FISH_API_KEY` locally. Never
substitute an OS/robotic voice, a paid model, or another provider silently.

### 0.1 Retention & Proof-First Script Critique Engine (`runtime/critique.mjs`)

Before rendering, run the deterministic 5-law script linter:
```bash
npm run critique [path/to/input.json]
# or: node runtime/critique.mjs [path/to/input.json] --json
```

The critique engine deterministically enforces the **5 Inviolable Tutorial Laws**:
- **Law 1: Proof-First Opening (25 pts)** — Step 1 must be `kind: "hero"` or `"final"` with `nativeAudio: true` and no narrator voiceover (let the finished format speak for itself).
- **Law 2: Imperative Action Titles (20 pts)** — Every step label must begin with a strong action verb (`See`, `Choose`, `Copy`, `Paste`, `Run`, `Inspect`, `Watch`, `Try`).
- **Law 3: Zero Conversational Fluff (20 pts)** — Banned filler phrases (*"Hey guys"*, *"In this video"*, *"Without further ado"*, *"Simply click"*) are penalized. Requires concrete technical/action density.
- **Law 4: Explicit Checkpoint Quality (15 pts)** — Must include at least one verified troubleshooting card (`headline`, `badge`, `eyebrow`) confirming what success looks like.
- **Law 5: Narration-to-Screen Clock & Pacing (20 pts)** — Narration audio must finish within 85-90% of each step's `durationSeconds` to ensure clean transitions, with speech rate under 2.8 words/sec.

A score $\ge 85$ (`PASS`) is required for release.

### 0.2 Autonomous 1-Click Pipeline (`node runner.mjs make`)

To autonomously build a complete tutorial without manual screen recording or manual voiceover typing:
```bash
node runner.mjs make --target=<format-slug> [--audience=creator|developer] [--skip-render]
# Example:
node runner.mjs make --target=mugsy-explains
```

This automated pipeline executes 5 discrete stages:
1. **Harvests** the target format's official proof MP4, renders a 16:9 format page still, and generates a dark-mode macOS terminal graphic (`runtime/harvest.mjs`).
2. **Synthesizes voiceover** audio and computes proportional microsecond subtitle timestamps (`runtime/voice.mjs`).
3. **Writes** `inputs/<target-slug>.json`.
4. **Lints** the script against the 5 Inviolable Tutorial Laws (`runtime/critique.mjs`).
5. **Renders** the official 1920x1080 MP4 through Remotion and generates a step contact-sheet inspection report (`outputs/<target-slug>-tutorial.mp4`).

## Required loop

1. Run `node runner.mjs doctor` and stop if a required local tool is missing.
   Run every command sequentially; never launch two Remotion commands together.
   If `localhostPort` is false, request permission to bind a temporary localhost
   port before the first render. This is local browser access, not a provider.
2. Read `input-contract.json`, `composition-contract.json`, and one complete
   example input.
3. Gather permitted ingredients under `media/`: the real Wiggly page, the real
   coding-agent or terminal flow, supplied narration, and the finished format
   video. Preserve authorization and provenance for each file.
4. Create an ingredient JSON with at least one browser step, one terminal step,
   two narrated/captioned steps, one checkpoint, and one native-audio final.
5. Run `node runner.mjs validate --input=<input.json>` before rendering.
6. Run `node runner.mjs render --input=<input.json> --output=<output.mp4>`.
7. Run `node runner.mjs inspect --input=<output.mp4> --report=<report.json>` and
   inspect the generated contact sheet.
8. Have a human watch and hear the entire MP4. Only then create an approval JSON
   from `fixtures/creative-review.example.json` and use `runner.mjs finalize`.

`npm test` already includes the official smoke render. Do not also run
`npm run smoke` during the same preflight; the latter is a standalone shortcut.
Bundled example inputs may be rerun unchanged as proofs. For a new target, use
`runner.mjs init` and edit the new input; never overwrite an included example.

## Format grammar

- Open with the finished result so the value is obvious before explanation.
- Use the bundled lime, blue, and cream grid backgrounds.
- Put browser/terminal media inside the compositor's visible macOS window.
- Keep numbered badges at the top, captions in reserved lower space, the neon
  checkpoint above the progress rail, and the progress rail visible throughout.
- Preserve result audio in hero/final sections. Never narrate over the final.
- Keep language concrete: choose a format, copy it, send it, render, inspect,
  and watch.

## Hard boundaries

- `sourceVideo` is forbidden. Supply editable ingredients.
- Do not rewrite or bypass the official compositor.
- Do not claim URL download, transcription, synthetic speech, or screen capture
  is built into the Repo.
- Do not invent permissions, provenance, captions, or narration approval.
- Do not loop short media or freeze its final frame to hide missing footage.
- There are no providers in this kit. Before any paid generation, show the
  estimate and wait for explicit approval.
- Do not misread a sandbox's denied localhost port as missing media. Grant the
  local Remotion browser/port permission before the first render attempt.
- Automated metadata and contact-sheet checks do not replace complete human
  audiovisual review.

## Commands

```bash
npm ci --ignore-scripts --no-audit --no-fund
npm test
node runner.mjs init --output=my-tutorial.json
node runner.mjs validate --input=my-tutorial.json
node runner.mjs render --input=my-tutorial.json --output=my-tutorial.mp4
node runner.mjs inspect --input=my-tutorial.mp4 --report=quality-report.json
```

## Multi-Platform Social Distribution (Optional)

When a tutorial video is rendered and approved, the agent can distribute it across YouTube, Instagram, TikTok, and X via the packaged `runtime/publish.mjs` CLI or connected Buffer MCP tools:

1. **Author platform-tailored copy in `inputs/distribution.json`:**
   - **YouTube:** High-retention title (≤100 chars), categoryId (`27` for Education or `28` for Science & Technology). Handles standard 16:9 video or vertical Shorts automatically based on aspect ratio.
   - **Twitter/X:** Engaging educational hook with key takeaways (≤280 chars total).
   - **Instagram:** Informative caption with relevant hashtags (feed video or Reels).
   - **TikTok:** Engaging caption with trending tutorial tags (≤2200 chars).
2. **Dry-run validation:**
   ```sh
   node runtime/publish.mjs --dry-run inputs/distribution.json examples/animal-conversations-first-run/final.mp4
   ```
3. **Live dispatch requires explicit human sign-off:**
   - Confirm target channels and copy with the user (`approvalRequired: true`).
   - Execute with connected Buffer MCP tools or `node runtime/publish.mjs inputs/distribution.json /path/to/final.mp4`.
   - Generates a verified distribution receipt (`<video>.distribution.json`) with zero secret leakage.
requirements.json
Open raw file ↗
{
  "schemaVersion": 2,
  "localTools": ["Node.js >=22", "npm", "FFmpeg", "FFprobe", "Chrome/Chromium or Remotion-managed browser"],
  "providers": [
    {
      "name": "Fish Audio",
      "purpose": "Required for new tutorial narration; supplied audio supports offline replay. Uses only s2.1-pro-free, with measured phrase captions and no paid fallback.",
      "optional": false,
      "environmentVariables": ["FISH_STUDIO_APIKEY", "FISH_API_KEY"],
      "model": "s2.1-pro-free",
      "pricingSource": "https://docs.fish.audio/developer-guide/models-pricing/models-overview"
    },
    {
      "name": "Social Publisher (Buffer MCP or API)",
      "purpose": "Optional simultaneous publishing to YouTube, Instagram, TikTok, and X after the finished tutorial is approved.",
      "optional": true,
      "environmentVariables": ["BUFFER_API_KEY"],
      "pricingSource": "https://buffer.com/pricing"
    }
  ],
  "optionalTools": ["yt-dlp", "whisper.cpp"],
  "paidApprovalRequired": true,
  "automaticInstallation": false,
  "environmentVariables": ["FFMPEG (optional)", "FFPROBE (optional)", "REMOTION_BROWSER_EXECUTABLE (optional)"],
  "runtime": {"node": ">=22", "binaries": ["ffmpeg", "ffprobe"]},
  "notes": [
    "npm ci installs the pinned local Remotion runtime; this is dependency setup, not a paid media/model call.",
    "The compositor makes zero provider calls and works entirely from authorized local ingredients.",
    "Remotion binds a temporary localhost port for its local browser. Sandboxed agents must request that local permission before the first test or render; this is not internet access.",
    "New narration uses runtime/voice.mjs or runtime/narrate.mjs with Fish s2.1-pro-free ($0 subject to fair-use limits). A configured key and selected voice ID are required. Errors stop without automatic retries or paid fallback.",
    "The host agent captures the real browser/terminal workflow using the packaged instructions; optional yt-dlp or whisper.cpp can help prepare permitted source media.",
    "Social publishing is optional, requires explicit approval of channels and copy, and is never called by render, smoke, or verification.",
    "Never invoke a paid provider without showing an estimate and receiving explicit user approval."
  ]
}
pipeline.json
Open raw file ↗
{
  "schemaVersion": 2,
  "stages": [
    {"id": "ingredients", "output": "Agent asks which format, finds its real result, scripts the walkthrough, and captures actual browser/terminal actions", "approvalRequired": true, "providerCall": false, "paid": false},
    {"id": "critique-script", "output": "Deterministic 5-law retention & proof-first script linter report", "approvalRequired": false, "providerCall": false, "paid": false},
    {"id": "narration", "output": "Fish s2.1-pro-free narration and measured phrase captions; supplied-audio replay also supported", "approvalRequired": false, "providerCall": true, "paid": false},
    {"id": "validation", "output": "Validated editable timeline; pre-rendered source masters rejected", "approvalRequired": false, "providerCall": false, "paid": false},
    {"id": "official-composition", "output": "Signature Wiggly tutorial rendered by runtime/tutorial-video.jsx", "approvalRequired": false, "providerCall": false, "paid": false},
    {"id": "inspection", "output": "Metadata, hashes, every-step contact sheet, and explicit audiovisual review record", "approvalRequired": true, "providerCall": false, "paid": false},
    {"id": "distribute", "output": "Optional multi-platform publishing receipt for approved YouTube, Instagram, TikTok, and X posts with zero secret leakage", "approvalRequired": true, "providerCall": false, "paid": false}
  ]
}
assets.json
Open raw file ↗
{
  "schemaVersion": 2,
  "fixed": [
    {"localPath": "media/fixed/grid-acid-lime-v1.png", "label": "Acid-lime retro grid", "purpose": "Signature proof-first and browser-step background."},
    {"localPath": "media/fixed/grid-electric-blue-v1.png", "label": "Electric-blue retro grid", "purpose": "Signature coding-agent and terminal-step background."},
    {"localPath": "media/fixed/grid-warm-cream-v1.png", "label": "Warm-cream retro grid", "purpose": "Signature closing and final-result background."}
  ],
  "proofInputs": [
    {"input": "examples/batman-arkham-first-run/input.json", "output": "examples/batman-arkham-first-run/final.mp4", "purpose": "Cross-format proof that directly addresses the failed blind-agent Batman run."},
    {"input": "examples/animal-conversations-compositor/input.json", "output": "examples/animal-conversations-compositor/final.mp4", "purpose": "Second distinct input through the same compositor."}
  ],
  "sourceReference": {
    "exampleOutput": "examples/batman-arkham-first-run/final.mp4",
    "referenceInput": "examples/batman-arkham-first-run/poster.jpg",
    "referenceNote": "Both public proof videos are direct outputs of runtime/tutorial-video.jsx from editable ingredient JSON; the Batman proof is the canonical regression target.",
    "verification": "Receipts bind input, runtime, and output hashes; contact sheets show the packaged signature features."
  },
  "policy": "All variable media is explicitly authorized with provenance in its input JSON. No provider-generated assets are created by the runtime."
}
quality.json
Open raw file ↗
{
  "schemaVersion": 2,
  "automatic": {"width": 1920, "height": 1080, "fps": 30, "durationSeconds": "sum of ingredient steps", "durationToleranceSeconds": 0.12, "videoCodec": "h264", "audioCodec": "aac", "audioRequired": true},
  "technicalGates": [
    "schemaVersion 2 ingredient contract passes",
    "sourceVideo master is rejected",
    "required browser, terminal, narration, caption, checkpoint, and final ingredients exist",
    "authorized local media remains inside media/ and is long enough",
    "1920x1080 H.264/AAC output matches the ingredient timeline",
    "receipt binds input, runtime, and output hashes",
    "providerCalls equals zero"
  ],
  "visualGates": ["retro grid visible", "macOS window chrome visible", "numbered step badge visible", "neon checkpoint readable", "captions readable", "progress rail visible", "native result is framed without distortion"],
  "humanReview": {"required": true, "criteria": ["watch and hear the entire video", "narration is intelligible", "captions match speech", "native result audio is preserved", "pacing feels intentional", "no generic slide-deck substitution"]}
}
goldens.json
Open raw file ↗
{
  "schemaVersion": 2,
  "purpose": "Two different Wiggly Formats exercise one ingredient-driven compositor without source masters or runtime edits.",
  "canonicalContactSheet": "examples/batman-arkham-first-run/quality-report-contact-sheet.jpg",
  "examples": [
    {"id": "batman-arkham-first-run", "title": "Batman Arkham Conversations tutorial", "role": "canonical regression", "whyItWorks": ["Tests the exact format that exposed the old empty shell", "Shows every required signature feature", "Preserves native vertical result audio", "Provider calls: 0"], "knownWeaknesses": ["Full audiovisual approval must be recorded by a human viewer."]},
    {"id": "animal-conversations-compositor", "title": "Animal Conversations tutorial", "role": "cross-format replay", "whyItWorks": ["Different content and timings use the same runtime", "Uses moving browser and coding-agent captures", "Shows the same signature grammar without code changes", "Provider calls: 0"], "knownWeaknesses": ["Recovered operator-approved narration is specific to the demonstrated handoff."]}
  ]
}
composition-contract.json
Open raw file ↗
{
  "schemaVersion": 2,
  "officialRuntime": "runtime/tutorial-video.jsx",
  "sequence": ["proof-first", "real-wiggly-page", "coding-agent-handoff", "neon-checkpoint", "native-finished-output"],
  "visual": {
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "aspectRatio": "16:9",
    "fixedBackgrounds": ["grid-acid-lime-v1.png", "grid-electric-blue-v1.png", "grid-warm-cream-v1.png"],
    "requiredSignatureFeatures": ["retro-grid", "macOS-window-chrome", "numbered-step-badges", "neon-checkpoint-cards", "styled-subtitles", "progress-bar"]
  },
  "audio": {
    "tutorialNarration": "Supplied per narrated step and captioned with timed phrases.",
    "nativeResult": "Preserved in hero/final steps and never covered by tutorial narration.",
    "music": "Optional supplied bed at <=0.2 gain; muted during native-result playback."
  },
  "editorial": {"proofFirst": true, "showRealBrowserAndAgent": true, "plainLanguage": true, "oneSharedCompositor": true, "noPreRenderedMaster": true}
}
format.json
Open raw file ↗
{
  "schemaVersion": 2,
  "id": "tutorial-video",
  "slug": "tutorial-video",
  "title": "Tutorial Video",
  "name": "Tutorial Video",
  "version": "0.4.0",
  "owner": "Wiggly Studio",
  "status": "published",
  "summary": "A real 16:9 tutorial compositor: supply format metadata, browser and agent captures, narration, captions, checkpoint copy, and the finished-format proof.",
  "output": "One narrated, captioned 1920 × 1080 MP4 composed from editable ingredients with the signature Wiggly tutorial design.",
  "runtime": "Local Remotion compositor plus Fish s2.1-pro-free narration and FFmpeg/FFprobe inspection; no paid provider calls.",
  "canonicalSkill": "SKILL.md"
}
input-contract.json
Open raw file ↗
{
  "schemaVersion": 2,
  "type": "object",
  "additionalProperties": false,
  "forbidden": ["sourceVideo"],
  "required": ["schemaVersion", "title", "audience", "format", "steps"],
  "properties": {
    "schemaVersion": {"const": 2},
    "title": {"type": "string", "minLength": 1, "maxLength": 80},
    "audience": {"type": "string", "minLength": 1, "maxLength": 120},
    "format": {"type": "object", "required": ["name", "slug", "promise", "url", "outputLabel"]},
    "steps": {
      "type": "array",
      "minItems": 4,
      "maxItems": 14,
      "items": {
        "required": ["id", "kind", "number", "label", "background", "durationSeconds"],
        "kind": ["hero", "browser", "terminal", "media", "final", "end"],
        "background": ["lime", "blue", "cream"],
        "media": "Authorized image or video under media/, with provenance and optional startSeconds/fit.",
        "narration": "Authorized local audio under media/, with provenance and startSeconds.",
        "captions": "Ordered timed phrases relative to the step; required with narration.",
        "checkpoint": "Optional neon eyebrow/headline/badge callout.",
        "nativeAudio": "Allowed only for hero/final video; required for the single final step."
      }
    },
    "music": "Optional authorized local audio under media/, long enough for the entire timeline; volume > 0 and <= 0.2."
  },
  "crossFieldRules": [
    "sourceVideo is rejected: users supply editable ingredients, never a pre-rendered tutorial master.",
    "At least one browser step, one terminal step, two narrated steps, one checkpoint, and exactly one final step are required.",
    "Every local media path is relative to media/, regular, non-symlinked, <=250 MB, authorized, and carries provenance.",
    "Video sections must have enough source duration; the runtime never loops or freezes short media.",
    "The ingredient timeline must be 12–240 seconds and align to 30 fps."
  ],
  "canonicalValidator": "runtime/contract.mjs"
}
KIT-MANIFEST.json
Open raw file ↗
{
  "schemaVersion": 2,
  "kit": "wiggly-tutorial-video-format-kit",
  "formatVersion": "0.4.0",
  "officialFormat": ".",
  "canonicalSkill": "SKILL.md",
  "officialRuntime": "runtime/tutorial-video.jsx",
  "validator": "runtime/contract.mjs",
  "install": "npm ci --ignore-scripts --no-audit --no-fund",
  "check": "npm test",
  "smoke": "npm run smoke (standalone only; npm test already includes this smoke and commands must run sequentially)",
  "render": "node runner.mjs render --input=<input.json> --output=<output.mp4>",
  "releaseAcceptance": "Two ingredient inputs use one runtime, package smoke passes, blind-agent run passes, and direct human audiovisual review remains explicit.",
  "excluded": ["secrets", "node_modules", "raw unapproved third-party media", "paid provider outputs"]
}
output-contract.json
Open raw file ↗
{
  "schemaVersion": 2,
  "file": "MP4",
  "video": {"width": 1920, "height": 1080, "aspectRatio": "16:9", "codec": "h264", "pixelFormat": "yuv420p", "fps": 30},
  "audio": {"required": true, "codec": "aac", "sampleRate": 48000, "channels": 2},
  "durationSeconds": {"sameAs": "sum(steps.durationSeconds)", "tolerance": 0.12, "minimum": 12, "maximum": 240.12},
  "captions": "Burned in by the official compositor from each narrated step's timed caption phrases.",
  "evidence": ["<output>.receipt.json", "quality-report.json", "quality-report-contact-sheet.jpg", "sha256"],
  "providerCalls": 0
}
package-lock.json
Open raw file ↗
{
  "name": "wiggly-tutorial-video-format-kit",
  "version": "0.4.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "wiggly-tutorial-video-format-kit",
      "version": "0.4.0",
      "dependencies": {
        "@remotion/bundler": "4.0.473",
        "@remotion/renderer": "4.0.473",
        "playwright-core": "^1.60.0",
        "react": "19.0.1",
        "react-dom": "19.0.1",
        "remotion": "4.0.473",
        "sharp": "^0.33.5"
      }
    },
    "node_modules/@emnapi/core": {
      "version": "1.11.3",
      "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
      "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
      "license": "MIT",
      "optional": true,
      "dependencies": {
        "@emnapi/wasi-threads": "1.2.3",
        "tslib": "^2.4.0"
      }
    },
    "node_modules/@emnapi/runtime": {
      "version": "1.11.3",
      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
      "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
      "license": "MIT",
      "optional": true,
      "dependencies": {
        "tslib": "^2.4.0"
      }
    },
    "node_modules/@emnapi/wasi-threads": {
      "version": "1.2.3",
      "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
      "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
      "license": "MIT",
      "optional": true,
      "dependencies": {
        "tslib": "^2.4.0"
      }
    },
    "node_modules/@esbuild/aix-ppc64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz",
      "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==",
      "cpu": [
        "ppc64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "aix"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-arm": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz",
      "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==",
      "cpu": [
        "arm"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz",
      "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz",
      "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/darwin-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz",
      "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/darwin-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz",
      "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/freebsd-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz",
      "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/freebsd-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz",
      "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-arm": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz",
      "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==",
      "cpu": [
        "arm"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz",
      "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-ia32": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz",
      "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==",
      "cpu": [
        "ia32"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-loong64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz",
      "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==",
      "cpu": [
        "loong64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-mips64el": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz",
      "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==",
      "cpu": [
        "mips64el"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-ppc64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz",
      "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==",
      "cpu": [
        "ppc64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-riscv64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz",
      "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==",
      "cpu": [
        "riscv64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-s390x": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz",
      "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==",
      "cpu": [
        "s390x"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz",
      "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/netbsd-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz",
      "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/netbsd-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz",
      "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openbsd-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz",
      "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openbsd-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz",
      "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openharmony-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz",
      "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "openharmony"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/sunos-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz",
      "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "sunos"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-arm64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz",
      "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-ia32": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz",
      "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==",
      "cpu": [
        "ia32"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-x64": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz",
      "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@img/sharp-darwin-arm64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
      "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-darwin-arm64": "1.0.4"
      }
    },
    "node_modules/@img/sharp-darwin-x64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
      "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-darwin-x64": "1.0.4"
      }
    },
    "node_modules/@img/sharp-libvips-darwin-arm64": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
      "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
      "cpu": [
        "arm64"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "darwin"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-darwin-x64": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
      "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
      "cpu": [
        "x64"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "darwin"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-linux-arm": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
      "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
      "cpu": [
        "arm"
      ],
      "libc": [
        "glibc"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "linux"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-linux-arm64": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
      "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "glibc"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "linux"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-linux-s390x": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
      "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
      "cpu": [
        "s390x"
      ],
      "libc": [
        "glibc"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "linux"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-linux-x64": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
      "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "glibc"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "linux"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
      "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "musl"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "linux"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-libvips-linuxmusl-x64": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
      "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "musl"
      ],
      "license": "LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "linux"
      ],
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-linux-arm": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
      "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
      "cpu": [
        "arm"
      ],
      "libc": [
        "glibc"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-linux-arm": "1.0.5"
      }
    },
    "node_modules/@img/sharp-linux-arm64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
      "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "glibc"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-linux-arm64": "1.0.4"
      }
    },
    "node_modules/@img/sharp-linux-s390x": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
      "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
      "cpu": [
        "s390x"
      ],
      "libc": [
        "glibc"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-linux-s390x": "1.0.4"
      }
    },
    "node_modules/@img/sharp-linux-x64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
      "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "glibc"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-linux-x64": "1.0.4"
      }
    },
    "node_modules/@img/sharp-linuxmusl-arm64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
      "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "musl"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
      }
    },
    "node_modules/@img/sharp-linuxmusl-x64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
      "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "musl"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
      }
    },
    "node_modules/@img/sharp-wasm32": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
      "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
      "cpu": [
        "wasm32"
      ],
      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
      "optional": true,
      "dependencies": {
        "@emnapi/runtime": "^1.2.0"
      },
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-win32-ia32": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
      "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
      "cpu": [
        "ia32"
      ],
      "license": "Apache-2.0 AND LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@img/sharp-win32-x64": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
      "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0 AND LGPL-3.0-or-later",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      }
    },
    "node_modules/@jridgewell/gen-mapping": {
      "version": "0.3.13",
      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
      "license": "MIT",
      "dependencies": {
        "@jridgewell/sourcemap-codec": "^1.5.0",
        "@jridgewell/trace-mapping": "^0.3.24"
      }
    },
    "node_modules/@jridgewell/resolve-uri": {
      "version": "3.1.2",
      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
      "license": "MIT",
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@jridgewell/source-map": {
      "version": "0.3.11",
      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
      "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
      "license": "MIT",
      "dependencies": {
        "@jridgewell/gen-mapping": "^0.3.5",
        "@jridgewell/trace-mapping": "^0.3.25"
      }
    },
    "node_modules/@jridgewell/sourcemap-codec": {
      "version": "1.6.0",
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
      "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
      "license": "MIT"
    },
    "node_modules/@jridgewell/trace-mapping": {
      "version": "0.3.31",
      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
      "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
      "license": "MIT",
      "dependencies": {
        "@jridgewell/resolve-uri": "^3.1.0",
        "@jridgewell/sourcemap-codec": "^1.4.14"
      }
    },
    "node_modules/@mediabunny/aac-encoder": {
      "version": "1.45.0",
      "resolved": "https://registry.npmjs.org/@mediabunny/aac-encoder/-/aac-encoder-1.45.0.tgz",
      "integrity": "sha512-vLQw8cY7Me6pvTTMkMhOiH9UCuINzfTOETCeDxbGNeNfDqc/7QlxloUH1Ylp/Zz2ek0O8kc6YdygV2vWAPakrA==",
      "license": "MPL-2.0",
      "funding": {
        "type": "individual",
        "url": "https://github.com/sponsors/Vanilagy"
      },
      "peerDependencies": {
        "mediabunny": "^1.0.0"
      }
    },
    "node_modules/@mediabunny/flac-encoder": {
      "version": "1.45.0",
      "resolved": "https://registry.npmjs.org/@mediabunny/flac-encoder/-/flac-encoder-1.45.0.tgz",
      "integrity": "sha512-LfKbAMZVkxRS7PpEIVnWOY/l0KcHv+rjO7pYY3O0TPCZvbHWfrnQjn8JPacPIfuq6Yv7r4f8lhcl7yHSynoRkQ==",
      "license": "MPL-2.0",
      "funding": {
        "type": "individual",
        "url": "https://github.com/sponsors/Vanilagy"
      },
      "peerDependencies": {
        "mediabunny": "^1.0.0"
      }
    },
    "node_modules/@mediabunny/mp3-encoder": {
      "version": "1.45.0",
      "resolved": "https://registry.npmjs.org/@mediabunny/mp3-encoder/-/mp3-encoder-1.45.0.tgz",
      "integrity": "sha512-Bobi6AaQYEc7TWmPJ8Q0/hcUtBN7pLUC2qjoC7oZR4FcGqGztby6k7A1SWlmswoMOEIhYsOrgDaemrSDAC0QVQ==",
      "license": "MPL-2.0",
      "funding": {
        "type": "individual",
        "url": "https://github.com/sponsors/Vanilagy"
      },
      "peerDependencies": {
        "mediabunny": "^1.0.0"
      }
    },
    "node_modules/@module-federation/error-codes": {
      "version": "0.22.0",
      "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz",
      "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==",
      "license": "MIT"
    },
    "node_modules/@module-federation/runtime": {
      "version": "0.22.0",
      "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz",
      "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==",
      "license": "MIT",
      "dependencies": {
        "@module-federation/error-codes": "0.22.0",
        "@module-federation/runtime-core": "0.22.0",
        "@module-federation/sdk": "0.22.0"
      }
    },
    "node_modules/@module-federation/runtime-core": {
      "version": "0.22.0",
      "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz",
      "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==",
      "license": "MIT",
      "dependencies": {
        "@module-federation/error-codes": "0.22.0",
        "@module-federation/sdk": "0.22.0"
      }
    },
    "node_modules/@module-federation/runtime-tools": {
      "version": "0.22.0",
      "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz",
      "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==",
      "license": "MIT",
      "dependencies": {
        "@module-federation/runtime": "0.22.0",
        "@module-federation/webpack-bundler-runtime": "0.22.0"
      }
    },
    "node_modules/@module-federation/sdk": {
      "version": "0.22.0",
      "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz",
      "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==",
      "license": "MIT"
    },
    "node_modules/@module-federation/webpack-bundler-runtime": {
      "version": "0.22.0",
      "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz",
      "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==",
      "license": "MIT",
      "dependencies": {
        "@module-federation/runtime": "0.22.0",
        "@module-federation/sdk": "0.22.0"
      }
    },
    "node_modules/@napi-rs/wasm-runtime": {
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz",
      "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==",
      "license": "MIT",
      "optional": true,
      "dependencies": {
        "@emnapi/core": "^1.5.0",
        "@emnapi/runtime": "^1.5.0",
        "@tybys/wasm-util": "^0.10.1"
      }
    },
    "node_modules/@remotion/bundler": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.473.tgz",
      "integrity": "sha512-UOGKU3iSmU5mICCcW9qZx++sSBssjAZofX8UA3pbyKJIVvVfG+QznikA0fI4W+1/1l5zMyxd/fwMFbz8+q4u2A==",
      "license": "SEE LICENSE IN LICENSE.md",
      "dependencies": {
        "@remotion/media-parser": "4.0.473",
        "@remotion/studio": "4.0.473",
        "@remotion/studio-shared": "4.0.473",
        "@remotion/timeline-utils": "4.0.473",
        "@rspack/core": "1.7.6",
        "@rspack/plugin-react-refresh": "1.6.1",
        "css-loader": "7.1.4",
        "esbuild": "0.28.0",
        "react-refresh": "0.18.0",
        "remotion": "4.0.473",
        "style-loader": "4.0.0",
        "webpack": "5.105.0"
      },
      "peerDependencies": {
        "react": ">=16.8.0",
        "react-dom": ">=16.8.0"
      }
    },
    "node_modules/@remotion/compositor-darwin-arm64": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.473.tgz",
      "integrity": "sha512-cSKS6VPKpLlEs+W0TSgXbxzdHDFxj+ft1jeP/MhedtL3rcSDyjir8RTI8bqDgrcEF4km3Rcg0CxrGbYTKgUVVQ==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "darwin"
      ]
    },
    "node_modules/@remotion/compositor-darwin-x64": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.473.tgz",
      "integrity": "sha512-Sf0IHz/zXroP4UGZ0NkyVn0ICiOMeUj07i8nRoz0A95d4TDR3YKVThY4U16ElsaLSbHk3pMcobCxx1tscvtZYQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "darwin"
      ]
    },
    "node_modules/@remotion/compositor-linux-arm64-gnu": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.473.tgz",
      "integrity": "sha512-HeV247O9dwhSfXFYoA7Dd0zPmyn2grbrIhaYs2MJZxO6IHmEUk0gm9/drWyjDHy4e2WCg98uSlcycNOmWtG5ng==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "glibc"
      ],
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@remotion/compositor-linux-arm64-musl": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.473.tgz",
      "integrity": "sha512-7EGy2MtQch3yLzwxvWncz/3rmXOWQkWigCDL37I90aHhlf8JgrMZXo8dUtIoD0LP/zHWtFNBcJmgg9Ej+bHshA==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "musl"
      ],
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@remotion/compositor-linux-x64-gnu": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.473.tgz",
      "integrity": "sha512-X5Gzod9Q8sTtzjc+hIYKw6PMaB3tY0ADx68j2z+Zm8nJanmkzLZEDyZvlMexmE4nkb7IdOkHzYGm9NpynbMH2A==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "glibc"
      ],
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@remotion/compositor-linux-x64-musl": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.473.tgz",
      "integrity": "sha512-REyhvrjGYfFTxGaaRDP31zANM744JI7pKXCgTqXHZBCe8mCZjxZCxmwt9pNL2lJsQ+qLr9zai488Bbj/PUuB6g==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "musl"
      ],
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@remotion/compositor-win32-x64-msvc": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.473.tgz",
      "integrity": "sha512-J69HIENHpH1m8I85kTe111viqB5AGgKJdTCSKp4mGBxM95IL4nydzrYxVd91BvWjanQfVVq1C3voaF8YLwkT7A==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@remotion/licensing": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.473.tgz",
      "integrity": "sha512-BBw6SuEWuUD/lYXbLKEC0TTUzW7aLsO0X72pG38W1dOUyfU2KZYYfWGZkd+ermZTWWJ8cW+mevIwloUGk7FRaQ==",
      "license": "MIT"
    },
    "node_modules/@remotion/media-parser": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.473.tgz",
      "integrity": "sha512-jajhgumDSdnM/CUb3lZgae7D2pfioz9rczc6tLaRNP28IG3d2foQ0jP8INfCdMsOszCD0wKw4RHe0m5GKRxhTg==",
      "license": "Remotion License https://remotion.dev/license"
    },
    "node_modules/@remotion/media-utils": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.473.tgz",
      "integrity": "sha512-f4Ip10pkawlUBTunE++DZ6J/TrPtKalkxoTx7qQGBlhz3BcWRK7AbEGouZtcAmkLFVxq80hpH/1cBFOMF6FVfA==",
      "license": "MIT",
      "dependencies": {
        "mediabunny": "1.45.0",
        "remotion": "4.0.473"
      },
      "peerDependencies": {
        "react": ">=16.8.0",
        "react-dom": ">=16.8.0"
      }
    },
    "node_modules/@remotion/player": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.473.tgz",
      "integrity": "sha512-giJ8cIQEdVxftpcX4m+9jWYCbIvpcdKRGVUc3ownxYEsJ30WUSP2+TuQ6aqqLXFAfwhY/SdBVLfopylh3BgMXA==",
      "license": "SEE LICENSE IN LICENSE.md",
      "dependencies": {
        "remotion": "4.0.473"
      },
      "peerDependencies": {
        "react": ">=16.8.0",
        "react-dom": ">=16.8.0"
      }
    },
    "node_modules/@remotion/renderer": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.473.tgz",
      "integrity": "sha512-WOOmT38O3ax78oDIE75FnsDi8eUMBKOdnqiXU3NeArNoA/xQZv7yDUgV3e1SxFaCHS7IbWHIATXUfVgS8TIXBA==",
      "license": "SEE LICENSE IN LICENSE.md",
      "dependencies": {
        "@remotion/licensing": "4.0.473",
        "@remotion/streaming": "4.0.473",
        "execa": "5.1.1",
        "remotion": "4.0.473",
        "source-map": "0.8.0-beta.0",
        "ws": "8.20.1"
      },
      "optionalDependencies": {
        "@remotion/compositor-darwin-arm64": "4.0.473",
        "@remotion/compositor-darwin-x64": "4.0.473",
        "@remotion/compositor-linux-arm64-gnu": "4.0.473",
        "@remotion/compositor-linux-arm64-musl": "4.0.473",
        "@remotion/compositor-linux-x64-gnu": "4.0.473",
        "@remotion/compositor-linux-x64-musl": "4.0.473",
        "@remotion/compositor-win32-x64-msvc": "4.0.473"
      },
      "peerDependencies": {
        "react": ">=16.8.0",
        "react-dom": ">=16.8.0"
      }
    },
    "node_modules/@remotion/streaming": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.473.tgz",
      "integrity": "sha512-JRXgqnzHbcaZU+LH3VK9KRNBHd7rhNnf34C3uUeFYFChRQhnmHWTSo7p/SDUhCpVh+hIHsS52xJz9JPwwy5gUw==",
      "license": "MIT"
    },
    "node_modules/@remotion/studio": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.473.tgz",
      "integrity": "sha512-d7FnevW0TGhoJovdLs/Mi8kmthj800QL5gSxDXlpoznymeT41CdRRgiQoXGM2f43r7WyoX0bvE2i9AxIogJoWg==",
      "license": "MIT",
      "dependencies": {
        "@jridgewell/trace-mapping": "0.3.31",
        "@remotion/media-utils": "4.0.473",
        "@remotion/player": "4.0.473",
        "@remotion/renderer": "4.0.473",
        "@remotion/studio-shared": "4.0.473",
        "@remotion/timeline-utils": "4.0.473",
        "@remotion/web-renderer": "4.0.473",
        "@remotion/zod-types": "4.0.473",
        "mediabunny": "1.45.0",
        "memfs": "3.4.3",
        "open": "8.4.2",
        "remotion": "4.0.473",
        "semver": "7.5.3",
        "zod": "4.3.6"
      },
      "peerDependencies": {
        "react": ">=16.8.0",
        "react-dom": ">=16.8.0"
      }
    },
    "node_modules/@remotion/studio-shared": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.473.tgz",
      "integrity": "sha512-nOONVvgEMw0lL7oPobmXAguvKVgVnV6MAwOfB5ZvjJrkLorFFePZ8ryhoftpRVrn3hGU3ZgQM2Zbb2eiaQPycg==",
      "license": "MIT",
      "dependencies": {
        "remotion": "4.0.473"
      }
    },
    "node_modules/@remotion/timeline-utils": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/timeline-utils/-/timeline-utils-4.0.473.tgz",
      "integrity": "sha512-DrEvnOY97lBlMVUJkU997Ip70Z1hkggXVoiZZk7udTIpkrbhEfI4GrdOd/HOMCTtniepkGH8kXmk6Aqv99Q0uA==",
      "license": "MIT",
      "dependencies": {
        "mediabunny": "1.45.0"
      }
    },
    "node_modules/@remotion/web-renderer": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.473.tgz",
      "integrity": "sha512-WTyFdBdqsmmqrMpW1k6Uhcze2z8tZvKc15BYu1FwmDgdQ1QeaAMgEsyp5qRLzKZ/000XafK4q8bUjdEQoudc8A==",
      "license": "UNLICENSED",
      "dependencies": {
        "@mediabunny/aac-encoder": "1.45.0",
        "@mediabunny/flac-encoder": "1.45.0",
        "@mediabunny/mp3-encoder": "1.45.0",
        "@remotion/licensing": "4.0.473",
        "mediabunny": "1.45.0",
        "remotion": "4.0.473"
      },
      "peerDependencies": {
        "react": ">=18.0.0",
        "react-dom": ">=18.0.0"
      }
    },
    "node_modules/@remotion/zod-types": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.473.tgz",
      "integrity": "sha512-hAUla1gXVe6afzoRACiDp2L58pgGOfS5pxAG9wPHLv2Br16K6K/ToGZYLwxwugUxmZdMNPGOCkR3pWK5x7O5HQ==",
      "license": "MIT",
      "dependencies": {
        "remotion": "4.0.473"
      },
      "peerDependencies": {
        "zod": "4.3.6"
      }
    },
    "node_modules/@rspack/binding": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.6.tgz",
      "integrity": "sha512-/NrEcfo8Gx22hLGysanrV6gHMuqZSxToSci/3M4kzEQtF5cPjfOv5pqeLK/+B6cr56ul/OmE96cCdWcXeVnFjQ==",
      "license": "MIT",
      "optionalDependencies": {
        "@rspack/binding-darwin-arm64": "1.7.6",
        "@rspack/binding-darwin-x64": "1.7.6",
        "@rspack/binding-linux-arm64-gnu": "1.7.6",
        "@rspack/binding-linux-arm64-musl": "1.7.6",
        "@rspack/binding-linux-x64-gnu": "1.7.6",
        "@rspack/binding-linux-x64-musl": "1.7.6",
        "@rspack/binding-wasm32-wasi": "1.7.6",
        "@rspack/binding-win32-arm64-msvc": "1.7.6",
        "@rspack/binding-win32-ia32-msvc": "1.7.6",
        "@rspack/binding-win32-x64-msvc": "1.7.6"
      }
    },
    "node_modules/@rspack/binding-darwin-arm64": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.6.tgz",
      "integrity": "sha512-NZ9AWtB1COLUX1tA9HQQvWpTy07NSFfKBU8A6ylWd5KH8AePZztpNgLLAVPTuNO4CZXYpwcoclf8jG/luJcQdQ==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ]
    },
    "node_modules/@rspack/binding-darwin-x64": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.6.tgz",
      "integrity": "sha512-J2g6xk8ZS7uc024dNTGTHxoFzFovAZIRixUG7PiciLKTMP78svbSSWrmW6N8oAsAkzYfJWwQpVgWfFNRHvYxSw==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ]
    },
    "node_modules/@rspack/binding-linux-arm64-gnu": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.6.tgz",
      "integrity": "sha512-eQfcsaxhFrv5FmtaA7+O1F9/2yFDNIoPZzV/ZvqvFz5bBXVc4FAm/1fVpBg8Po/kX1h0chBc7Xkpry3cabFW8w==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "glibc"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rspack/binding-linux-arm64-musl": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.6.tgz",
      "integrity": "sha512-DfQXKiyPIl7i1yECHy4eAkSmlUzzsSAbOjgMuKn7pudsWf483jg0UUYutNgXSlBjc/QSUp7906Cg8oty9OfwPA==",
      "cpu": [
        "arm64"
      ],
      "libc": [
        "musl"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rspack/binding-linux-x64-gnu": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.6.tgz",
      "integrity": "sha512-NdA+2X3lk2GGrMMnTGyYTzM3pn+zNjaqXqlgKmFBXvjfZqzSsKq3pdD1KHZCd5QHN+Fwvoszj0JFsquEVhE1og==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "glibc"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rspack/binding-linux-x64-musl": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.6.tgz",
      "integrity": "sha512-rEy6MHKob02t/77YNgr6dREyJ0e0tv1X6Xsg8Z5E7rPXead06zefUbfazj4RELYySWnM38ovZyJAkPx/gOn3VA==",
      "cpu": [
        "x64"
      ],
      "libc": [
        "musl"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rspack/binding-wasm32-wasi": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.6.tgz",
      "integrity": "sha512-YupOrz0daSG+YBbCIgpDgzfMM38YpChv+afZpaxx5Ml7xPeAZIIdgWmLHnQ2rts73N2M1NspAiBwV00Xx0N4Vg==",
      "cpu": [
        "wasm32"
      ],
      "license": "MIT",
      "optional": true,
      "dependencies": {
        "@napi-rs/wasm-runtime": "1.0.7"
      }
    },
    "node_modules/@rspack/binding-win32-arm64-msvc": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.6.tgz",
      "integrity": "sha512-INj7aVXjBvlZ84kEhSK4kJ484ub0i+BzgnjDWOWM1K+eFYDZjLdAsQSS3fGGXwVc3qKbPIssFfnftATDMTEJHQ==",
      "cpu": [
        "arm64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@rspack/binding-win32-ia32-msvc": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.6.tgz",
      "integrity": "sha512-lXGvC+z67UMcw58In12h8zCa9IyYRmuptUBMItQJzu+M278aMuD1nETyGLL7e4+OZ2lvrnnBIcjXN1hfw2yRzw==",
      "cpu": [
        "ia32"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@rspack/binding-win32-x64-msvc": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.6.tgz",
      "integrity": "sha512-zeUxEc0ZaPpmaYlCeWcjSJUPuRRySiSHN23oJ2Xyw0jsQ01Qm4OScPdr0RhEOFuK/UE+ANyRtDo4zJsY52Hadw==",
      "cpu": [
        "x64"
      ],
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@rspack/core": {
      "version": "1.7.6",
      "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.6.tgz",
      "integrity": "sha512-Iax6UhrfZqJajA778c1d5DBFbSIqPOSrI34kpNIiNpWd8Jq7mFIa+Z60SQb5ZQDZuUxcCZikjz5BxinFjTkg7Q==",
      "license": "MIT",
      "dependencies": {
        "@module-federation/runtime-tools": "0.22.0",
        "@rspack/binding": "1.7.6",
        "@rspack/lite-tapable": "1.1.0"
      },
      "engines": {
        "node": ">=18.12.0"
      },
      "peerDependencies": {
        "@swc/helpers": ">=0.5.1"
      },
      "peerDependenciesMeta": {
        "@swc/helpers": {
          "optional": true
        }
      }
    },
    "node_modules/@rspack/lite-tapable": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz",
      "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==",
      "license": "MIT"
    },
    "node_modules/@rspack/plugin-react-refresh": {
      "version": "1.6.1",
      "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.1.tgz",
      "integrity": "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw==",
      "license": "MIT",
      "dependencies": {
        "error-stack-parser": "^2.1.4",
        "html-entities": "^2.6.0"
      },
      "peerDependencies": {
        "react-refresh": ">=0.10.0 <1.0.0",
        "webpack-hot-middleware": "2.x"
      },
      "peerDependenciesMeta": {
        "webpack-hot-middleware": {
          "optional": true
        }
      }
    },
    "node_modules/@tybys/wasm-util": {
      "version": "0.10.3",
      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
      "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
      "license": "MIT",
      "optional": true,
      "dependencies": {
        "tslib": "^2.4.0"
      }
    },
    "node_modules/@types/dom-mediacapture-transform": {
      "version": "0.1.12",
      "resolved": "https://registry.npmjs.org/@types/dom-mediacapture-transform/-/dom-mediacapture-transform-0.1.12.tgz",
      "integrity": "sha512-d7/QsLRwF864A5mgIM/YrfiglHoYn7zgCcAoJgW404r+2DwnNr7EBbLnCWpmOMgH8y0te73L1AV6H1bmauaWFw==",
      "license": "MIT",
      "dependencies": {
        "@types/dom-webcodecs": "*"
      }
    },
    "node_modules/@types/dom-webcodecs": {
      "version": "0.1.13",
      "resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz",
      "integrity": "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==",
      "license": "MIT"
    },
    "node_modules/@types/eslint": {
      "version": "9.6.1",
      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
      "license": "MIT",
      "dependencies": {
        "@types/estree": "*",
        "@types/json-schema": "*"
      }
    },
    "node_modules/@types/eslint-scope": {
      "version": "3.7.7",
      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
      "license": "MIT",
      "dependencies": {
        "@types/eslint": "*",
        "@types/estree": "*"
      }
    },
    "node_modules/@types/estree": {
      "version": "1.0.9",
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
      "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
      "license": "MIT"
    },
    "node_modules/@types/json-schema": {
      "version": "7.0.15",
      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
      "license": "MIT"
    },
    "node_modules/@types/node": {
      "version": "26.5.0",
      "resolved": "https://registry.npmjs.org/@types/node/-/node-26.5.0.tgz",
      "integrity": "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==",
      "license": "MIT",
      "dependencies": {
        "undici-types": "~8.9.0"
      }
    },
    "node_modules/@webassemblyjs/ast": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
      "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/helper-numbers": "1.13.2",
        "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
      }
    },
    "node_modules/@webassemblyjs/floating-point-hex-parser": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
      "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
      "license": "MIT"
    },
    "node_modules/@webassemblyjs/helper-api-error": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
      "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
      "license": "MIT"
    },
    "node_modules/@webassemblyjs/helper-buffer": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
      "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
      "license": "MIT"
    },
    "node_modules/@webassemblyjs/helper-numbers": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
      "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/floating-point-hex-parser": "1.13.2",
        "@webassemblyjs/helper-api-error": "1.13.2",
        "@xtuc/long": "4.2.2"
      }
    },
    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
      "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
      "license": "MIT"
    },
    "node_modules/@webassemblyjs/helper-wasm-section": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
      "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/ast": "1.14.1",
        "@webassemblyjs/helper-buffer": "1.14.1",
        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
        "@webassemblyjs/wasm-gen": "1.14.1"
      }
    },
    "node_modules/@webassemblyjs/ieee754": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
      "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
      "license": "MIT",
      "dependencies": {
        "@xtuc/ieee754": "^1.2.0"
      }
    },
    "node_modules/@webassemblyjs/leb128": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
      "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
      "license": "Apache-2.0",
      "dependencies": {
        "@xtuc/long": "4.2.2"
      }
    },
    "node_modules/@webassemblyjs/utf8": {
      "version": "1.13.2",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
      "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
      "license": "MIT"
    },
    "node_modules/@webassemblyjs/wasm-edit": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
      "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/ast": "1.14.1",
        "@webassemblyjs/helper-buffer": "1.14.1",
        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
        "@webassemblyjs/helper-wasm-section": "1.14.1",
        "@webassemblyjs/wasm-gen": "1.14.1",
        "@webassemblyjs/wasm-opt": "1.14.1",
        "@webassemblyjs/wasm-parser": "1.14.1",
        "@webassemblyjs/wast-printer": "1.14.1"
      }
    },
    "node_modules/@webassemblyjs/wasm-gen": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
      "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/ast": "1.14.1",
        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
        "@webassemblyjs/ieee754": "1.13.2",
        "@webassemblyjs/leb128": "1.13.2",
        "@webassemblyjs/utf8": "1.13.2"
      }
    },
    "node_modules/@webassemblyjs/wasm-opt": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
      "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/ast": "1.14.1",
        "@webassemblyjs/helper-buffer": "1.14.1",
        "@webassemblyjs/wasm-gen": "1.14.1",
        "@webassemblyjs/wasm-parser": "1.14.1"
      }
    },
    "node_modules/@webassemblyjs/wasm-parser": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
      "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/ast": "1.14.1",
        "@webassemblyjs/helper-api-error": "1.13.2",
        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
        "@webassemblyjs/ieee754": "1.13.2",
        "@webassemblyjs/leb128": "1.13.2",
        "@webassemblyjs/utf8": "1.13.2"
      }
    },
    "node_modules/@webassemblyjs/wast-printer": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
      "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
      "license": "MIT",
      "dependencies": {
        "@webassemblyjs/ast": "1.14.1",
        "@xtuc/long": "4.2.2"
      }
    },
    "node_modules/@xtuc/ieee754": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
      "license": "BSD-3-Clause"
    },
    "node_modules/@xtuc/long": {
      "version": "4.2.2",
      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
      "license": "Apache-2.0"
    },
    "node_modules/acorn": {
      "version": "8.18.0",
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
      "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
      "license": "MIT",
      "bin": {
        "acorn": "bin/acorn"
      },
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/acorn-import-phases": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
      "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
      "license": "MIT",
      "engines": {
        "node": ">=10.13.0"
      },
      "peerDependencies": {
        "acorn": "^8.14.0"
      }
    },
    "node_modules/ajv": {
      "version": "8.20.0",
      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
      "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
      "license": "MIT",
      "dependencies": {
        "fast-deep-equal": "^3.1.3",
        "fast-uri": "^3.0.1",
        "json-schema-traverse": "^1.0.0",
        "require-from-string": "^2.0.2"
      },
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/epoberezkin"
      }
    },
    "node_modules/ajv-formats": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
      "license": "MIT",
      "dependencies": {
        "ajv": "^8.0.0"
      },
      "peerDependencies": {
        "ajv": "^8.0.0"
      },
      "peerDependenciesMeta": {
        "ajv": {
          "optional": true
        }
      }
    },
    "node_modules/ajv-keywords": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
      "license": "MIT",
      "dependencies": {
        "fast-deep-equal": "^3.1.3"
      },
      "peerDependencies": {
        "ajv": "^8.8.2"
      }
    },
    "node_modules/baseline-browser-mapping": {
      "version": "2.11.21",
      "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz",
      "integrity": "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==",
      "license": "Apache-2.0",
      "bin": {
        "baseline-browser-mapping": "dist/cli.cjs"
      },
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/browserslist": {
      "version": "4.28.9",
      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
      "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/browserslist"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "baseline-browser-mapping": "^2.11.20",
        "caniuse-lite": "^1.0.30001810",
        "electron-to-chromium": "^1.5.420",
        "node-releases": "^2.0.54",
        "update-browserslist-db": "^1.3.2"
      },
      "bin": {
        "browserslist": "cli.js"
      },
      "engines": {
        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
      }
    },
    "node_modules/buffer-from": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
      "license": "MIT"
    },
    "node_modules/caniuse-lite": {
      "version": "1.0.30001810",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
      "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "CC-BY-4.0"
    },
    "node_modules/chrome-trace-event": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
      "license": "MIT",
      "engines": {
        "node": ">=6.0"
      }
    },
    "node_modules/color": {
      "version": "4.2.3",
      "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
      "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
      "license": "MIT",
      "dependencies": {
        "color-convert": "^2.0.1",
        "color-string": "^1.9.0"
      },
      "engines": {
        "node": ">=12.5.0"
      }
    },
    "node_modules/color-convert": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
      "license": "MIT",
      "dependencies": {
        "color-name": "~1.1.4"
      },
      "engines": {
        "node": ">=7.0.0"
      }
    },
    "node_modules/color-name": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
      "license": "MIT"
    },
    "node_modules/color-string": {
      "version": "1.9.1",
      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
      "license": "MIT",
      "dependencies": {
        "color-name": "^1.0.0",
        "simple-swizzle": "^0.2.2"
      }
    },
    "node_modules/commander": {
      "version": "2.20.3",
      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
      "license": "MIT"
    },
    "node_modules/cross-spawn": {
      "version": "7.0.6",
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
      "license": "MIT",
      "dependencies": {
        "path-key": "^3.1.0",
        "shebang-command": "^2.0.0",
        "which": "^2.0.1"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/css-loader": {
      "version": "7.1.4",
      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.4.tgz",
      "integrity": "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==",
      "license": "MIT",
      "dependencies": {
        "icss-utils": "^5.1.0",
        "postcss": "^8.4.40",
        "postcss-modules-extract-imports": "^3.1.0",
        "postcss-modules-local-by-default": "^4.0.5",
        "postcss-modules-scope": "^3.2.0",
        "postcss-modules-values": "^4.0.0",
        "postcss-value-parser": "^4.2.0",
        "semver": "^7.6.3"
      },
      "engines": {
        "node": ">= 18.12.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      },
      "peerDependencies": {
        "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0",
        "webpack": "^5.27.0"
      },
      "peerDependenciesMeta": {
        "@rspack/core": {
          "optional": true
        },
        "webpack": {
          "optional": true
        }
      }
    },
    "node_modules/css-loader/node_modules/semver": {
      "version": "7.8.5",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
      "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
      "license": "ISC",
      "bin": {
        "semver": "bin/semver.js"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/cssesc": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
      "license": "MIT",
      "bin": {
        "cssesc": "bin/cssesc"
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/define-lazy-prop": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/detect-libc": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
      "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
      "license": "Apache-2.0",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/electron-to-chromium": {
      "version": "1.5.424",
      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.424.tgz",
      "integrity": "sha512-rTOe76LHREmnLOWc0NlakB7AlnWjhTNflk4YE3gnIBPbSXLiY+VDEgwYl4wAYdBPD7eq9NQq6TR8lvd9Fls2CA==",
      "license": "ISC"
    },
    "node_modules/enhanced-resolve": {
      "version": "5.24.5",
      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz",
      "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==",
      "license": "MIT",
      "dependencies": {
        "graceful-fs": "^4.2.4",
        "tapable": "^2.3.3"
      },
      "engines": {
        "node": ">=10.13.0"
      }
    },
    "node_modules/error-stack-parser": {
      "version": "2.1.4",
      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
      "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
      "license": "MIT",
      "dependencies": {
        "stackframe": "^1.3.4"
      }
    },
    "node_modules/es-module-lexer": {
      "version": "2.3.2",
      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz",
      "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==",
      "license": "MIT"
    },
    "node_modules/esbuild": {
      "version": "0.28.0",
      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz",
      "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==",
      "hasInstallScript": true,
      "license": "MIT",
      "bin": {
        "esbuild": "bin/esbuild"
      },
      "engines": {
        "node": ">=18"
      },
      "optionalDependencies": {
        "@esbuild/aix-ppc64": "0.28.0",
        "@esbuild/android-arm": "0.28.0",
        "@esbuild/android-arm64": "0.28.0",
        "@esbuild/android-x64": "0.28.0",
        "@esbuild/darwin-arm64": "0.28.0",
        "@esbuild/darwin-x64": "0.28.0",
        "@esbuild/freebsd-arm64": "0.28.0",
        "@esbuild/freebsd-x64": "0.28.0",
        "@esbuild/linux-arm": "0.28.0",
        "@esbuild/linux-arm64": "0.28.0",
        "@esbuild/linux-ia32": "0.28.0",
        "@esbuild/linux-loong64": "0.28.0",
        "@esbuild/linux-mips64el": "0.28.0",
        "@esbuild/linux-ppc64": "0.28.0",
        "@esbuild/linux-riscv64": "0.28.0",
        "@esbuild/linux-s390x": "0.28.0",
        "@esbuild/linux-x64": "0.28.0",
        "@esbuild/netbsd-arm64": "0.28.0",
        "@esbuild/netbsd-x64": "0.28.0",
        "@esbuild/openbsd-arm64": "0.28.0",
        "@esbuild/openbsd-x64": "0.28.0",
        "@esbuild/openharmony-arm64": "0.28.0",
        "@esbuild/sunos-x64": "0.28.0",
        "@esbuild/win32-arm64": "0.28.0",
        "@esbuild/win32-ia32": "0.28.0",
        "@esbuild/win32-x64": "0.28.0"
      }
    },
    "node_modules/escalade": {
      "version": "3.2.0",
      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/eslint-scope": {
      "version": "5.1.1",
      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
      "license": "BSD-2-Clause",
      "dependencies": {
        "esrecurse": "^4.3.0",
        "estraverse": "^4.1.1"
      },
      "engines": {
        "node": ">=8.0.0"
      }
    },
    "node_modules/esrecurse": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
      "license": "BSD-2-Clause",
      "dependencies": {
        "estraverse": "^5.2.0"
      },
      "engines": {
        "node": ">=4.0"
      }
    },
    "node_modules/esrecurse/node_modules/estraverse": {
      "version": "5.3.0",
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
      "license": "BSD-2-Clause",
      "engines": {
        "node": ">=4.0"
      }
    },
    "node_modules/estraverse": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
      "license": "BSD-2-Clause",
      "engines": {
        "node": ">=4.0"
      }
    },
    "node_modules/events": {
      "version": "3.3.0",
      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
      "license": "MIT",
      "engines": {
        "node": ">=0.8.x"
      }
    },
    "node_modules/execa": {
      "version": "5.1.1",
      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
      "license": "MIT",
      "dependencies": {
        "cross-spawn": "^7.0.3",
        "get-stream": "^6.0.0",
        "human-signals": "^2.1.0",
        "is-stream": "^2.0.0",
        "merge-stream": "^2.0.0",
        "npm-run-path": "^4.0.1",
        "onetime": "^5.1.2",
        "signal-exit": "^3.0.3",
        "strip-final-newline": "^2.0.0"
      },
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/sindresorhus/execa?sponsor=1"
      }
    },
    "node_modules/fast-deep-equal": {
      "version": "3.1.3",
      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
      "license": "MIT"
    },
    "node_modules/fast-uri": {
      "version": "3.1.7",
      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz",
      "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/fastify"
        },
        {
          "type": "opencollective",
          "url": "https://opencollective.com/fastify"
        }
      ],
      "license": "BSD-3-Clause"
    },
    "node_modules/fs-monkey": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
      "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
      "license": "Unlicense"
    },
    "node_modules/get-stream": {
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
      "license": "MIT",
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/glob-to-regexp": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
      "license": "BSD-2-Clause"
    },
    "node_modules/graceful-fs": {
      "version": "4.2.11",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
      "license": "ISC"
    },
    "node_modules/has-flag": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/html-entities": {
      "version": "2.6.0",
      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz",
      "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/mdevils"
        },
        {
          "type": "patreon",
          "url": "https://patreon.com/mdevils"
        }
      ],
      "license": "MIT"
    },
    "node_modules/human-signals": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
      "license": "Apache-2.0",
      "engines": {
        "node": ">=10.17.0"
      }
    },
    "node_modules/icss-utils": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
      "license": "ISC",
      "engines": {
        "node": "^10 || ^12 || >= 14"
      },
      "peerDependencies": {
        "postcss": "^8.1.0"
      }
    },
    "node_modules/is-arrayish": {
      "version": "0.3.4",
      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
      "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
      "license": "MIT"
    },
    "node_modules/is-docker": {
      "version": "2.2.1",
      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
      "license": "MIT",
      "bin": {
        "is-docker": "cli.js"
      },
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-stream": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-wsl": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
      "license": "MIT",
      "dependencies": {
        "is-docker": "^2.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/isexe": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
      "license": "ISC"
    },
    "node_modules/jest-worker": {
      "version": "27.5.1",
      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
      "license": "MIT",
      "dependencies": {
        "@types/node": "*",
        "merge-stream": "^2.0.0",
        "supports-color": "^8.0.0"
      },
      "engines": {
        "node": ">= 10.13.0"
      }
    },
    "node_modules/json-parse-even-better-errors": {
      "version": "2.3.1",
      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
      "license": "MIT"
    },
    "node_modules/json-schema-traverse": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
      "license": "MIT"
    },
    "node_modules/loader-runner": {
      "version": "4.3.2",
      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz",
      "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==",
      "license": "MIT",
      "engines": {
        "node": ">=6.11.5"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      }
    },
    "node_modules/lodash.sortby": {
      "version": "4.7.0",
      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
      "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
      "license": "MIT"
    },
    "node_modules/lru-cache": {
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
      "license": "ISC",
      "dependencies": {
        "yallist": "^4.0.0"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/mediabunny": {
      "version": "1.45.0",
      "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.45.0.tgz",
      "integrity": "sha512-oK3sMMYbucoF6LUX62L/2M9d+p9ve6KDQgL87kNfhsB0/XmTe9iRLUcgQgg9Gpgvi8Sb96zYfOUL6i17y0bdNg==",
      "license": "MPL-2.0",
      "workspaces": [
        ".",
        "packages/*"
      ],
      "dependencies": {
        "@types/dom-mediacapture-transform": "^0.1.11",
        "@types/dom-webcodecs": "0.1.13"
      },
      "funding": {
        "type": "individual",
        "url": "https://github.com/sponsors/Vanilagy"
      }
    },
    "node_modules/memfs": {
      "version": "3.4.3",
      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz",
      "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==",
      "license": "Unlicense",
      "dependencies": {
        "fs-monkey": "1.0.3"
      },
      "engines": {
        "node": ">= 4.0.0"
      }
    },
    "node_modules/merge-stream": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
      "license": "MIT"
    },
    "node_modules/mime-db": {
      "version": "1.52.0",
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
      "license": "MIT",
      "engines": {
        "node": ">= 0.6"
      }
    },
    "node_modules/mime-types": {
      "version": "2.1.35",
      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
      "license": "MIT",
      "dependencies": {
        "mime-db": "1.52.0"
      },
      "engines": {
        "node": ">= 0.6"
      }
    },
    "node_modules/mimic-fn": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/nanoid": {
      "version": "3.3.18",
      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
      "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "bin": {
        "nanoid": "bin/nanoid.cjs"
      },
      "engines": {
        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
      }
    },
    "node_modules/neo-async": {
      "version": "2.6.2",
      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
      "license": "MIT"
    },
    "node_modules/node-releases": {
      "version": "2.0.54",
      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz",
      "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==",
      "license": "MIT",
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/npm-run-path": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
      "license": "MIT",
      "dependencies": {
        "path-key": "^3.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/onetime": {
      "version": "5.1.2",
      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
      "license": "MIT",
      "dependencies": {
        "mimic-fn": "^2.1.0"
      },
      "engines": {
        "node": ">=6"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/open": {
      "version": "8.4.2",
      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
      "license": "MIT",
      "dependencies": {
        "define-lazy-prop": "^2.0.0",
        "is-docker": "^2.1.1",
        "is-wsl": "^2.2.0"
      },
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/path-key": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/picocolors": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
      "license": "ISC"
    },
    "node_modules/playwright-core": {
      "version": "1.63.0",
      "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz",
      "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==",
      "license": "Apache-2.0",
      "bin": {
        "playwright-core": "cli.js"
      },
      "engines": {
        "node": ">=20"
      }
    },
    "node_modules/postcss": {
      "version": "8.5.28",
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
      "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/postcss/"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/postcss"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "nanoid": "^3.3.18",
        "picocolors": "^1.1.1",
        "source-map-js": "^1.2.1"
      },
      "engines": {
        "node": "^10 || ^12 || >=14"
      }
    },
    "node_modules/postcss-modules-extract-imports": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
      "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
      "license": "ISC",
      "engines": {
        "node": "^10 || ^12 || >= 14"
      },
      "peerDependencies": {
        "postcss": "^8.1.0"
      }
    },
    "node_modules/postcss-modules-local-by-default": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
      "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
      "license": "MIT",
      "dependencies": {
        "icss-utils": "^5.0.0",
        "postcss-selector-parser": "^7.0.0",
        "postcss-value-parser": "^4.1.0"
      },
      "engines": {
        "node": "^10 || ^12 || >= 14"
      },
      "peerDependencies": {
        "postcss": "^8.1.0"
      }
    },
    "node_modules/postcss-modules-scope": {
      "version": "3.2.1",
      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
      "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
      "license": "ISC",
      "dependencies": {
        "postcss-selector-parser": "^7.0.0"
      },
      "engines": {
        "node": "^10 || ^12 || >= 14"
      },
      "peerDependencies": {
        "postcss": "^8.1.0"
      }
    },
    "node_modules/postcss-modules-values": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
      "license": "ISC",
      "dependencies": {
        "icss-utils": "^5.0.0"
      },
      "engines": {
        "node": "^10 || ^12 || >= 14"
      },
      "peerDependencies": {
        "postcss": "^8.1.0"
      }
    },
    "node_modules/postcss-selector-parser": {
      "version": "7.1.6",
      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
      "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
      "license": "MIT",
      "dependencies": {
        "cssesc": "^3.0.0",
        "util-deprecate": "^1.0.2"
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/postcss-value-parser": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
      "license": "MIT"
    },
    "node_modules/punycode": {
      "version": "2.3.1",
      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/react": {
      "version": "19.0.1",
      "resolved": "https://registry.npmjs.org/react/-/react-19.0.1.tgz",
      "integrity": "sha512-nVRaZCuEyvu69sWrkdwjP6QY57C+lY+uMNNMyWUFJb9Z/JlaBOQus7mSMfGYsblv7R691u6SSJA/dX9IRnyyLQ==",
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/react-dom": {
      "version": "19.0.1",
      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.1.tgz",
      "integrity": "sha512-3TJg51HSbJiLVYCS6vWwWsyqoS36aGEOCmtLLHxROlSZZ5Bk10xpxHFbrCu4DdqgR85DDc9Vucxqhai3g2xjtA==",
      "license": "MIT",
      "dependencies": {
        "scheduler": "^0.25.0"
      },
      "peerDependencies": {
        "react": "^19.0.1"
      }
    },
    "node_modules/react-refresh": {
      "version": "0.18.0",
      "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
      "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/remotion": {
      "version": "4.0.473",
      "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.473.tgz",
      "integrity": "sha512-Li2u4cVxlbxWgxQPn5oBpUlmNKYFpLUmpE9OHMP7QurvOMfvVK1tcC7utxVEwYFZf18tXwqIPBwmuFvdzMu+YA==",
      "license": "SEE LICENSE IN LICENSE.md",
      "peerDependencies": {
        "react": ">=16.8.0",
        "react-dom": ">=16.8.0"
      }
    },
    "node_modules/require-from-string": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/scheduler": {
      "version": "0.25.0",
      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
      "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
      "license": "MIT"
    },
    "node_modules/schema-utils": {
      "version": "4.3.3",
      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
      "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
      "license": "MIT",
      "dependencies": {
        "@types/json-schema": "^7.0.9",
        "ajv": "^8.9.0",
        "ajv-formats": "^2.1.1",
        "ajv-keywords": "^5.1.0"
      },
      "engines": {
        "node": ">= 10.13.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      }
    },
    "node_modules/semver": {
      "version": "7.5.3",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
      "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
      "license": "ISC",
      "dependencies": {
        "lru-cache": "^6.0.0"
      },
      "bin": {
        "semver": "bin/semver.js"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/sharp": {
      "version": "0.33.5",
      "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
      "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
      "hasInstallScript": true,
      "license": "Apache-2.0",
      "dependencies": {
        "color": "^4.2.3",
        "detect-libc": "^2.0.3",
        "semver": "^7.6.3"
      },
      "engines": {
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/libvips"
      },
      "optionalDependencies": {
        "@img/sharp-darwin-arm64": "0.33.5",
        "@img/sharp-darwin-x64": "0.33.5",
        "@img/sharp-libvips-darwin-arm64": "1.0.4",
        "@img/sharp-libvips-darwin-x64": "1.0.4",
        "@img/sharp-libvips-linux-arm": "1.0.5",
        "@img/sharp-libvips-linux-arm64": "1.0.4",
        "@img/sharp-libvips-linux-s390x": "1.0.4",
        "@img/sharp-libvips-linux-x64": "1.0.4",
        "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
        "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
        "@img/sharp-linux-arm": "0.33.5",
        "@img/sharp-linux-arm64": "0.33.5",
        "@img/sharp-linux-s390x": "0.33.5",
        "@img/sharp-linux-x64": "0.33.5",
        "@img/sharp-linuxmusl-arm64": "0.33.5",
        "@img/sharp-linuxmusl-x64": "0.33.5",
        "@img/sharp-wasm32": "0.33.5",
        "@img/sharp-win32-ia32": "0.33.5",
        "@img/sharp-win32-x64": "0.33.5"
      }
    },
    "node_modules/sharp/node_modules/semver": {
      "version": "7.8.5",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
      "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
      "license": "ISC",
      "bin": {
        "semver": "bin/semver.js"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/shebang-command": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
      "license": "MIT",
      "dependencies": {
        "shebang-regex": "^3.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/shebang-regex": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/signal-exit": {
      "version": "3.0.7",
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
      "license": "ISC"
    },
    "node_modules/simple-swizzle": {
      "version": "0.2.4",
      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
      "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
      "license": "MIT",
      "dependencies": {
        "is-arrayish": "^0.3.1"
      }
    },
    "node_modules/source-map": {
      "version": "0.8.0-beta.0",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
      "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
      "deprecated": "The work that was done in this beta branch won't be included in future versions",
      "license": "BSD-3-Clause",
      "dependencies": {
        "whatwg-url": "^7.0.0"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/source-map-js": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
      "license": "BSD-3-Clause",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/source-map-support": {
      "version": "0.5.21",
      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
      "license": "MIT",
      "dependencies": {
        "buffer-from": "^1.0.0",
        "source-map": "^0.6.0"
      }
    },
    "node_modules/source-map-support/node_modules/source-map": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
      "license": "BSD-3-Clause",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/stackframe": {
      "version": "1.3.4",
      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
      "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
      "license": "MIT"
    },
    "node_modules/strip-final-newline": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/style-loader": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz",
      "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==",
      "license": "MIT",
      "engines": {
        "node": ">= 18.12.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      },
      "peerDependencies": {
        "webpack": "^5.27.0"
      }
    },
    "node_modules/supports-color": {
      "version": "8.1.1",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
      "license": "MIT",
      "dependencies": {
        "has-flag": "^4.0.0"
      },
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/chalk/supports-color?sponsor=1"
      }
    },
    "node_modules/tapable": {
      "version": "2.3.3",
      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
      "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      }
    },
    "node_modules/terser": {
      "version": "5.51.2",
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz",
      "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==",
      "license": "BSD-2-Clause",
      "dependencies": {
        "@jridgewell/source-map": "^0.3.3",
        "acorn": "^8.15.0",
        "commander": "^2.20.0",
        "source-map-support": "~0.5.20"
      },
      "bin": {
        "terser": "bin/terser"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/terser-webpack-plugin": {
      "version": "5.6.1",
      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz",
      "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==",
      "license": "MIT",
      "dependencies": {
        "@jridgewell/trace-mapping": "^0.3.25",
        "jest-worker": "^27.4.5",
        "schema-utils": "^4.3.0",
        "terser": "^5.31.1"
      },
      "engines": {
        "node": ">= 10.13.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      },
      "peerDependencies": {
        "webpack": "^5.1.0"
      },
      "peerDependenciesMeta": {
        "@minify-html/node": {
          "optional": true
        },
        "@swc/core": {
          "optional": true
        },
        "@swc/css": {
          "optional": true
        },
        "@swc/html": {
          "optional": true
        },
        "clean-css": {
          "optional": true
        },
        "cssnano": {
          "optional": true
        },
        "csso": {
          "optional": true
        },
        "esbuild": {
          "optional": true
        },
        "html-minifier-terser": {
          "optional": true
        },
        "lightningcss": {
          "optional": true
        },
        "postcss": {
          "optional": true
        },
        "uglify-js": {
          "optional": true
        }
      }
    },
    "node_modules/tr46": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
      "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
      "license": "MIT",
      "dependencies": {
        "punycode": "^2.1.0"
      }
    },
    "node_modules/tslib": {
      "version": "2.8.1",
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
      "license": "0BSD",
      "optional": true
    },
    "node_modules/undici-types": {
      "version": "8.9.0",
      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
      "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
      "license": "MIT"
    },
    "node_modules/update-browserslist-db": {
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz",
      "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/browserslist"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "escalade": "^3.2.0",
        "picocolors": "^1.1.1"
      },
      "bin": {
        "update-browserslist-db": "cli.js"
      },
      "peerDependencies": {
        "browserslist": ">= 4.21.0"
      }
    },
    "node_modules/util-deprecate": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
      "license": "MIT"
    },
    "node_modules/watchpack": {
      "version": "2.5.2",
      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz",
      "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==",
      "license": "MIT",
      "dependencies": {
        "graceful-fs": "^4.1.2"
      },
      "engines": {
        "node": ">=10.13.0"
      }
    },
    "node_modules/webidl-conversions": {
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
      "license": "BSD-2-Clause"
    },
    "node_modules/webpack": {
      "version": "5.105.0",
      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
      "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
      "license": "MIT",
      "dependencies": {
        "@types/eslint-scope": "^3.7.7",
        "@types/estree": "^1.0.8",
        "@types/json-schema": "^7.0.15",
        "@webassemblyjs/ast": "^1.14.1",
        "@webassemblyjs/wasm-edit": "^1.14.1",
        "@webassemblyjs/wasm-parser": "^1.14.1",
        "acorn": "^8.15.0",
        "acorn-import-phases": "^1.0.3",
        "browserslist": "^4.28.1",
        "chrome-trace-event": "^1.0.2",
        "enhanced-resolve": "^5.19.0",
        "es-module-lexer": "^2.0.0",
        "eslint-scope": "5.1.1",
        "events": "^3.2.0",
        "glob-to-regexp": "^0.4.1",
        "graceful-fs": "^4.2.11",
        "json-parse-even-better-errors": "^2.3.1",
        "loader-runner": "^4.3.1",
        "mime-types": "^2.1.27",
        "neo-async": "^2.6.2",
        "schema-utils": "^4.3.3",
        "tapable": "^2.3.0",
        "terser-webpack-plugin": "^5.3.16",
        "watchpack": "^2.5.1",
        "webpack-sources": "^3.3.3"
      },
      "bin": {
        "webpack": "bin/webpack.js"
      },
      "engines": {
        "node": ">=10.13.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/webpack"
      },
      "peerDependenciesMeta": {
        "webpack-cli": {
          "optional": true
        }
      }
    },
    "node_modules/webpack-sources": {
      "version": "3.5.1",
      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz",
      "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==",
      "license": "MIT",
      "engines": {
        "node": ">=10.13.0"
      }
    },
    "node_modules/whatwg-url": {
      "version": "7.1.0",
      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
      "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
      "license": "MIT",
      "dependencies": {
        "lodash.sortby": "^4.7.0",
        "tr46": "^1.0.1",
        "webidl-conversions": "^4.0.2"
      }
    },
    "node_modules/which": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
      "license": "ISC",
      "dependencies": {
        "isexe": "^2.0.0"
      },
      "bin": {
        "node-which": "bin/node-which"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/ws": {
      "version": "8.20.1",
      "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz",
      "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==",
      "license": "MIT",
      "engines": {
        "node": ">=10.0.0"
      },
      "peerDependencies": {
        "bufferutil": "^4.0.1",
        "utf-8-validate": ">=5.0.2"
      },
      "peerDependenciesMeta": {
        "bufferutil": {
          "optional": true
        },
        "utf-8-validate": {
          "optional": true
        }
      }
    },
    "node_modules/yallist": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
      "license": "ISC"
    },
    "node_modules/zod": {
      "version": "4.3.6",
      "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
      "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/colinhacks"
      }
    }
  }
}
package.json
Open raw file ↗
{
  "name": "wiggly-tutorial-video-format-kit",
  "version": "0.4.0",
  "private": true,
  "type": "module",
  "scripts": {
    "test": "node scripts/verify.mjs",
    "critique": "node runtime/critique.mjs",
    "harvest": "node runtime/harvest.mjs",
    "voice": "node runtime/voice.mjs",
    "make": "node runner.mjs make",
    "smoke": "node runner.mjs smoke",
    "build": "node build-kit.mjs"
  },
  "dependencies": {
    "@remotion/bundler": "4.0.473",
    "@remotion/renderer": "4.0.473",
    "react": "19.0.1",
    "react-dom": "19.0.1",
    "remotion": "4.0.473",
    "sharp": "^0.33.5",
    "playwright-core": "^1.60.0"
  }
}
PROOF-REPORT.md
Open raw file ↗
# Tutorial Video 0.4.0 proof report

## Failure addressed

Version 0.2.0 accepted a finished `sourceVideo` and only re-encoded it. A fresh
agent therefore had no executable visual grammar and could substitute a generic
slide deck. Version 0.4.0 rejects `sourceVideo`, ships the actual compositor,
validator, grid assets, examples, and inspection tooling.

## Runtime proof

`runtime/tutorial-video.jsx` renders the retro grids, macOS window chrome,
numbered step badges, neon checkpoint cards, timed captions, native-result
frames, and progress rail. `runtime/contract.mjs` requires editable ingredients
and verifies media authorization, provenance, path safety, duration, and
timeline structure before rendering.

New narration is a separate measured preparation stage. `runtime/voice.mjs` and
`runtime/narrate.mjs` pin Fish Audio to `s2.1-pro-free`, derive caption timing
from probed audio, and stop on a missing key or provider error; neither can fall
back to an OS voice, a sine wave, or a paid model. Dry-run and offline tests use
fixtures and make zero provider calls.

Two meaningfully different inputs were rendered without changing the runtime:

- `examples/batman-arkham-first-run/input.json` produced a 40.981-second
  Batman Arkham Conversations tutorial.
- `examples/animal-conversations-compositor/input.json` produced a 23.787-
  second Animal Conversations tutorial.

Both are 1920 × 1080, 30 fps H.264/AAC, contain audio, carry input/runtime/output
hash receipts, and report `providerCalls: 0`. Their contact sheets visibly show
the packaged signature features. Automated inspection cannot judge narration
intelligibility or perceived sync; complete human audiovisual approval remains
an explicit finalization gate.

A context-free agent then received only a clean extracted 0.3.0 download and
the Batman request. After the package's preflight identified the required local
Remotion browser/port permission, the agent validated, rendered once, and
inspected successfully without accessing the source checkout, network, or any
provider. See `evidence/blind-agent-run.json`.

The compositor proof remains the baseline blind-agent evidence; 0.4.0 adds the
new Fish preparation and failure gates without changing that renderer.

## Reproduction

```text
npm ci --ignore-scripts --no-audit --no-fund
npm test
node runner.mjs validate --input=examples/batman-arkham-first-run/input.json
node runner.mjs render --input=examples/batman-arkham-first-run/input.json --output=/tmp/tutorial.mp4
node runner.mjs inspect --input=/tmp/tutorial.mp4 --report=/tmp/tutorial-report.json
```

Local Remotion/FFmpeg rendering and all included evidence used zero paid model
or media calls. New narration uses Fish `s2.1-pro-free`, which is $0 under the
provider's fair-use limits; coding-agent usage and any separately approved
asset generation are outside this runtime.
PROVENANCE.md
Open raw file ↗
# Provenance

- `media/fixed/grid-*.png` are Wiggly-owned background assets recovered from
  the original Animal Conversations tutorial production workspace and now
  shipped as fixed format assets.
- Batman proof media comes from the public Wiggly Batman Arkham Conversations
  page, its published example video, a locally rasterized real runtime receipt,
  and operator-approved human narration recovered from the original tutorial
  production. Each input entry records its specific provenance.
- Animal Conversations proof media and narration are operator-approved assets
  recovered from the original tutorial production workspace. They are consumed
  as separate editable ingredients, not as a tutorial master.
- `examples/*/final.mp4` are direct outputs of the packaged
  `runtime/tutorial-video.jsx` compositor. Adjacent receipts bind each input,
  runtime, and output SHA-256.
- Smoke images, tones, and video under `media/smoke/` are locally generated
  mechanical fixtures and are never represented as creative proof.
- No provider call, paid generation, secret, cookie, or private URL is required
  or included. Authorization statements describe the supplied evidence only;
  the runtime does not infer ownership.
RELEASE-CONTENTS.json
Open raw file ↗
{
  "schemaVersion": 2,
  "kit": "wiggly-tutorial-video-format-kit",
  "version": "0.4.0",
  "files": [
    {
      "file": "KIT-MANIFEST.json",
      "sha256": "5d158c21f74963ce8e3dd6448bec45f27e529289a2ac6f33d6c6279c4d73d852",
      "sizeBytes": 798
    },
    {
      "file": "PROOF-REPORT.md",
      "sha256": "09f04145e7c28636bddaac46598571b94e6c14d6ed93db8ba877878664bda929",
      "sizeBytes": 2867
    },
    {
      "file": "PROVENANCE.md",
      "sha256": "023d03eb6e43470bcec6f4d84bc3d506715c3555508721b2be804e2b1107b1e2",
      "sizeBytes": 1226
    },
    {
      "file": "README.md",
      "sha256": "f7bb27ae5092150c6ae6a0f1684bda010528084379142482fd76ae989d83cfbd",
      "sizeBytes": 5917
    },
    {
      "file": "SKILL.md",
      "sha256": "bf47113d4bd971153e1e61e8079a542ac43a6d4e8c4830405e0050cacf91efdf",
      "sizeBytes": 8460
    },
    {
      "file": "assets.json",
      "sha256": "141a4be4c98e976b413d055a4db298b719802c13f730aba8143adda72ba5aff0",
      "sizeBytes": 1565
    },
    {
      "file": "build-kit.mjs",
      "sha256": "c67f79c252d44507041c5afc0e769059ad05be7b2fd8ee69a45d88e2a81d2bde",
      "sizeBytes": 2329
    },
    {
      "file": "composition-contract.json",
      "sha256": "df3f996929566998a5ae99ba5e96aedf6e553fad5287b80dd3d07b199acf7216",
      "sizeBytes": 999
    },
    {
      "file": "evidence/blind-agent-run.json",
      "sha256": "95968b510bd3f563b0e69c8116595d942eec35d2cce5dd02621141cd02978533",
      "sizeBytes": 1421
    },
    {
      "file": "evidence/compositor-runs.json",
      "sha256": "499768451ab104c6cf3c2d40a24c57a20bb4c038486a1a8ca7689c80a3e3e33d",
      "sizeBytes": 1195
    },
    {
      "file": "examples/animal-conversations-compositor/final.mp4",
      "sha256": "49ed3faccfaae97015acea2aa692efd866a8db11c0a69df8472c2515190787e9",
      "sizeBytes": 4481759
    },
    {
      "file": "examples/animal-conversations-compositor/final.mp4.receipt.json",
      "sha256": "e97f13d9bdbfe8436a6aa09da5871b39d76b75af8ddee2cba79cbf1a851cd479",
      "sizeBytes": 720
    },
    {
      "file": "examples/animal-conversations-compositor/input.json",
      "sha256": "f8b76b3384c1fadac7444bb4240c2b834fe8f40d48cc4d6bfef4f302fa5386a6",
      "sizeBytes": 3808
    },
    {
      "file": "examples/animal-conversations-compositor/quality-report-contact-sheet.jpg",
      "sha256": "eb2605446a39a050297b2e428f2209d1a60dab42a8492b25e9014bbfa4f52fd0",
      "sizeBytes": 72930
    },
    {
      "file": "examples/animal-conversations-compositor/quality-report.json",
      "sha256": "d91e83708d72750202e195d6b3874321f694bd48be531218df04a4563bdbef43",
      "sizeBytes": 1062
    },
    {
      "file": "examples/batman-arkham-first-run/final.mp4",
      "sha256": "3a24911245135050f976ce3eff5f7f112dba93e6cfdd4318adbdc9a4f900f6ac",
      "sizeBytes": 13308376
    },
    {
      "file": "examples/batman-arkham-first-run/final.mp4.receipt.json",
      "sha256": "d218cda951fdfc00102f43fb05dbcce8bfea5761758af2f0ea6131c5b5252c21",
      "sizeBytes": 704
    },
    {
      "file": "examples/batman-arkham-first-run/input.json",
      "sha256": "c31bc6ad434ffe4e5a5fb4ddf8e385ebf667360b52b08e63dbb7a035a209cee0",
      "sizeBytes": 5779
    },
    {
      "file": "examples/batman-arkham-first-run/poster.jpg",
      "sha256": "60faf9b1a8cee2f1f3d9757522b7fe8139affab21bb89a051695f69bd3f39d25",
      "sizeBytes": 208726
    },
    {
      "file": "examples/batman-arkham-first-run/quality-report-contact-sheet.jpg",
      "sha256": "b497a0514a07fe8827a1e631eb9581ecb7298883ed3b494ceedb501e46307b99",
      "sizeBytes": 106123
    },
    {
      "file": "examples/batman-arkham-first-run/quality-report.json",
      "sha256": "f6f09faf449e8e62bf04763924faa8679938ffab46246d90b549b715bf30048b",
      "sizeBytes": 1087
    },
    {
      "file": "fixtures/creative-review.example.json",
      "sha256": "4d59d073f19ae4f3124b991c23ea17af977298c5b40e503644dbd59ae9973765",
      "sizeBytes": 383
    },
    {
      "file": "fixtures/narration-plan.json",
      "sha256": "ae57b17c351268131d75073c9a4a8ba42ee0a84ec72efb379762de784f11a382",
      "sizeBytes": 489
    },
    {
      "file": "fixtures/smoke/input.json",
      "sha256": "fda777ab55c0fa88a0cc28c48863aceb054c7a4f0d8d7e4f646ebfdda83c057c",
      "sizeBytes": 3038
    },
    {
      "file": "fixtures/template/input.json",
      "sha256": "4aec0cf52db44b63c476c14859d673b8f5ba0908a69f567760f9788ac390b540",
      "sizeBytes": 3122
    },
    {
      "file": "format.json",
      "sha256": "c2361a8164b13d3d2dd429061f1c975184efe8a3fb33fd2299bf41d1c7cade4c",
      "sizeBytes": 678
    },
    {
      "file": "goldens.json",
      "sha256": "3b8ab052a754fca78a0229825f56d4b4f392cb90e3ca42d82710c48102b8d9af",
      "sizeBytes": 1075
    },
    {
      "file": "input-contract.json",
      "sha256": "9672520aac54bf3ec10d995a0a0242c5fb58796c9a34d4d7b7a639b74ebf8ec5",
      "sizeBytes": 1994
    },
    {
      "file": "inputs/distribution.json",
      "sha256": "5df4721d99096f6d0a390c6ff59a8842cba99bd5ed7d568f42439a4a4e42eeff",
      "sizeBytes": 1344
    },
    {
      "file": "inputs/mugsy-explains.json",
      "sha256": "abe79e13f51178a1f2ce958fe9989daaea3462a975409f2f7af57e068e7fd213",
      "sizeBytes": 4965
    },
    {
      "file": "media/examples/animal-conversations/06-copy.wav",
      "sha256": "df671c3b7a350845522ac5cfd43e2ccd682da4a620fe4c0bc9028ad8d4233078",
      "sizeBytes": 929298
    },
    {
      "file": "media/examples/animal-conversations/07-paste.wav",
      "sha256": "5238cbf2aa98b1d0dfee42768d0e90326dd59ddd295caa47a4a37a2979ba24bc",
      "sizeBytes": 1804734
    },
    {
      "file": "media/examples/animal-conversations/final-result.mp4",
      "sha256": "888860f5a2e4ee3eb4c66661ea4b122a1015d19938b20037702410350cfdea63",
      "sizeBytes": 2132866
    },
    {
      "file": "media/examples/animal-conversations/format-page.mp4",
      "sha256": "32710f244042881b02bbf1ee15bdaffecef1814c2952840f10136d353b6b93fc",
      "sizeBytes": 246675
    },
    {
      "file": "media/examples/animal-conversations/paste-focused.mp4",
      "sha256": "24bfe8cc8512d1fe6a7a527944782ca69da3dd23dd77c4d5d58cac2e00b4ff7f",
      "sizeBytes": 263021
    },
    {
      "file": "media/examples/batman-arkham/02-agent.wav",
      "sha256": "75b7ce27454785fda66c9ad90b781141f3358601d7b6aa0c28cd4c9fe5213be4",
      "sizeBytes": 1756098
    },
    {
      "file": "media/examples/batman-arkham/03-copy.wav",
      "sha256": "df671c3b7a350845522ac5cfd43e2ccd682da4a620fe4c0bc9028ad8d4233078",
      "sizeBytes": 929298
    },
    {
      "file": "media/examples/batman-arkham/04-paste.wav",
      "sha256": "5238cbf2aa98b1d0dfee42768d0e90326dd59ddd295caa47a4a37a2979ba24bc",
      "sizeBytes": 1804734
    },
    {
      "file": "media/examples/batman-arkham/06-close.wav",
      "sha256": "3bf3dcb467bdaf1756c96501afcd6f3f3036b3666e4ef5cccbd0dce7561070c5",
      "sizeBytes": 1707462
    },
    {
      "file": "media/examples/batman-arkham/final-result.mp4",
      "sha256": "02abd830832603a033401177b6759687aa6d2f7c4beb6f4f26d856547c591362",
      "sizeBytes": 24039535
    },
    {
      "file": "media/examples/batman-arkham/format-page.png",
      "sha256": "2e16a9efe0f1a67c85f1c1abd611fa19926ca5f169a77adccdd7e8c902aa67bb",
      "sizeBytes": 246231
    },
    {
      "file": "media/examples/batman-arkham/runtime-receipt.png",
      "sha256": "df0916570e237166e210b4422d95cf9693508e2b38fdb498f6b546cb7c07f27e",
      "sizeBytes": 79921
    },
    {
      "file": "media/fixed/grid-acid-lime-v1.png",
      "sha256": "8d691ffbdcd0ff1297bdc7c86984d2e1a57134d067ae1ab02890d34ab9fe7005",
      "sizeBytes": 953898
    },
    {
      "file": "media/fixed/grid-electric-blue-v1.png",
      "sha256": "fa1eed1a8e640f01309aa07f218274556c0cacb6807262360680aecb4e102a58",
      "sizeBytes": 1122993
    },
    {
      "file": "media/fixed/grid-warm-cream-v1.png",
      "sha256": "e0152ed7e377428579c22a4c8f885d28d357c112369f20534825c0b3b50df405",
      "sizeBytes": 934154
    },
    {
      "file": "media/mugsy-explains/browser-interaction.mp4",
      "sha256": "3eeef61058dd66629174eb290ee7b49d4da413e8b7cc19311a86e64ca2345869",
      "sizeBytes": 576420
    },
    {
      "file": "media/mugsy-explains/final-result.mp4",
      "sha256": "2e978f8873a5ef32a30d1378fd3e9ccaeade9d39a3bb3d91d9a850725f4eebf2",
      "sizeBytes": 1436612
    },
    {
      "file": "media/mugsy-explains/format-page.png",
      "sha256": "5b6be73d26163087adcdea9439b3874c6fc1e37b82717d82cd8daf8ba84dc3ac",
      "sizeBytes": 124585
    },
    {
      "file": "media/mugsy-explains/runtime-receipt.png",
      "sha256": "aa16dce0f55e75902fb5133e809628ccbd7dd70ac3562a79caccca048a485f2e",
      "sizeBytes": 109030
    },
    {
      "file": "media/mugsy-explains/step-02.wav",
      "sha256": "c249cc19a256b60f1537015790f4d55e8adc8cbdcc5324a9ab8606b025dfb49f",
      "sizeBytes": 403238
    },
    {
      "file": "media/mugsy-explains/step-03.wav",
      "sha256": "7616dba2fb8267bbf064e243760c5a820e4b4032774ca4b6547d363660f2a330",
      "sizeBytes": 563178
    },
    {
      "file": "media/mugsy-explains/step-05.wav",
      "sha256": "7545d0861d0821be611f9b296f9d01b585c9aa6b3d9446bffcbb70a8030efd8f",
      "sizeBytes": 524168
    },
    {
      "file": "media/mugsy-explains/terminal-execution.mp4",
      "sha256": "2640baf6d41df72261963b6ace61d401697c5e6e75c8b73551d5e4688b6fe1e1",
      "sizeBytes": 261949
    },
    {
      "file": "media/smoke/browser-narration.wav",
      "sha256": "14542df96292023a58c5a4b039cb3a30d92c30605051908ce87062424ab6788c",
      "sizeBytes": 230478
    },
    {
      "file": "media/smoke/browser.jpg",
      "sha256": "41905db0a94262d478238849bf1d1bd0914b7d58c676ac93be245b5d0e6c3607",
      "sizeBytes": 27951
    },
    {
      "file": "media/smoke/result.mp4",
      "sha256": "0ad7f81d3e6f5da08005d8f0b304d0b869ac14b36f1967acc099db339434752d",
      "sizeBytes": 5875160
    },
    {
      "file": "media/smoke/terminal-narration.wav",
      "sha256": "72f208b94c5e7668eeb5e976533ecbc041bd9d3bec3dc1d67aa5027c19bee8e7",
      "sizeBytes": 230478
    },
    {
      "file": "media/smoke/terminal.png",
      "sha256": "108448318fea3ab78b311ebb533bbea98386cb91d68912cc491d342d123efd6e",
      "sizeBytes": 119249
    },
    {
      "file": "output-contract.json",
      "sha256": "12060438fbb9d8e46392dcab7c914887765c982809ca85c6c8286ad29ff8b651",
      "sizeBytes": 597
    },
    {
      "file": "outputs/mugsy-explains-tutorial.mp4",
      "sha256": "3cb42d3a935e5e70eccec748940e9ad45b996b38ee1dabcb260a3894bb740769",
      "sizeBytes": 7888979
    },
    {
      "file": "outputs/mugsy-explains-tutorial.mp4.quality-report-contact-sheet.jpg",
      "sha256": "f83a24d2d43f24320af7cccae00924beab18b8aec28e8a862c76fa265c9f5c49",
      "sizeBytes": 85794
    },
    {
      "file": "outputs/mugsy-explains-tutorial.mp4.quality-report.json",
      "sha256": "2d8bab3ae53d33a9be54e7b215a2d17533927667d5b563d33082a350df266803",
      "sizeBytes": 1055
    },
    {
      "file": "outputs/mugsy-explains-tutorial.mp4.receipt.json",
      "sha256": "bb101290799b34070647ab7ff8a4f012dcb7edfaf6dbb554c571834579748328",
      "sizeBytes": 676
    },
    {
      "file": "package-lock.json",
      "sha256": "2eaffbbef1535e172cdc8a014a716a227eb953100ce1f4a38f7e134f61b8ca27",
      "sizeBytes": 113676
    },
    {
      "file": "package.json",
      "sha256": "a7ccfdcbdf6ac1407b5446a6d28e7b93319a082a27fe115b2e6734d013cdad8f",
      "sizeBytes": 636
    },
    {
      "file": "pipeline.json",
      "sha256": "14b897184f6f4ec9ead5cea2bc33cb6c053b5f28cf4d11280d5952e516aa6013",
      "sizeBytes": 1396
    },
    {
      "file": "quality.json",
      "sha256": "869369346f264e81e176f57fcc9961622c572790dc2ba060b963fcaccf7d8316",
      "sizeBytes": 1129
    },
    {
      "file": "references/preparation.md",
      "sha256": "57f435b9691549a1f8137d411511bc3f8e65343423cd6c77192fc371bbf4a603",
      "sizeBytes": 2116
    },
    {
      "file": "references/tutorial-grammar.md",
      "sha256": "6869d1009e729155f324fbe5d800203b8f32ab943010495d2da14dfe6785ac55",
      "sizeBytes": 1451
    },
    {
      "file": "release-files.json",
      "sha256": "f489885ace77b0abd80b3b3c984c46eba650ab4148825201adf6fd51c059c7d3",
      "sizeBytes": 450
    },
    {
      "file": "requirements.json",
      "sha256": "e2d42b041b3ceb506e94219089f02d46b911a91fd88b60fe723eaea21248d2e6",
      "sizeBytes": 2274
    },
    {
      "file": "runner.mjs",
      "sha256": "9a4363f5f83ed2f4929fe3d86e5d550ba2e10ce1ae09035cc7fcc2861fe23eb5",
      "sizeBytes": 19641
    },
    {
      "file": "runtime/contract.mjs",
      "sha256": "2089412ed4454a7cb53441e9a45fe4fa008dddc3523af0dc3e6fc8542a0f9ff6",
      "sizeBytes": 11017
    },
    {
      "file": "runtime/critique.mjs",
      "sha256": "28155ea586c1f6cb36c4bb2470295d54dd2efa4abfeebeccfd4ea8bc466c78f6",
      "sizeBytes": 12444
    },
    {
      "file": "runtime/harvest.mjs",
      "sha256": "607d13175583e5e888cdc14824daec79343d60fb801a874e23759e9ddc1b8424",
      "sizeBytes": 32777
    },
    {
      "file": "runtime/index.jsx",
      "sha256": "9c10aeb19a9e36ed5b361bda6562fbf96a2b95165bab1c75bd70c3834dcb5695",
      "sizeBytes": 113
    },
    {
      "file": "runtime/narrate.mjs",
      "sha256": "7463bd777ee1ea62dbc575243819f2206dfa2f6d16f1083c7a7aa23cf2e0079f",
      "sizeBytes": 6992
    },
    {
      "file": "runtime/publish.mjs",
      "sha256": "bb3a52033f126603bbf1af8253b1353ae5b1351c6e4cef730fa2699ab18cdcba",
      "sizeBytes": 6578
    },
    {
      "file": "runtime/root.jsx",
      "sha256": "4c58eb5daf507ad66762c98bb7e67318f4db426812f03ae6ec61de3d95aa286a",
      "sizeBytes": 849
    },
    {
      "file": "runtime/tutorial-video.jsx",
      "sha256": "3999ca04d215ea4036e42d4a7d6a648023b597c4f3fb506bed303fc76be5b04b",
      "sizeBytes": 12033
    },
    {
      "file": "runtime/voice.mjs",
      "sha256": "9ca6a749f428bcde335121d7e770a93312e6289e2dac9f214ff795c55479804a",
      "sizeBytes": 8155
    },
    {
      "file": "scripts/verify.mjs",
      "sha256": "1648cde91331d629a74216282c9c7b3c14919330bb3191d136931049353deac7",
      "sizeBytes": 5869
    },
    {
      "file": "tests/critique.test.mjs",
      "sha256": "53bae4a142768a20dcb5cd3f655e971f8d7c741a3abe63efd03da855416606e4",
      "sizeBytes": 6769
    },
    {
      "file": "tests/distribution.test.mjs",
      "sha256": "5e605fcf532258776c0dfd86e8a9fc401a6156d9881db6045906717105cfe0a9",
      "sizeBytes": 4208
    },
    {
      "file": "tests/harvest.test.mjs",
      "sha256": "dcf00c36db848c4e34263a01e1955638c2f510958bcd2dc630a9c7e4b27766c0",
      "sizeBytes": 2259
    },
    {
      "file": "tests/make.test.mjs",
      "sha256": "62094014e217007a6a8406f4aacc9af68123782fa6e5f770cc01021f801b51bb",
      "sizeBytes": 2058
    },
    {
      "file": "tests/narrate.test.mjs",
      "sha256": "83fead8007fa4c55cc0ae7dc6728ac1e6531a871a30a953d9dca19cc291cfa22",
      "sizeBytes": 1610
    },
    {
      "file": "tests/voice.test.mjs",
      "sha256": "84584a70258c40accbc74e20a5001a35ea8472636a0e5f6ce4988e6f2d30e853",
      "sizeBytes": 3895
    }
  ]
}
release-files.json
Open raw file ↗
{
  "schemaVersion": 2,
  "version": "0.4.0",
  "archive": "downloads/wiggly-tutorial-video-format-kit-0.4.0.zip",
  "include": ["README.md", "SKILL.md", "*.json", "runner.mjs", "build-kit.mjs", "runtime/", "scripts/", "references/", "evidence/", "fixtures/", "media/", "examples/"],
  "exclude": ["downloads/", "node_modules/", "secrets.env", "assets/source/", "examples/animal-conversations-first-run/", "examples/animal-conversations-variant/"]
}
Technical proof archive ↗

Run it with a coding agent

Know the run before you start.

The agent reads this version’s instructions, checks the requirements, and walks you through the approved workflow. Review the inputs and estimate before starting.

Typical run

Evidence + storyboard$0 provider cost · depends on source length
Fish narration + measured captions$0 with s2.1-pro-free; paid calls require approval · depends on script
Local render + inspection$0 provider cost · about 1–3 min on a modern Mac

$0 provider cost with supplied media or Fish s2.1-pro-free; coding-agent usage is separate. Paid calls require an estimate and approval.

You provide

Permitted browser and coding-agent captures from the real workflow · The Wiggly Format metadata, URL, and finished-result video · A Fish Audio key and authorized voice ID for new narration, or supplied narration for offline replay · Reviewed caption timings and checkpoint copy · A coding agent with terminal, filesystem, and media access

Output

One narrated, captioned 1920 × 1080 MP4 (16:9) rendered directly from the editable ingredient timeline