Skip to main content

Fast Video Analyzer

Fast Video Analyzer turns a video into a chronological record of its spoken content, visible text, and representative frames. It uses supplied subtitles or Whisper ASR for speech, OCR for text in frames, and scene detection to choose where to capture screenshots.

Each run writes one Markdown report and a folder of linked screenshots, crops, and supporting data. Read it to review a recording without repeatedly scrubbing through the video, or use it as source material for an LLM or AI agent.

Output

  • A time-ordered report with timestamps, transcript blocks, visible text, and selected frames.
  • Supplied subtitles or a locally generated Whisper transcript.
  • Full-size screenshots and OCR crops linked from the report.
  • A project folder containing the report, images, and validation data for later review.

Installation

Prerequisites

  • Python: 3.10, 3.11, or 3.12
  • FFmpeg & FFprobe: Must be available on your system PATH.

Install

python -m pip install --upgrade fast-video-analyzer

This installs the published package from PyPI. The base package supports the subtitle-led workflow below and does not download model weights. Install an optional capability only when you need it:

python -m pip install "fast-video-analyzer[asr]"  # local Whisper ASR
python -m pip install "fast-video-analyzer[ocr]"  # Python OCR wrapper

The asr extra still requires a locally available, verified model before an offline ASR run. The ocr extra still requires a supported OCR executable. Use fast-video-analyzer models list and fast-video-analyzer doctor --offline to inspect capability readiness; optional model downloads are always explicit.

Install from source

git clone https://github.com/berdan-labs/fast-video-analyzer.git
cd fast-video-analyzer
python -m pip install -e ".[asr,ocr]"

Verify your local environment:

fast-video-analyzer --version
fast-video-analyzer doctor --offline

For a concise operator view without machine-specific paths, add --summary. The default command remains the full diagnostic JSON for support and troubleshooting:

fast-video-analyzer doctor --offline --summary

Create a support bundle when asking for help. It contains sanitized capability metadata only; it does not copy source media, transcripts, screenshots, generated projects, credentials, or filesystem paths:

fast-video-analyzer diagnostic-bundle --output fast-video-analyzer-diagnostic.zip

First successful run

The subtitle-led path needs no model download. Run the commands from a clean working directory and replace the example paths with your own files:

fast-video-analyzer doctor --offline
fast-video-analyzer run "path/to/video.mp4" --subtitle "path/to/video.srt" --output "path/to/analyzer-output" --preset strict --offline
fast-video-analyzer validate "path/to/analyzer-output/video"

The run command writes JSON to standard output. Use its project_dir and markdown fields to find the result. A review_required status and exit code 3 mean the evidence was produced but still needs human review; they are not the same as a failed or invalid project. The final validate command should exit 0 and report "valid": true.

The output option is a root: the project directory is created below it using the source video stem. In the example above, it is path/to/analyzer-output/video.

The output directory contains one Markdown report plus its evidence and state:

path/to/analyzer-output/
└── video/
    ├── video.md
    ├── evidence/
    └── .state/

Local ASR workflow

After installing the asr and models extras, prepare a verified local model while network access is explicitly allowed:

python -m pip install "fast-video-analyzer[asr,models]"
fast-video-analyzer models fetch faster-whisper-large-v3
fast-video-analyzer models verify faster-whisper-large-v3
fast-video-analyzer run "path/to/video.mp4" --subtitle-mode force-asr --output "path/to/analyzer-output" --preset strict --offline

If an ASR run is interrupted, rerun the same command with the same output root. The resumable transcript checkpoints are retained, and the run manifest records the interrupted transcript stage instead of presenting a false success.

models fetch is the explicit network-enabled preparation step; do not run it when working in a network-denied environment. Once the model is verified, --offline prevents the analysis run from downloading anything.

The installed wheel also keeps the historical entrypoints working:

long-video-analyzer doctor --offline
video-script-reconstructor doctor --offline

All three entrypoints invoke the same parser and implementation. Nested compatibility aliases such as review bundle batch-create and review bundle create-batch are covered by the CLI compatibility tests.

Python API (provisional)

The CLI is the compatibility surface today; there is not yet a stable, versioned high-level Python API. The import below is useful for local tooling but is provisional and may change in a minor release. See the public contract inventory before building an integration around Python imports.

from pathlib import Path
from video_script_reconstructor.pipeline import run_pipeline

result = run_pipeline(
    input_value=Path("recording.mp4"),
    output_root=Path("outputs"),
    subtitles=[Path("recording.srt")],
    preset="strict",
)

print(f"Report: {result.markdown_path}")
print(f"Output directory: {result.project_dir}")
print(f"Status: {result.status}")

Output structure

Outputs are written alongside the source video by default:

<video_stem> (Analyzer Outputs)/
├── <video_stem>.md       # Chronological Markdown notes with linked evidence
├── evidence/
│   ├── full/            # Full-resolution scene keyframes
│   └── crops/           # OCR bounding crops (code, slides, text)
└── .state/              # JSON state manifests, checksums, and audit receipts

Validation and review

Verify output integrity against timeline rules and image pixel hashes:

fast-video-analyzer validate "path/to/video (Analyzer Outputs)"
fast-video-analyzer review list "path/to/video (Analyzer Outputs)"

Before a first run, plan --summary prints the selected workflow, estimated evidence/storage, prerequisites, and copyable run/validate commands without processing the media:

fast-video-analyzer plan "path/to/video.mp4" \
  --subtitle "path/to/video.srt" --offline --summary

If the run returns review_required (exit code 3), continue with the copyable no-copy bundle handoff in docs/review-workflow.md. It explains how to inspect review IDs, create bounded host-agent requests, apply attributable responses, and perform the final human sign-off without copying source media into the handoff.


Privacy and security

Media processing, frame extraction, and local model inference run without telemetry or cloud calls. Subtitles and OCR text are treated as untrusted input and escaped in Markdown deliverables.


Development

uv sync --locked --extra dev
uv run python scripts/verify_repo.py
uv run ruff format --check scripts/verify_repo.py
uv run ruff check src tests scripts
uv run mypy src/video_script_reconstructor
uv run pytest tests/unit tests/integration -q

The full mandatory acceptance gate also includes the end-to-end, mutation, and packaging suites:

uv run pytest tests/e2e tests/mutation tests/packaging -q

See CONTRIBUTING.md, OPERATIONS.md, docs/releasing.md, docs/runbooks.md, docs/corpus-evaluation.md, and SUPPORT.md for maintainer and contributor workflows.


License

MIT License

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fast_video_analyzer-0.1.1.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fast_video_analyzer-0.1.1-py3-none-any.whl (475.2 kB view details)

Uploaded Python 3

File details

Details for the file fast_video_analyzer-0.1.1.tar.gz.

File metadata

  • Download URL: fast_video_analyzer-0.1.1.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for fast_video_analyzer-0.1.1.tar.gz
Algorithm Hash digest
SHA256 04251d94e4a36cee6b6cc5640b76a493c193a4f1a1dc9252073f132a1b3f7a0c
MD5 ef3afa6492b955a9d26f2d4461c4588f
BLAKE2b-256 47f6465b08bd2508bed8f90c474ff2e1028b98f79dd6c5a4d61ea299fcaa4ac0

See more details on using hashes here.

Provenance

The following attestation bundles were made for fast_video_analyzer-0.1.1.tar.gz:

Publisher: release.yml on berdan-labs/fast-video-analyzer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fast_video_analyzer-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for fast_video_analyzer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e8e33af12d4c72dfbe173709b9c943b534c74ce5cc183755ef21d7f4159dfb6d
MD5 b97a1896afd4a2e98cd1800cd47e21a3
BLAKE2b-256 66b6ff148914491114b280e866c8add7d363e93bd21a916a4ad7e9b703edfad4

See more details on using hashes here.

Provenance

The following attestation bundles were made for fast_video_analyzer-0.1.1-py3-none-any.whl:

Publisher: release.yml on berdan-labs/fast-video-analyzer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page