Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ body:
attributes:
label: Affected capability
options:
- Dialogue search
- Speech search
- Scene search
- Action search (videoprism)
- Action and motion search
- Actor matching
- Multiple capabilities
- Not capability-specific or unsure
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/feature-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ body:
attributes:
label: Related capability
options:
- Dialogue search
- Speech search
- Scene search
- Action search (videoprism)
- Action and motion search
- Actor matching
- Multiple capabilities
- Not capability-specific or unsure
Expand Down
2 changes: 1 addition & 1 deletion .github/release-intro.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Download VidXP

{release_notice}VidXP turns video into searchable dialogue, scenes, people, and
{release_notice}VidXP turns video into searchable speech, sounds, scenes, actions, people, and
inspectable evidence. Choose the desktop app for the guided local setup, or use
the Python package and containers for command-line and server deployments.

Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,39 @@ concurrency:
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
premiere-packages:
name: Premiere extension packages
runs-on: windows-2025
steps:
- uses: actions/checkout@v7
with:
ref: ${{ inputs.checkout_ref || github.event.inputs.checkout_ref || github.sha }}

- uses: actions/setup-node@v7
with:
node-version: "22"
cache: npm
cache-dependency-path: premiere/package-lock.json

- name: Build and package both Premiere host generations
run: |
npm ci
npm run check
npm run package
working-directory: premiere

