Skip to content
freeb5dPublic

About

Drop a video, shrink it, done. A tiny cross-platform desktop video compressor (Go + Wails + FFmpeg).

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Repository files navigation

Squish icon

Squish

Drop a video, shrink it, done.

A fast, zero-dependency, cross-platform desktop video compressor. No uploads, no accounts, no watermarks, and nothing to install first — FFmpeg ships inside the app.

Release Build License: MIT Platforms


Overview

Pick a video, or drag one onto the window. Squish shows you its resolution, duration, codec, and size, then lets you dial in a format and quality — with a live estimate of the output size before you even hit compress. No prerequisites, no PATH configuration: FFmpeg is embedded in the binary and extracted automatically on first run.

Squish app window

Features

📦 Zero dependencies FFmpeg/FFprobe are bundled in the executable — nothing to install
🎬 Formats MP4 (H.264), MP4 (H.265 — smaller), WebM (VP9)
🎚️ Quality control CRF slider, live-labeled from "Excellent" to "Low"
📐 Resolution scaling Original, 75%, 50%, 25%
🔇 Audio Keep, or strip it entirely
📊 Live estimate Predicted output size and quality before you compress
🌍 10 languages English, فارسی, العربية, 简体中文, Русский, Français, Deutsch, Te Reo Māori, Español, Português — full RTL support for Persian and Arabic
🌗 Theming Light / dark, remembers your choice
🔄 In-app updates Checks GitHub for new releases and installs them with a live progress bar (%, speed) — no manual download
🖱️ Drag & drop Or use the native file picker
🪶 Lightweight UI Native WebView, not a bundled Chromium/Electron runtime

Download

Grab a prebuilt binary for your platform from the latest release — just run it, no setup required:

  • Windows — squish-windows-amd64.exe
  • macOS — squish-macos-universal.zip (Intel + Apple Silicon)
  • Linux — squish-linux-amd64

Every push of a v*.*.* tag builds and publishes all three automatically via GitHub Actions, with FFmpeg baked into each binary at build time. Squish also checks for new releases itself and can update in place — see About in the app footer.

How it works

Squish doesn't reimplement video codecs — like every tool in this space, it drives ffmpeg / ffprobe under the hood and wraps them in a native, lightweight GUI (no Chromium/Electron bundle). Unlike most tools in this space, it doesn't require you to install FFmpeg separately: the CI pipeline downloads the platform's FFmpeg binaries and embeds them directly into the executable via Go's embed package. On first run, Squish extracts them to a per-user cache directory and uses that copy — no PATH configuration, no separate installer.

The Go backend (app.go) builds the ffmpeg command from your chosen settings, parses -progress output to drive the compression progress bar, and exposes it all to a small vanilla HTML/JS frontend via Wails bindings. The self-update flow (update.go, update_windows.go, update_unix.go) downloads the matching release asset with progress events, then replaces the running binary in place and relaunches.

Building from source

Prerequisites

  • Go 1.21+
  • Wails CLI v2: go install github.com/wailsapp/wails/v2/cmd/wails@latest
  • FFmpeg is not required to build — a plain wails build falls back to whatever ffmpeg/ffprobe are on your PATH at runtime (handy for local development). To produce a fully self-contained binary like the official releases, place real ffmpeg/ffprobe binaries at resources/ffmpeg/<windows|darwin|linux>/ before building — see .github/workflows/build.yml for exactly how CI does this.
git clone https://github.com/freeb5d/squish.git
cd squish
wails dev      # run in dev mode with hot reload
wails build    # produce a release binary in build/bin/

Project layout

main.go                entrypoint, Wails app config
app.go                  backend: file dialogs, ffprobe/ffmpeg wrapper, progress events
update.go               GitHub release checks + download-with-progress
update_windows.go       self-update install step (Windows: batch-script relaunch dance)
update_unix.go          self-update install step (macOS/Linux: in-place binary swap)
ffmpeg_bundled.go       extracts the embedded ffmpeg/ffprobe binaries on first run
ffmpeg_embed_*.go       go:embed directives, one per platform
exec_windows.go         hides the console window ffmpeg/ffprobe would otherwise flash
exec_other.go
version.go              app version constant
resources/ffmpeg/       placeholder (0-byte) binaries in git; CI fills these in before building
frontend/dist/          static HTML/CSS/JS frontend (no build step required)
  i18n.js                 translation strings for all 8 languages
  fonts/                  embedded Vazirmatn font for Persian
.github/workflows/      CI: downloads FFmpeg, builds, and releases Windows/macOS/Linux binaries

License

MIT


Made with ❤️ by Kaveh

About

Drop a video, shrink it, done. A tiny cross-platform desktop video compressor (Go + Wails + FFmpeg).

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages