Skip to main content

Local browser app for dataset video trimming and cropping

Project description

Minicut

Minicut is a local-first browser app for dataset preprocessing. It trims and crops videos, converts output FPS, and keeps original files unchanged.

What Is Implemented

  • Workspace video discovery from a single directory (non-recursive).
  • Workspace list with processed-file counts.
  • Workspace list sorting by:
    • name
    • processed count
    • asc or desc order
  • Active/selected source video highlighting in the workspace list.
  • Original video editor with:
    • Photoshop-style crop rectangle (draw, move, edge/corner resize)
    • trim preview controls (preview range, seek begin, seek end)
    • custom play/pause and scrub controls
  • Trim models:
    • begin second + duration in seconds
    • begin second + duration in frames (using output FPS)
  • Output FPS conversion (default: 24).
  • Processed video panel:
    • list all processed variants
    • preview selected output
    • open output directly
    • delete output
    • processed stats table
  • Original and processed stats tables:
    • fps, duration, resolution, codec, format, size, created/modified timestamps
  • Background in-process job execution with job polling/status updates.
  • Automatic workspace refresh on job completion (including a follow-up refresh for count consistency).

Processing Behavior

  • Output files are written to an output folder under the workspace.
    • Default output folder name: processed
  • Source files are never overwritten.
  • Output naming is collision-safe:
    • <stem>_processed.mp4
    • <stem>_processed_1.mp4
    • <stem>_processed_2.mp4
    • ...
  • ffmpeg pipeline currently:
    • trim window (-ss, -to)
    • video filters: crop, fps
    • video codec: libx264
    • audio codec: aac

Requirements

  • Python 3.11+
  • ffmpeg on PATH
  • ffprobe on PATH
  • uv package manager

Install

uv sync

Run

uv run minicut

By default this uses:

  • workspace: current directory
  • output folder: processed
  • host: 127.0.0.1
  • port: 8765

Common CLI options

uv run minicut --workspace /path/to/videos
uv run minicut --workspace /path/to/videos --output-folder processed
uv run minicut --host 0.0.0.0 --port 8765
uv run minicut --no-open-browser

Basic Workflow

  1. Start Minicut.
  2. Select a source video from Workspace Videos.
  3. Set trim mode, begin, duration, crop rectangle, and output FPS.
  4. Optionally preview trim range in the original player.
  5. Run processing.
  6. Inspect output in Processed Videos and Processed Preview.
  7. Repeat as needed; originals stay intact.

API Summary

Media endpoints:

  • GET /api/media/videos
  • GET /api/media/metadata
  • GET /api/media/stats
  • GET /api/media/file
  • GET /api/media/processed-preview
  • GET /api/media/processed-videos
  • DELETE /api/media/processed-file

Job endpoints:

  • POST /api/jobs/process
  • GET /api/jobs/{job_id}

Safety Constraints

  • Process source path must be inside the workspace directory.
  • File serving is restricted to workspace or output directory.
  • Delete is restricted to output directory only.

Development

Run tests:

uv run pytest

Known Limitations

  • Workspace scan is non-recursive.
  • Job queue is in-memory (no persistence across restart).
  • Processing currently targets H.264/AAC MP4 output.

Project details


Download files

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

Source Distribution

minicut-0.1.0.tar.gz (22.5 kB view details)

Uploaded Source

Built Distribution

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

minicut-0.1.0-py3-none-any.whl (31.8 kB view details)

Uploaded Python 3

File details

Details for the file minicut-0.1.0.tar.gz.

File metadata

  • Download URL: minicut-0.1.0.tar.gz
  • Upload date:
  • Size: 22.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for minicut-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4763fd34d78303a896ac16d089e20ba856b87bd9d3228b9654c08adc8817e6cc
MD5 158efa5b8d3ecea4ca88d4a0ff125d48
BLAKE2b-256 0e17d35bad283212965ae2d0026a41b659405d1684d2847e71a19a7cb73b9ddf

See more details on using hashes here.

File details

Details for the file minicut-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: minicut-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 31.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for minicut-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5496f9107b1b8556c7d780592ac14a3d5808b2f3861d84624e49288c848da706
MD5 d68408a7076462c3c3229de315e7951d
BLAKE2b-256 01829111c5b1e2ce53b443d37d2a88f2bf4cf6018a121ce79a352db7857a2b8f

See more details on using hashes here.

Supported by

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