Skip to content

Releases: noxend/shrinkit

v3.2.0

Choose a tag to compare

@noxend noxend released this 28 Sep 10:06

shrinkit: edit and shrinkit: run, which replace mark cuts, presets managed from the command line, and documentation at https://noxend.github.io/shrinkit/.

New

  • shrinkit: edit on up to 10 recordings writes one text file with a block for each: its own preset, cuts and settings; merge = true joins the results. shrinkit: run on that file runs it in a terminal window, a line per step and a progress bar. shrinkit edit and shrinkit run do the same from a terminal.
  • shrinkit preset add, edit, remove and sync make, open or remove a preset and its right-click entry in one command; a removed preset's file goes to the trash.

Changed

  • mark cuts is gone and .cuts files are no longer read: put their ranges into an edit file, or pass them with --cut.
  • edit and merge take at most 10 recordings at a time.

Fixed

  • A preset name can no longer reach outside presets/.
  • --cut 0-end says nothing was left to encode instead of an ffmpeg error, and a missing ffprobe is named, in a banner too.

Update with brew upgrade --cask shrnkit. It rebuilds the right-click entries: mark cuts goes, edit and run come.

v3.1.0

Choose a tag to compare

@noxend noxend released this 25 Sep 06:37

shrinkit doctor, and fixes for failures that used to say nothing.

New

  • shrinkit doctor checks the install and says what is wrong and what to run to fix it: which shrinkit is running, ffmpeg, the working folder, the watcher, the right-click entries, the settings, the presets and what is waiting in input/. It only reads, and its output can go into an issue as it is.

Fixed

  • In settings.conf, a last line with no line break after it and a first line behind a byte-order mark were dropped without a word; both are read now. A line without "=" is logged. shrinkit config <key> <value> no longer deletes a last line with no line break.
  • An & or < in the working folder's name no longer breaks the watcher, and a $ or a backtick in a folder or preset name no longer runs as code when you right-click.
  • shrinkit setup says so when macOS refuses to start the watcher, instead of "Done."
  • A lock left by a stopped run is taken over when its process number now belongs to another program, where it used to stop every later run.
  • An empty file in input/ is logged as empty, not as still being written.

Update with brew upgrade --cask shrnkit. It rebuilds the right-click entries, so the ones from 3.0.0 get the new quoting.

v3.0.0

Choose a tag to compare

@noxend noxend released this 24 Sep 14:02

shrinkit now installs and updates through Homebrew. The install.sh, update.sh and uninstall.sh scripts are gone.

Install

brew tap noxend/shrinkit https://github.com/noxend/shrinkit
brew install --cask noxend/shrinkit/shrnkit

shrinkit is not in Homebrew's official catalog. The first command adds this repository as a tap, and Homebrew installs and updates shrinkit from there. The package is shrnkit because Homebrew already has a different app named shrinkit. The command is still shrinkit. Update with brew upgrade --cask shrnkit. brew uninstall --cask shrnkit removes the watcher, the right-click entries and the command, and leaves your recordings and settings where they are.

Coming from 2.x

Install with brew over the old version. It keeps your working folder, settings and presets, takes over the watcher and the right-click entries, and removes the old copy from ~/.local/bin. You no longer need the clone.

New

  • shrinkit: merge joins several recordings into one. Select them in Finder, right-click, pick it, then shrink the result.
  • --keep 1:00-2:00 names the part to keep, the other side of --cut.
  • shrinkit config folder <path> moves the working folder and takes your settings and presets along.
  • shrinkit setup and shrinkit teardown replace the old scripts when you run from a clone.

Fixed

  • Right-clicking a recording on the Desktop, in Documents or in Downloads produces the result instead of failing.
  • Logging out or quitting during an encode stops ffmpeg and removes the partial file.
  • shrinkit config shows the values in effect, where it used to show the file.
  • A comma as the decimal separator in the system locale no longer breaks runs.

v2.0.0

Choose a tag to compare

@noxend noxend released this 30 Aug 08:24

Cutting a stretch out of a recording, and five settings removed.

New

  • Cut a stretch out of a recording. On the command line, name the ranges with --cut, once each:

    shrinkit --cut 0:32-0:35 --cut 2:30-end recording.mov

    Or put a <recording>.cuts text file next to the video, one range per line, which is what the
    right-click menu uses and what survives being closed and come back to. shrinkit: mark cuts
    opens the video and the sidecar together, so you can read the timestamps off the player while you
    type them in.

    0-0:20
    0:32-0:35
    1:10-1:12.5
    2:30-end
    

    0 is the start and end is the real length of the clip, so trimming either edge is the same
    range as everything else. The cut frames are never written to the output at all, which is the
    point if you are cutting a password or a private chat out of a recording rather than just
    shortening it. --cut replaces the sidecar for that run rather than adding to it, the same way
    every other flag beats the config file.

  • keep_days deletes originals from .processed/ once they are that many days old. It defaults to
    0, which keeps them forever, so nothing changes until you set it.

  • A sharp preset at crf = 18, for a clip going into a pull request where the reviewer has to
    read the diff rather than just see that something moved.

