Skip to main content

Trimmy — vertical split crop video editor

Project description

Trimmy

Vertical split-crop video editor. Take any video, pick two crop regions, stack them top-and-bottom into a 9:16 frame, and export optimized for social media.

The output stacks the two crops vertically into a single 9:16 video — ideal for reaction content, split-screen tutorials, gameplay + facecam, and Reels / TikToks / Shorts.

Install

pip install trimmy

Or run it without installing, using uv:

uvx trimmy

Requires ffmpeg and ffprobe available on your PATH, plus Python 3.10+.

Usage

Launch the app:

trimmy

Or open a file directly:

trimmy path/to/video.mp4

Then:

  1. Open or drag-drop a video.
  2. Position the two crop boxes on the source frame (TOP and BOTTOM).
  3. Adjust the split ratio by dragging the red divider.
  4. Trim the timeline to the segment you want.
  5. Pick a platform and quality preset.
  6. Render — ffmpeg encodes a ready-to-upload vertical video.

Keyboard shortcuts

Key Action
K Play / Pause
J Seek backward 5s
L Seek forward 5s
Q Set trim start to playhead
E Set trim end to playhead
M Toggle mute
? Show keyboard shortcuts

Platform presets

Platform Resolution Max FPS Max Size Codec
Instagram 1080x1920 60 300 MB H.264 High 4.0
TikTok 1080x1920 60 4 GB H.264 High 4.2
Twitter/X 1080x1920 60 512 MB H.264 High 4.2
WhatsApp 720x1280 30 16 MB H.264 Main 3.1
Telegram 1080x1920 60 2 GB H.264 High 4.2

Each platform offers a Max mode (highest quality, slower encode) and an Optimized mode (smaller files, faster encode). WhatsApp auto-caps bitrate to fit the 16 MB limit.

Development

Trimmy is built with PySide6. To work on it from source:

git clone https://github.com/musantro/trimmy.git
cd trimmy
uv sync
uv run python -m trimmy

Render screen playground

The render screen can be exercised without opening or encoding a video:

uv run trimmy-render-playground

Export deterministic screenshots for every render step:

uv run trimmy-render-playground --snapshot-dir .codex/render-playground

Use --state rendering or repeat --state to capture specific states.

See CHANGELOG.md for release history.

License

MIT

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

trimmy-0.9.0.tar.gz (763.9 kB view details)

Uploaded Source

Built Distribution

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

trimmy-0.9.0-py3-none-any.whl (791.0 kB view details)

Uploaded Python 3

File details

Details for the file trimmy-0.9.0.tar.gz.

File metadata

  • Download URL: trimmy-0.9.0.tar.gz
  • Upload date:
  • Size: 763.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for trimmy-0.9.0.tar.gz
Algorithm Hash digest
SHA256 11b29b839ae3621b543d24ff099795df9997d62d6bd303e2173767086bf11078
MD5 4a4332b06ebe1427eff17cc12db05d27
BLAKE2b-256 c7acdc4510c227d4fdcd11ad35d58adbb7c6c0d40a4c1d8d6a1eae9d71212a1a

See more details on using hashes here.

File details

Details for the file trimmy-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: trimmy-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 791.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for trimmy-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e983a6c921e973cf3afd9ceb63806da7ed1f6252f799b9a6ff61cfda72c152bd
MD5 bf8712de867ca0cbc6996ecc14dbabf5
BLAKE2b-256 0b27c924afbf444f04aff4f49735d9b3d6e23e40b0b04afc84907cc359ea5912

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