{"owner":"mltframework","repo":"shotcut","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# Shotcut — Workspace Instructions\n\nShotcut is a free, open-source, cross-platform video editor built on Qt 6 and the [MLT multimedia framework](https://www.mltframework.org/).\n\n## Build and Run\n\n```bash\n# Configure (from repo root; output goes to build/cc-debug)\ncmake --preset cc-debug\n\n# Reformat code with clang-format\ncmake --build build/cc-debug --target clang-format\n\n# Build\ncmake --build build/cc-debug\n\n# Run directly from build tree\nbuild/cc-debug/src/shotcut\n```\n\nThe default preset `cc-debug` (defined in `CMakePresets.json`) uses Ninja, gcc or clang from `$PATH` and Qt 6.10.3 from `~/Qt/6.10.3`, and produces a Debug build.\n\nTo properly debug on Windows you must set the environment variable `QSG_RHI_BACKEND=d3d11` to prevent running as a child process detached from the debugger.\n\n## Architecture\n\n| Singleton | Macro | Role |\n|-----------|-------|------|\n| `Mlt::Controller` | `MLT` | Media engine: producer/consumer/seek/profile |\n| `MainWindow` | `MAIN` | Central hub; owns all docks, undo stack, layout |\n| `ShotcutActions` | `Actions` | Global `QAction` registry keyed by string |\n| `ShotcutSettings` | `Settings` | `QSettings`-backed properties; bindable from QML |\n\n**Data flow**: UI events → `Actions[\"someKey\"]` → undoable `QUndoCommand` in `src/commands/` → `MLT` producer/filter mutation → Qt signals → model updates → QML views re-render.\n\n**QML views** (in `src/qml/views/`): Timeline, Filter, and Keyframes panels are QML; individual filter parameter UIs live in `src/qml/filters/<filter-name>/`.\n\n**Docks** (`src/docks/`): All panels are `QDockWidget` subclasses — Timeline, Playlist, Encode, Filters, Keyframes, Markers, Subtitles, Jobs, Recent, Files, Scope, Notes.\n\n**Models** (`src/models/`): Qt item models bridge C++ data to QML. `MultitrackModel` is the timeline; `PlaylistModel` is the source bin.\n\n## Code Conventions\n\n- **Member variables**: `m_` prefix (e.g., `m_position`, `m_gridButton`)\n- **Class naming**: `PascalCase`; methods/variables: `camelCase`\n- **Slot naming**: `on<ObjectName><SignalName>()` (e.g., `onGridToggled`, `onFrameDisplayed`)\n- **Header guards**: `#ifndef CLASSNAME_H` / `#define CLASSNAME_H`\n- **Signal/slot style**: Do not replace old `SIGNAL()`/`SLOT()` macros unless the entire containing block is already using the new-style pointer syntax — do not mix old macros and new-style function pointers in the same block. Use new-style `QObject::connect()` with function pointers or lambdas for all new code.\n- **Action registration**: Add new actions in `setupActions()` or analogous setup functions; register with `Actions.add(\"keyName\", action, tr(\"Group\"))`.\n- **Grid/zoom data encoding**: Integer `data()` on `QAction` encodes the grid type:\n\n\t| # | Type | Range / Values | Examples |\n\t|---|------|---------------|----------|\n\t| 1 | Pixel grids | `>= 10000` | `10010` = 10 px, `10020` = 20 px |\n\t| 2 | Safe-area presets | specific values | `8090`, `95` |\n\t| 3 | Aspect-ratio frame overlays | `20001`–`29999` | `20001` = 1:1, `20043` = 4:3, `20169` = 16:9, `20916` = 9:16 |\n- Update the copyright year in all modified files.\n\n## Key Entry Points\n\n- `src/main.cpp` — application entry\n- `src/mainwindow.cpp` — central UI coordination\n- `src/player.cpp` — video player widget with transport/zoom/grid controls\n- `src/mltcontroller.cpp` — MLT wrapper\n- `src/actions.cpp` — global action registry\n- `src/settings.cpp` — persistent settings\n\n## No Automated Tests\n\nThere are no C++ unit tests. The only automated tests are JavaScript tests for EDL/chapters export:\n\n```bash\nnode src/qml/export-edl/test-node.js\nnode src/qml/export-chapters/test-node.js\n```\n\n## Dependencies\n\nQt 6.4+, MLT++ ≥ 7.36.0 (via pkg-config), FFTW, FFmpeg, Frei0r, SDL2. See `CMakeLists.txt` for the full list.\n\n### Missing or Incompatible Dependencies\n\nIf configure or build fails due to missing or incompatible dependencies:\n\n1. Report the missing/incompatible package name and required version in the error output.\n2. Suggest installing or upgrading the package using the platform package manager.\n3. Re-run configure:\n\n```bash\ncmake --preset cc-debug\n```\n\n4. If Qt is not found, verify Qt 6.10.3 is installed and available at `~/Qt/6.10.3`, or set `CMAKE_PREFIX_PATH` to the correct Qt location.\n5. If MLT is not found, verify `pkg-config --modversion mlt++` works and reports version `7.36.0` or newer.\n\nWhen dependency checks fail, stop and provide a clear remediation message instead of continuing with partial setup.\n"},"files":{"AGENTS.md":"# Shotcut — Workspace Instructions\n\nShotcut is a free, open-source, cross-platform video editor built on Qt 6 and the [MLT multimedia framework](https://www.mltframework.org/).\n\n## Build and Run\n\n```bash\n# Configure (from repo root; output goes to build/cc-debug)\ncmake --preset cc-debug\n\n# Reformat code with clang-format\ncmake --build build/cc-debug --target clang-format\n\n# Build\ncmake --build build/cc-debug\n\n# Run directly from build tree\nbuild/cc-debug/src/shotcut\n```\n\nThe default preset `cc-debug` (defined in `CMakePresets.json`) uses Ninja, gcc or clang from `$PATH` and Qt 6.10.3 from `~/Qt/6.10.3`, and produces a Debug build.\n\nTo properly debug on Windows you must set the environment variable `QSG_RHI_BACKEND=d3d11` to prevent running as a child process detached from the debugger.\n\n## Architecture\n\n| Singleton | Macro | Role |\n|-----------|-------|------|\n| `Mlt::Controller` | `MLT` | Media engine: producer/consumer/seek/profile |\n| `MainWindow` | `MAIN` | Central hub; owns all docks, undo stack, layout |\n| `ShotcutActions` | `Actions` | Global `QAction` registry keyed by string |\n| `ShotcutSettings` | `Settings` | `QSettings`-backed properties; bindable from QML |\n\n**Data flow**: UI events → `Actions[\"someKey\"]` → undoable `QUndoCommand` in `src/commands/` → `MLT` producer/filter mutation → Qt signals → model updates → QML views re-render.\n\n**QML views** (in `src/qml/views/`): Timeline, Filter, and Keyframes panels are QML; individual filter parameter UIs live in `src/qml/filters/<filter-name>/`.\n\n**Docks** (`src/docks/`): All panels are `QDockWidget` subclasses — Timeline, Playlist, Encode, Filters, Keyframes, Markers, Subtitles, Jobs, Recent, Files, Scope, Notes.\n\n**Models** (`src/models/`): Qt item models bridge C++ data to QML. `MultitrackModel` is the timeline; `PlaylistModel` is the source bin.\n\n## Code Conventions\n\n- **Member variables**: `m_` prefix (e.g., `m_position`, `m_gridButton`)\n- **Class naming**: `PascalCase`; methods/variables: `camelCase`\n- **Slot naming**: `on<ObjectName><SignalName>()` (e.g., `onGridToggled`, `onFrameDisplayed`)\n- **Header guards**: `#ifndef CLASSNAME_H` / `#define CLASSNAME_H`\n- **Signal/slot style**: Do not replace old `SIGNAL()`/`SLOT()` macros unless the entire containing block is already using the new-style pointer syntax — do not mix old macros and new-style function pointers in the same block. Use new-style `QObject::connect()` with function pointers or lambdas for all new code.\n- **Action registration**: Add new actions in `setupActions()` or analogous setup functions; register with `Actions.add(\"keyName\", action, tr(\"Group\"))`.\n- **Grid/zoom data encoding**: Integer `data()` on `QAction` encodes the grid type:\n\n\t| # | Type | Range / Values | Examples |\n\t|---|------|---------------|----------|\n\t| 1 | Pixel grids | `>= 10000` | `10010` = 10 px, `10020` = 20 px |\n\t| 2 | Safe-area presets | specific values | `8090`, `95` |\n\t| 3 | Aspect-ratio frame overlays | `20001`–`29999` | `20001` = 1:1, `20043` = 4:3, `20169` = 16:9, `20916` = 9:16 |\n- Update the copyright year in all modified files.\n\n## Key Entry Points\n\n- `src/main.cpp` — application entry\n- `src/mainwindow.cpp` — central UI coordination\n- `src/player.cpp` — video player widget with transport/zoom/grid controls\n- `src/mltcontroller.cpp` — MLT wrapper\n- `src/actions.cpp` — global action registry\n- `src/settings.cpp` — persistent settings\n\n## No Automated Tests\n\nThere are no C++ unit tests. The only automated tests are JavaScript tests for EDL/chapters export:\n\n```bash\nnode src/qml/export-edl/test-node.js\nnode src/qml/export-chapters/test-node.js\n```\n\n## Dependencies\n\nQt 6.4+, MLT++ ≥ 7.36.0 (via pkg-config), FFTW, FFmpeg, Frei0r, SDL2. See `CMakeLists.txt` for the full list.\n\n### Missing or Incompatible Dependencies\n\nIf configure or build fails due to missing or incompatible dependencies:\n\n1. Report the missing/incompatible package name and required version in the error output.\n2. Suggest installing or upgrading the package using the platform package manager.\n3. Re-run configure:\n\n```bash\ncmake --preset cc-debug\n```\n\n4. If Qt is not found, verify Qt 6.10.3 is installed and available at `~/Qt/6.10.3`, or set `CMAKE_PREFIX_PATH` to the correct Qt location.\n5. If MLT is not found, verify `pkg-config --modversion mlt++` works and reports version `7.36.0` or newer.\n\nWhen dependency checks fail, stop and provide a clear remediation message instead of continuing with partial setup.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# Shotcut — Workspace Instructions\n\nShotcut is a free, open-source, cross-platform video editor built on Qt 6 and the [MLT multimedia framework](https://www.mltframework.org/).\n\n## Build and Run\n\n```bash\n# Configure (from repo root; output goes to build/cc-debug)\ncmake --preset cc-debug\n\n# Reformat code with clang-format\ncmake --build build/cc-debug --target clang-format\n\n# Build\ncmake --build build/cc-debug\n\n# Run directly from build tree\nbuild/cc-debug/src/shotcut\n```\n\nThe default preset `cc-debug` (defined in `CMakePresets.json`) uses Ninja, gcc or clang from `$PATH` and Qt 6.10.3 from `~/Qt/6.10.3`, and produces a Debug build.\n\nTo properly debug on Windows you must set the environment variable `QSG_RHI_BACKEND=d3d11` to prevent running as a child process detached from the debugger.\n\n## Architecture\n\n| Singleton | Macro | Role |\n|-----------|-------|------|\n| `Mlt::Controller` | `MLT` | Media engine: producer/consumer/seek/profile |\n| `MainWindow` | `MAIN` | Central hub; owns all docks, undo stack, layout |\n| `ShotcutActions` | `Actions` | Global `QAction` registry keyed by string |\n| `ShotcutSettings` | `Settings` | `QSettings`-backed properties; bindable from QML |\n\n**Data flow**: UI events → `Actions[\"someKey\"]` → undoable `QUndoCommand` in `src/commands/` → `MLT` producer/filter mutation → Qt signals → model updates → QML views re-render.\n\n**QML views** (in `src/qml/views/`): Timeline, Filter, and Keyframes panels are QML; individual filter parameter UIs live in `src/qml/filters/<filter-name>/`.\n\n**Docks** (`src/docks/`): All panels are `QDockWidget` subclasses — Timeline, Playlist, Encode, Filters, Keyframes, Markers, Subtitles, Jobs, Recent, Files, Scope, Notes.\n\n**Models** (`src/models/`): Qt item models bridge C++ data to QML. `MultitrackModel` is the timeline; `PlaylistModel` is the source bin.\n\n## Code Conventions\n\n- **Member variables**: `m_` prefix (e.g., `m_position`, `m_gridButton`)\n- **Class naming**: `PascalCase`; methods/variables: `camelCase`\n- **Slot naming**: `on<ObjectName><SignalName>()` (e.g., `onGridToggled`, `onFrameDisplayed`)\n- **Header guards**: `#ifndef CLASSNAME_H` / `#define CLASSNAME_H`\n- **Signal/slot style**: Do not replace old `SIGNAL()`/`SLOT()` macros unless the entire containing block is already using the new-style pointer syntax — do not mix old macros and new-style function pointers in the same block. Use new-style `QObject::connect()` with function pointers or lambdas for all new code.\n- **Action registration**: Add new actions in `setupActions()` or analogous setup functions; register with `Actions.add(\"keyName\", action, tr(\"Group\"))`.\n- **Grid/zoom data encoding**: Integer `data()` on `QAction` encodes the grid type:\n\n\t| # | Type | Range / Values | Examples |\n\t|---|------|---------------|----------|\n\t| 1 | Pixel grids | `>= 10000` | `10010` = 10 px, `10020` = 20 px |\n\t| 2 | Safe-area presets | specific values | `8090`, `95` |\n\t| 3 | Aspect-ratio frame overlays | `20001`–`29999` | `20001` = 1:1, `20043` = 4:3, `20169` = 16:9, `20916` = 9:16 |\n- Update the copyright year in all modified files.\n\n## Key Entry Points\n\n- `src/main.cpp` — application entry\n- `src/mainwindow.cpp` — central UI coordination\n- `src/player.cpp` — video player widget with transport/zoom/grid controls\n- `src/mltcontroller.cpp` — MLT wrapper\n- `src/actions.cpp` — global action registry\n- `src/settings.cpp` — persistent settings\n\n## No Automated Tests\n\nThere are no C++ unit tests. The only automated tests are JavaScript tests for EDL/chapters export:\n\n```bash\nnode src/qml/export-edl/test-node.js\nnode src/qml/export-chapters/test-node.js\n```\n\n## Dependencies\n\nQt 6.4+, MLT++ ≥ 7.36.0 (via pkg-config), FFTW, FFmpeg, Frei0r, SDL2. See `CMakeLists.txt` for the full list.\n\n### Missing or Incompatible Dependencies\n\nIf configure or build fails due to missing or incompatible dependencies:\n\n1. Report the missing/incompatible package name and required version in the error output.\n2. Suggest installing or upgrading the package using the platform package manager.\n3. Re-run configure:\n\n```bash\ncmake --preset cc-debug\n```\n\n4. If Qt is not found, verify Qt 6.10.3 is installed and available at `~/Qt/6.10.3`, or set `CMAKE_PREFIX_PATH` to the correct Qt location.\n5. If MLT is not found, verify `pkg-config --modversion mlt++` works and reports version `7.36.0` or newer.\n\nWhen dependency checks fail, stop and provide a clear remediation message instead of continuing with partial setup.\n","category":"root","tokens":1116}]}