Changed

Five settings are gone. An old settings.conf still loads, they are simply ignored from now on, so
read this list before upgrading rather than after.

  • output_dir is gone. Results go to output/ again. If you had pointed it somewhere else, that is
    where your recordings stopped arriving. To send them elsewhere now, replace output/ with a
    symlink to wherever you want them.

  • output_suffix is gone, and output files are named after the preset that ran. clip.mov comes
    back as clip-tiny.mp4, or plain clip.mp4 when no preset was named. It used to be
    clip-2x.mp4, so anything downstream matching that pattern needs a second look.

  • trim_idle is gone. It renumbered timestamps against the frame rate the container claims, and
    screen recordings lie about that: a ReplayKit capture reports 120 while actually running nearer
    32. Measured on a real clip, a filter tuned to drop zero frames still compressed 24.6 seconds
    down to 7.8. It had been doing that to every recording since v1.0.0, on top of whatever it
    legitimately trimmed. Cutting a stretch out on purpose covers the same ground and does not read a
    frame rate from anywhere.

  • notify_title is gone; the banner says shrinkit.

  • check_updates is gone. It ran a git fetch from inside the encoder, which is not where a
    network call belongs.

Presets are renamed, and there are three of them: 2x for speed, sharp for detail, tiny for
size. default was empty and only held a place in the menu, and chat said where the file was
going rather than what it does. ./update.sh renames your files in place and leaves any preset you
wrote yourself alone, but --preset chat in a script or an alias needs changing to --preset tiny
by hand.

Fixed

  • A failed move into place is reported instead of finishing silently and leaving a stray part-file
    behind.
  • A cut range that starts at or past the end of the clip is rejected, instead of encoding a full
    length copy and reporting a cut that never happened.
  • A .cuts sidecar selected in Finder alongside its video is skipped instead of being handed to
    ffmpeg as a video.
  • A locked or unwritable original no longer files its .cuts sidecar away without it.
  • The warning about a misnamed sidecar no longer fires for an unrelated recording whose name starts
    the same way.
  • Two runs writing the same output name no longer produce an unplayable file. Each encode goes to a
    hidden part-file and is renamed into place.
  • fps is capped at 240, so a typo cannot start an encode that never finishes.
  • A cut range typed as exactly 6.0-6.1 is no longer rejected for being a hair under a tenth of a
    second.
  • The frame rate cap is applied after the speed change on the cuts path too, so fps = 20 with
    cuts and 3x speed no longer ships at 60.

Upgrading

./update.sh

Your recordings carry over untouched, and so does settings.conf. What needs your attention is the
Changed list above: output_dir and output_suffix change where files land and what they are
called, and a renamed preset breaks any script that named the old one.

v1.0.0

Choose a tag to compare

@noxend noxend released this 09 Aug 12:54

Renamed from demo-video-optimizer. The command, the launchd label, the environment variables and
the working folder all moved with it.

New

  • trim_idle cuts out the parts where the screen is not changing. A 20 second test clip with four
    seconds of movement in it came out at 2 seconds instead of 10. Off by default. It also stands
    down on any file that keeps its audio, because dropping video frames would leave the sound behind.
  • Every setting works as a flag, so one file can be handled differently without editing anything:
    shrinkit --speed 4 --crf 32 recording.mov.
  • Presets. Put a file of settings in presets/ and use it with --preset chat. Any preset can get
    its own right-click entry: shrinkit preset install chat.
  • shrinkit config prints what is in effect. shrinkit config crf 32 changes one line and leaves
    the comments around it alone. shrinkit config edit opens the file.

Changed

  • Settings are key = value in settings.conf. An older settings.jsonc is converted during
    install and kept as a .bak. The JSON version started a JavaScript interpreter on every single
    encode to read fifteen keys, and one missing comma put every setting back to its default without
    telling you.
  • output_suffix understands {speed}, so speed = 3 stops producing files called -2x.
  • The Finder entry is now called Shrink Video.

Fixed

  • A queue of large files could lose its lock halfway through an encode, once the run passed thirty
    minutes, and a second run would pick the same file up. The lock now records the pid holding it,
    and only a run that has actually died gets overruled.
  • A // or a # inside a setting value no longer cuts the value short.
  • --help prints usage instead of being treated as a filename.

The test suite had 54 checks before this release and has 89 now. GitHub Actions runs them plus
shfmt on a macOS runner.

Upgrading

./update.sh

That pulls and reinstalls. It takes the old demo-video-optimizer install apart, moves
~/Movies/demo-recordings to ~/Movies/shrinkit, and converts your settings. Recordings, settings
and presets all carry over.