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
ffprobeavailable on yourPATH, plus Python 3.10+.
Usage
Launch the app:
trimmy
Or open a file directly:
trimmy path/to/video.mp4
Then:
- Open or drag-drop a video.
- Position the two crop boxes on the source frame (TOP and BOTTOM).
- Adjust the split ratio by dragging the red divider.
- Trim the timeline to the segment you want.
- Pick a platform and quality preset.
- 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 |
|---|---|---|---|---|
| 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 |
| 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trimmy-0.12.0.tar.gz.
File metadata
- Download URL: trimmy-0.12.0.tar.gz
- Upload date:
- Size: 770.5 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fb50ce7bf12ebcd61487a0b5cce2bdfd77889d5d46bec324153bd945b93b015
|
|
| MD5 |
b4b44340a6f726b4e46bc39e7c636550
|
|
| BLAKE2b-256 |
f4cf4821b40e366497031185606dc72f60eea1c84201d38d99ab22575e847cd1
|
File details
Details for the file trimmy-0.12.0-py3-none-any.whl.
File metadata
- Download URL: trimmy-0.12.0-py3-none-any.whl
- Upload date:
- Size: 797.9 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5600eacbf105ceb71a9a031018dbcec4fcd873ca3968dfee2041b33ab70a1a75
|
|
| MD5 |
43d44b868dc7253b4fe83d9b97c653e0
|
|
| BLAKE2b-256 |
bb5b7b23686acd88f4d5688f946ccd1269fe5e7fa833ee429aa34814a3ae077c
|