- Lua 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| assets | ||
| src | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| LICENSE | ||
| main.lua | ||
| README.md | ||
| tachytome.conf | ||
Tachytome
Tachos (τάχος) – Speed
Tome (τομή) – Cut
Keyboard Driven, AV1/H265/Lossless, MPV Video Cutter.
Click the image to view a quick showcase of Tachytome capabilities.
Table of Contents
Why Tachytome?
Cutting clips was always an exhausting chore for me.
I would clip something, navigate to it, open a video editor/cutting utility, drag and drop or paste the path, and so on.
Now consider the fact I have ~1TB of clips.
I built Tachytome to make cutting clips fun, easy and fast.
You run into a good clip, and Tachytome is right there, ready to cut the important part with the settings of your choice.
No more copying paths, no more external software with poor UX, it's all there, right in your video player.
Installation
Dependencies
gio is preinstalled on most distributions
- Arch
sudo pacman -S ffmpeg
- Mac
brew install ffmpeg
- Windows
winget install -e --id Gyan.FFmpeg
Clone
You may clone the repo directly to your config:
- Unix
git clone https://git.nnstdios.com/nnra6864/tachytome ~/.config/mpv/scripts/tachytome
- Windows (Powershell)
git clone https://git.nnstdios.com/nnra6864/tachytome "$env:APPDATA/mpv/scripts/tachytome"
Submodule
If you are source controlling your dotfiles, consider adding Tachytome as a submodule:
- Unix
git submodule add ../../nnra6864/tachytome ~/.config/mpv/scripts/tachytome
- Windows (Powershell)
git submodule add ../../nnra6864/tachytome "$env:APPDATA/mpv/scripts/tachytome"
Note
../../in the link makes git use the same server as your root repo.
For example, if your dotfiles are hosted onhttps://github.com/name/dotfiles, double../will make it go up twice in the URL, ending up withhttps://github.com/, and then appendingnnra6864/tachytometo that, resulting inhttps://github.com/nnra6864/tachytome
Usage
Tachytome is entirely keyboard driven.
All the binds are isolated into a submap (Tachytome menu), which you can access by pressing t by default.
This is done to avoid global bind conflicts.
Quickstart
tto open the Tachytome menu.gand type in10to go to 10 seconds of your video.ito mark in.gand type in90%to go to 90% of your video.oto mark out.IandOto make sure mark in and out are good.pto set the name of your video.Enterto start the render.rto access the render queue.
Keymap
| Keybind | Action | Description |
|---|---|---|
| t | Menu | Open the Tachytome menu. |
| nil | Go To | Open the Go To menu. |
| nil | Trash | Trash current file. |
Menu
| Keybind | Action | Description |
|---|---|---|
| i | Mark In | Mark the start of the video. |
| o | Mark Out | Mark the end of the video. |
| I | Go To In | Go to Mark In. |
| O | Go To Out | Go to Mark Out. |
| g | Go To | Go to a precise location in the video. Learn more about Go To. |
| e | Encoder | Set the video encoder. |
| q | Quality | Set the video encoder quality parameter. |
| P | Preset | Set the video encoder preset parameter. |
| F | FPS | Set the FPS of the video. |
| l | Lossless Cut | Toggle the lossless cut option. |
| a | Accurate Cut | Toggle accurate cut. Makes cuts millisecond precise, but may cause a slight delay before rendering starts. |
| c | Combine Audio | Toggle the combine audio option. |
| t | Trash Source | Toggle trashing of the source file on render completion. |
| _ | Space Replacement | Set the character to replace spaces with. |
| p | Path | Set Output path. Learn more about Path. |
| Enter | Render | Start the render of the output file. |
| R | Pause Render | Pause the current render and render queue. Can only pause the render queue on Windows. |
| r | Render Queue | Open the render queue menu. |
| d | Trash Source Now | Trash the source file. |
| s | Stats | Display Tachytome stats. |
| Esc | Close | Close the currently active menu. |
Render Queue
| Keybind | Action | Description |
|---|---|---|
| Enter | Pause Render | Pauses the current render and render queue. Can only pause the render queue on Windows. |
| p | Change Path | Change output path. |
| d | Delete | Deletes the item from the render queue. |
Path
| Keybind | Action | Description |
|---|---|---|
| Up/ctrl+k | Previous | Select previous item in history. |
| Down/ctrl+j | Next | Select next item in history. |
Lists (Render Queue, Preset etc.)
| Keybind | Action | Description |
|---|---|---|
| Up/ctrl+k | Navigate Up | Navigates to item above. |
| Down/ctrl+j | Navigate Down | Navigates to item below. |
Config
You can configure Tachytome with the mpv/script-opts/tachytome.conf file.
It should get automatically generated on the first launch.
You can find that same example config here.
The example config contains detailed explanations of all the settings, I would highly suggest reading it.
To access exposed Tachytome functions, add the following to your mpv/input.conf:
t script-binding tachytome/menu
g script-binding tachytome/goto
d script-binding tachytome/trash
Replace t, g and d with keys of your choice.
Recovery
Tachytome gracefully handles crashes and accidental closes.
Render queues are stored as files tied to the mpv PID.
Every time you start a new mpv instance, the script checks if any of these are present without an active mpv instance.
It then asks you whether you want to recover, discard or ignore the queue.
Go To
Tachytome includes a really powerful Go To implementation.
On top of many input types, it also supports relative jumps.
Prefix
You can prefix + or - to make go to relative to the current time.
HH:MM:SS.MS
This is arguably the most versatile format as you can do 30 to go to 30 seconds, but also 1:2.50 to go to 1 minute 2 seconds 500 milliseconds.
Suffix
This is a convenient format to jump across minutes, hours etc.
Instead of having to type 1:0, you simply type 1m to go to 1 minute.
| Suffix | Value |
|---|---|
| ms | millisecond |
| s | second |
| m | minute |
| h | hour |
| d | day |
| f | frame |
| % | percent |
Examples
| Input | Goes To |
|---|---|
+30 |
30 seconds ahead |
2:0 |
2 minutes |
1:13 |
1 minute 13 seconds |
3m |
3 minutes |
50ms |
50 milliseconds |
-60f |
60 frames back |
5% |
5% |
Path
Tachytome offers powerful path resolution.
Config includes the output_dir option which you can set to the path you most commonly use, by default ~/Videos/Tachytome.
Prefixes
| Prefix | Resolves To |
|---|---|
| Relative to the configured output_dir. | |
| ~ | Home on Unix, user directory on Windows. |
| / | Root directory. |
| ./ | Directory where the source file is. |
| ../ | Parent directory of the configured output_dir. |
Examples
| Input | Resolves To |
|---|---|
| CutClip | ~/Videos/Tachytome/CutClip.mkv |
| ~/CutClip | ~/CutClip.mkv |
| /CutClip | /CutClip.mkv |
| ./CutClip | /path-to-source/CutClip.mkv |
| ../CutClip | ~/Videos/CutClip.mkv |
Contributing
If you are interested in contributing, feel free to just open a PR.
The only thing I ask you to do is follow the commit naming convention.
AI is allowed as long as you fully review, understand and, most importantly, test the code.
Donations
Whilst Tachytome is entirely free, both as in speech and beer, I do highly appreciate donations as they are my only source of income.
AI
AI was heavily used in the making of Tachytome.
As I am not yet familiar with Greek, I asked AI for Greek Eastern Orthodox words that would fit my app, and then combined the 2 suggestions.
On top of that, AI wrote most of the code for me as I genuinely don't enjoy Lua.
To be precise:
- I gave it my original fish script, spc.
- Wrote instructions in pseudocode style that it translated to Lua.
- Dictated the exact structure of the code.
In short, whilst AI did write the code itself, the logic/structure, README and the original idea came from me, not the AI.
If that doesn't sit well with you, this repo is CC0 licensed, so feel free to do whatever you want with the code and the idea, it's a gift.
☦
Ὤ
Ὁ Ν
Ι̅Ϲ̅ │ Χ̅Ϲ̅
───┼───
ΝΙ │ ΚΑ
☦
Εἰς δόξαν τοῦ Θεοῦ
To the glory of God
Τῇ Ὑπεραγίᾳ Θεοτόκῳ δόξα
Glory to the Most Holy Theotokos
Δόξα τῷ Θεῷ πάντων ἕνεκεν
Glory to God for all things
ΑΜΗΝ
☦