- name: Preserve the Premiere packages
uses: actions/upload-artifact@v7
with:
name: vidxp-premiere-packages
path: premiere/packages/*
if-no-files-found: error
retention-days: ${{ inputs.artifact_retention_days || 14 }}

build:
name: ${{ matrix.target == 'windows' && 'Windows x86-64 NSIS' || matrix.target == 'macos' && 'macOS Apple Silicon DMG' || 'Linux x86-64 AppImage' }}
runs-on: ${{ matrix.target == 'windows' && 'windows-2025' || matrix.target == 'macos' && 'macos-15' || 'ubuntu-24.04' }}
needs: premiere-packages
strategy:
fail-fast: false
matrix:
Expand All @@ -75,6 +105,11 @@ jobs:
with:
ref: ${{ inputs.checkout_ref || github.event.inputs.checkout_ref || github.sha }}

- uses: actions/download-artifact@v8
with:
name: vidxp-premiere-packages
path: premiere/packages/

- uses: actions/download-artifact@v8
if: inputs.package_artifact_name != ''
with:
Expand Down
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
/venv
/chroma_data
/benchmark_runs/
/benchmarks/codex-mcp/.promptfoo/
/benchmarks/codex-mcp/results/
/benchmarks/codex-mcp/workspace/
/audio.wav
/video.mp4
/dist/
Expand Down Expand Up @@ -39,6 +42,11 @@ pnpm-debug.log*
/target
/desktop/node_modules/
/desktop/dist/
/premiere/dist/
/premiere/ccx/
/premiere/coverage/
/premiere/packages/
/premiere/.rnd
/desktop/src-tauri/target/
/desktop/src-tauri/gen/
/desktop/src-tauri/binaries/uv-*
Expand Down
11 changes: 11 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "uxp",
"request": "attach",
"name": "Attach to VidXP Premiere UXP",
"manifestPath": "${workspaceFolder}/premiere/dist/manifest.json"
}
]
}
134 changes: 125 additions & 9 deletions INSTALLATION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,16 @@ Approximate model downloads are:

| Feature | Download |
|---|---:|
| Dialogue search | 2.64 GiB |
| Speech search | 2.63 GiB |
| Sound event search | 0.91 GiB |
| Scene search | 1.43 GiB |
| Action search | 0.93 GiB |
| Actor matching | 37 MiB |

The Desktop-managed runtime can use about 3 GiB in addition to selected models.
A complete local setup uses about 8.1 GiB before adding videos and indexes.
All five model sets total about 5.95 GiB, so a complete local setup uses about
8.95 GiB before temporary installation space, videos, and indexes. Desktop
calculates the storage plan from the features currently selected during setup.

## Desktop app

Expand Down Expand Up @@ -77,6 +80,13 @@ setup leaves the previous working setup available.
- **AI assistant integration** lets a local MCP-compatible assistant use VidXP.
- **App integration service** lets other local applications use the HTTP API or
Streamable HTTP MCP.
- **Premiere Pro extension** installs the matching Adobe panel and automatically
includes local video processing plus the private app integration service.

The [Premiere Pro extension](docs/integrations/premiere-pro.md) searches media
that is already loaded in an editing project. Desktop includes both supported
Adobe extension packages; users do not need the source repository or a
JavaScript toolchain.

Choose where models should be stored, then decide whether to download them
during setup. VidXP displays the required downloads before starting them.
Expand All @@ -93,6 +103,37 @@ After setup finishes:
Browser and API sharing are off by default. If you enable sharing, use it only
on a trusted local network and follow the warning shown by Desktop.

### Install the Premiere Pro extension

On Windows, VidXP supports Premiere Pro 23.0 or newer with two packaged host
variants:

- Premiere Pro 23.0 through 25.5 uses the CEP extension;
- Premiere Pro 25.6 or newer uses the UXP extension.

In Desktop setup, select **Premiere Pro extension** and the search features you
want. Desktop automatically includes local video processing and its private app
service, then detects standard Premiere installations and installs the matching
package through Adobe Creative Cloud's plugin installer. If Adobe requires
confirmation or elevation, finish the Creative Cloud prompt. Restart Premiere
after installation.

For an existing Desktop-managed VidXP installation, select **Set up Premiere**
on the summary screen. Desktop opens the same setup flow with the Premiere
requirements already selected. **Install for Premiere** remains available there
for reinstalling or retrying only the Adobe package.

For Premiere Pro 23.2, open the panel from **Window > Extensions (Legacy) >
VidXP Search**. For Premiere Pro 25.6 or newer, use **Window > UXP Plugins >
VidXP Search**. If both Premiere generations are installed, Desktop installs
both packages; their host ranges do not overlap.

Plain loopback HTTP is blocked by Premiere UXP on macOS. Desktop therefore does
not claim the 25.6+ macOS panel as usable until the integration has a trusted
local HTTPS transport. The CEP package can use its native local transport on
supported macOS Premiere versions, but still requires host validation before a
release claims support.

## Command line

Command-line installation uses
Expand Down Expand Up @@ -159,8 +200,9 @@ asking for confirmation. Download only selected features when preferred:

```bash
vidxp prepare --modalities scene
vidxp prepare --modalities dialogue,actor
vidxp prepare --modalities videoprism # action search
vidxp prepare --modalities speech,actor
vidxp prepare --modalities action
vidxp prepare --modalities sound # music and environmental sounds
```

For a noninteractive script, add `--yes`. Indexing and search commands do not
Expand Down Expand Up @@ -190,11 +232,14 @@ vidxp index create <media-id>
# Find a visual scene
vidxp search scene "a yellow taxi on a city street"

# Find an action or event (`videoprism` is the CLI name for action search)
vidxp search videoprism "a person opens a door and walks outside"
# Find an action or motion across multiple frames
vidxp search action "a person opens a door and walks outside"

# Find music or an environmental sound
vidxp search sound "an alarm ringing"

# Find something that was said
vidxp search dialogue "the bread just came out of the oven"
vidxp search speech "the bread just came out of the oven"
```

Add `--media-id <media-id>` to a search command to restrict results to one
Expand Down Expand Up @@ -268,6 +313,33 @@ clients, or public access, use the supported server deployment instead.
See [Local API and MCP server](docs/local-api.md) for authentication, uploads,
and sharing behavior.

## Optional local grounded answers

VidXP search does not require a language model. To let CLI, HTTP, or MCP
queries plan searches and draft grounded answers locally, enable **Local
grounded answers** in VidXP Desktop setup. Desktop checks for a compatible
loopback Ollama service and then for an existing Ollama executable. When neither
is available on Windows x86-64 or macOS Apple Silicon, Desktop asks before
downloading a pinned, checksum-verified headless runtime into VidXP's private
data. It does not install the Ollama desktop app. Linux setup links to Ollama's
official installation instructions instead of running a privileged script.

This optional feature follows Ollama's platform floor: Windows 10 22H2 or
newer, or macOS 14 or newer. VidXP Desktop itself can still run without local
grounded answers on older supported systems.

The model is an additional approximately 3.4 GB download. When Desktop must
provide the headless runtime, that download is up to approximately 1.36 GiB;
reusing Ollama avoids it. Local answers have no per-run API charge or numbered
hosted-model allowance, but they use local storage, memory, compute time, and
electricity. Desktop configures the private service address for its browser,
worker, API, Premiere, and generated MCP/Codex setup; there is no URL field to
fill in. A command-line-only installation remains available for developers and
custom deployments.

The complete setup and its current evidence limitations are documented under
[Enable local grounded answers](docs/local-api.md#enable-local-grounded-answers).

## Optional dependency extras

Most users should choose one of the package profiles above. The individual
Expand All @@ -276,9 +348,10 @@ assembling a custom installation:

| Extra | Adds |
|---|---|
| `dialogue` | Transcription, dialogue embeddings, and storage |
| `speech` | Transcription, speech embeddings, and storage |
| `sound` | Music and environmental-sound search and storage |
| `scene` | Scene search and storage |
| `videoprism` | Action search and storage |
| `action` | Multi-frame action and motion search plus storage |
| `actor` | Actor matching and storage |
| `all` | Every built-in search feature |
| `local-worker` | All search features plus local job processing |
Expand Down Expand Up @@ -358,6 +431,11 @@ to be indexed again. VidXP reports this instead of silently replacing a working
index. Prepare the required models, re-index the affected videos, and keep the
old repository until you have checked the replacement results.

The current public capability names are `scene`, `action`, `sound`, `speech`,
and `actor`. VidXP does not translate removed capability names.
If an older repository reports an incompatible index schema, rebuild it using
the current names.

## Data locations

VidXP stores data outside the current working directory:
Expand Down Expand Up @@ -404,6 +482,44 @@ vidxp doctor

Review the suggested package-manager command before approving it.

### Windows Desktop is stuck while checking FFmpeg

Select **Cancel setup**. VidXP stops the package-manager process and keeps the
previous installation and your setup choices. If an older Desktop release does
not show that button, use **Quit VidXP** from the system tray. If it does not
respond, end **VidXP Desktop** in Task Manager. End `winget.exe` there too if it
continues running after VidXP has closed.

Open a new PowerShell window so it receives any PATH changes made by WinGet,
then check whether FFmpeg finished installing:

```powershell
winget list --id Gyan.FFmpeg --exact
where.exe ffmpeg
where.exe ffprobe
```

If WinGet lists `Gyan.FFmpeg` and both executables are found, reopen VidXP
Desktop and retry setup. If the package is missing, or WinGet lists it but the
executables are still not found, repair the package:

```powershell
winget install --id Gyan.FFmpeg --exact --source winget --force --silent `
--disable-interactivity --accept-package-agreements `
--accept-source-agreements
```

Open another new PowerShell window and verify the result:

```powershell
ffmpeg -hide_banner -version
ffprobe -hide_banner -version
ffmpeg -hide_banner -encoders | findstr /i "libx264 aac"
```

The final command should list both `libx264` and `aac`. Reopen VidXP Desktop
and retry setup after all three commands succeed.

### Linux or Windows starts downloading NVIDIA packages

Reinstall with the supported CPU dependency set:
Expand Down
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</p>

<p align="center">
<strong>Dialogue search · Scene search · Action search · Actor grouping</strong>
<strong>Speech search · Sound search · Scene search · Action search · Actor grouping</strong>
</p>

<p align="center">
Expand All @@ -39,7 +39,7 @@

VidXP makes one video—or an entire collection—searchable by meaning:

- **Dialogue search:** type what you remember someone saying and jump to the
- **Speech search:** type what you remember someone saying and jump to the
matching moments.
- **Scene search:** describe what appeared on screen and find the closest
visual matches.
Expand Down Expand Up @@ -122,7 +122,7 @@ See the [Coolify guide](docs/deployment/coolify.md) for the complete setup.
## What you can do today

- Build searchable libraries from individual videos or whole collections.
- Find dialogue by meaning and visual moments by describing the scene.
- Find speech, sound events, visual scenes, and multi-frame actions by description.
- Ask grounded questions and inspect the supporting boards, frames, or clips.
- Group recurring faces and render highlighted actor overlays.
- Keep personal, client, or project libraries separate.
Expand All @@ -144,10 +144,13 @@ vidxp index create <media-id>
vidxp search scene "a yellow taxi on a city street"

# Find an action or event
vidxp search videoprism "a person opens a door and walks outside"
vidxp search action "a person opens a door and walks outside"

# Find a sound event
vidxp search sound "a dog barking over traffic noise"

# Find something that was said
vidxp search dialogue "the bread just came out of the oven"
vidxp search speech "the bread just came out of the oven"
```

Results include the source video, timestamps, match score, and the evidence
Expand Down Expand Up @@ -190,6 +193,7 @@ ordinary MCP tools.

- [Python, HTTP, and MCP installation](INSTALLATION_GUIDE.md)
- [Local HTTP API and MCP server](docs/local-api.md)
- [Premiere Pro extension](docs/integrations/premiere-pro.md)
- [ChatGPT and Codex plugin integration](docs/integrations/openai-plugin.md)
- [Optional capability packages](INSTALLATION_GUIDE.md#optional-dependency-extras)
- [Coolify server setup](docs/deployment/coolify.md)
Expand All @@ -204,13 +208,14 @@ approximately 3 GiB.

| Capability | Approximate model download |
|---|---:|
| Dialogue search | 2.64 GiB |
| Speech search | 2.64 GiB |
| Sound event search | 0.94 GiB |
| Scene search | 1.43 GiB |
| Action search | 0.93 GiB |
| Actor matching | 37 MiB |

A full local Desktop setup with every search capability uses approximately
8.1 GiB. Leave additional temporary space during installation and for indexes,
9.0 GiB. Leave additional temporary space during installation and for indexes,
source videos, and exported results.

By default, the CLI and desktop app share the same VidXP data directory:
Expand Down
2 changes: 2 additions & 0 deletions benchmarks/codex-mcp/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
engine-strict=true
omit=optional
Loading
Loading