[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1286":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":30,"discoverSource":31},1286,"nano-ffmpeg","dgr8akki\u002Fnano-ffmpeg","dgr8akki","nano-ffmpeg wraps the full power of ffmpeg in a beautiful, keyboard-driven terminal dashboard. No more googling flags. Browse your files, pick what you want to do, tweak settings with presets, and watch a live progress bar while it encodes.","https:\u002F\u002Fnano-ffmpeg.vercel.app",null,"Go",285,15,2,0,4,6,13,12,3.61,"MIT License",false,"main",true,[26],"ffmpeg","2026-06-12 02:00:25","\u003Cp align=\"center\">\n  \u003Cbr>\n  \u003Cstrong>nano-ffmpeg\u003C\u002Fstrong>\n  \u003Cbr>\n  \u003Cem>Every ffmpeg feature. Zero flags to remember.\u003C\u002Fem>\n  \u003Cbr>\u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fnano-ffmpeg.vercel.app\">Website\u003C\u002Fa> &bull;\n  \u003Ca href=\"#quick-start\">Quick Start\u003C\u002Fa> &bull;\n  \u003Ca href=\"#install\">Install\u003C\u002Fa> &bull;\n  \u003Ca href=\"#features\">Features\u003C\u002Fa> &bull;\n  \u003Ca href=\"#usage\">Usage\u003C\u002Fa> &bull;\n  \u003Ca href=\"#cli-options\">CLI Options\u003C\u002Fa> &bull;\n  \u003Ca href=\"#operations\">Operations\u003C\u002Fa> &bull;\n  \u003Ca href=\"#keybindings\">Keybindings\u003C\u002Fa> &bull;\n  \u003Ca href=\"#releasing\">Releasing\u003C\u002Fa> &bull;\n  \u003Ca href=\"#contributing\">Contributing\u003C\u002Fa> &bull;\n  \u003Ca href=\"#license\">License\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdgr8akki\u002Fnano-ffmpeg\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fdgr8akki\u002Fnano-ffmpeg\u002Fci.yml?branch=main&label=CI\" alt=\"CI\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdgr8akki\u002Fnano-ffmpeg\u002Freleases\u002Flatest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fdgr8akki\u002Fnano-ffmpeg?sort=semver\" alt=\"Latest release\">\u003C\u002Fa>\n  \u003Ca href=\"go.mod\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fgo-mod\u002Fgo-version\u002Fdgr8akki\u002Fnano-ffmpeg\" alt=\"Go version\">\u003C\u002Fa>\n  \u003Ca href=\"#license\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fdgr8akki\u002Fnano-ffmpeg\" alt=\"License\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\nnano-ffmpeg wraps the full power of ffmpeg in a beautiful, keyboard-driven terminal dashboard. No more googling flags. Browse your files, pick what you want to do, tweak settings with presets, and watch a live progress bar while it encodes.\n\nBuilt for people who know they need ffmpeg but can't remember how to use it.\n\n```\n╭─────────────────────────────────────────────────────────────────────╮\n│  nano-ffmpeg > Home                                                 │\n├─────────────────────────────────────────────────────────────────────┤\n│                                                                     │\n│  ╭──────────────────────────────────────────────────────────────╮   │\n│  │  ffmpeg 8.1                                                  │   │\n│  │  497 codecs  |  231 encoders  |  234 formats  |  489 filters │   │\n│  │  HW Accel: videotoolbox                                      │   │\n│  ╰──────────────────────────────────────────────────────────────╯   │\n│                                                                     │\n│  RECENT FILES                                                       │\n│     interview.mp4    ~\u002FVideos                                       │\n│     concert.mkv      ~\u002FDownloads                                    │\n│                                                                     │\n│  OPERATIONS                                                         │\n│   > Convert Format     Change container or codec                    │\n│     Extract Audio      Strip video, keep audio                      │\n│     Resize \u002F Scale     Change resolution                            │\n│     Trim \u002F Cut         Cut segments by time                         │\n│     Compress           Reduce file size                             │\n│     ...                                                             │\n│                                                                     │\n├─────────────────────────────────────────────────────────────────────┤\n│  ↑↓ Navigate   Enter Select   q Quit   ? Help                      │\n╰─────────────────────────────────────────────────────────────────────╯\n```\n\n## Quick Start\n\nIf you already have `ffmpeg` and `ffprobe` on your `PATH`:\n\n```bash\n# macOS (Homebrew tap -- also pulls ffmpeg-full):\nbrew install dgr8akki\u002Ftap\u002Fnano-ffmpeg\nnano-ffmpeg\n```\n\n```powershell\n# Windows (Scoop -- pulls ffmpeg from the extras bucket):\nscoop bucket add extras\nscoop bucket add nano-ffmpeg https:\u002F\u002Fgithub.com\u002Fdgr8akki\u002Fscoop-bucket\nscoop install nano-ffmpeg\nnano-ffmpeg\n```\n\n```bash\n# Any Go toolchain:\ngo install github.com\u002Fdgr8akki\u002Fnano-ffmpeg@latest\nnano-ffmpeg\n```\n\nJump straight into a specific file without clicking through the file picker:\n\n```bash\nnano-ffmpeg -d ~\u002FVideos\u002Finterview.mp4\n```\n\nThe TUI takes you from there: pick an operation, tweak the pre-filled defaults, hit Enter. See [Usage](#usage) for the full flow and [CLI Options](#cli-options) for every flag.\n\n## Features\n\n**Core**\n- 12 ffmpeg operations accessible through guided, multi-screen workflows\n- Pre-filled defaults for every operation so you can hit Enter without thinking about flags\n- Command preview on every settings screen -- see the exact `ffmpeg` command before it runs\n- Trim pre-fills the input's total duration; Stabilize automatically falls back to `deshake` if `vidstab` isn't in your ffmpeg build\n\n**Progress Tracking**\n- Gradient progress bar (green-to-cyan) with percentage\n- Real-time stats: elapsed, ETA (smoothed over rolling window), speed, FPS, bitrate, frames, output size\n- Braille-dot spinner for indeterminate operations (stream copy, concat)\n- Scrollable live log of raw ffmpeg output\n- Cancel with confirmation (`Esc` > `y`)\n\n**File Handling**\n- Built-in file browser with directory navigation\n- Path input mode (toggle with `\u002F`) for when you know exactly where your file is\n- Inline `ffprobe` metadata preview: codec, resolution, framerate, audio, duration, size\n- Recent files list on the home screen\n\n**Intelligence**\n- Capability detection: probes your ffmpeg build on startup and reports codec\u002Fformat\u002Ffilter\u002FHW-accel counts on the Home screen\n- Hardware acceleration detection: shows available accelerators (VideoToolbox, NVENC, VAAPI) on Home (note: detected accelerators are not yet applied to encode commands -- see `docs\u002Ffuture_scope.md`)\n- Human-readable error translation: converts cryptic ffmpeg errors into actionable messages\n- Capability cache at `~\u002F.config\u002Fnano-ffmpeg\u002Fcapabilities.json` (invalidated on version change)\n\n**Polish**\n- Context-sensitive help overlay (`?` on any screen)\n- Persistent config: recent files, preferences at `~\u002F.config\u002Fnano-ffmpeg\u002Fconfig.json`\n- Responsive layout with 80x24 minimum terminal size detection\n- Keyboard-first design with vim-style navigation (`j`\u002F`k`)\n\n## Requirements\n\n- **ffmpeg** and **ffprobe** installed and available in `$PATH`\n- For full Stabilize support (`vidstabdetect`\u002F`vidstabtransform`), use an ffmpeg build with `libvidstab` (Homebrew: `ffmpeg-full`)\n- Go 1.22+ (for building from source)\n- Terminal: 80x24 minimum\n\n### Installing ffmpeg\n\n```bash\n# macOS\nbrew install ffmpeg-full\n\n# macOS (minimal build, Stabilize falls back to deshake)\nbrew install ffmpeg\n\n# Ubuntu \u002F Debian\nsudo apt install ffmpeg\n\n# Fedora\nsudo dnf install ffmpeg\n\n# Arch\nsudo pacman -S ffmpeg\n\n# Windows (Scoop, recommended -- matches what nano-ffmpeg pulls in)\nscoop bucket add extras\nscoop install extras\u002Fffmpeg\n\n# Windows (winget)\nwinget install ffmpeg\n\n# Windows (Chocolatey)\nchoco install ffmpeg\n```\n\n## Install\n\n**Homebrew -- macOS \u002F Linux (recommended):**\n\n```bash\nbrew install dgr8akki\u002Ftap\u002Fnano-ffmpeg\n```\n\nThe Homebrew tap installs `ffmpeg-full` as a dependency so Stabilize, thumbnails, etc. work out of the box.\n\n**Scoop -- Windows (recommended):**\n\n```powershell\nscoop bucket add extras\nscoop bucket add nano-ffmpeg https:\u002F\u002Fgithub.com\u002Fdgr8akki\u002Fscoop-bucket\nscoop install nano-ffmpeg\n```\n\nThe Scoop manifest declares `extras\u002Fffmpeg` as a dependency, so Scoop pulls ffmpeg\u002Fffprobe for you. Installs are user-scope (no admin prompt).\n\n**Arch Linux (AUR):**\n\n```bash\nyay -S nano-ffmpeg\n```\n\n**Download binary:**\n\nGrab a prebuilt binary from [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fdgr8akki\u002Fnano-ffmpeg\u002Freleases\u002Flatest) for your platform (macOS, Linux, Windows).\n\n**Go install:**\n\n```bash\ngo install github.com\u002Fdgr8akki\u002Fnano-ffmpeg@latest\n```\n\n**Build from source:**\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdgr8akki\u002Fnano-ffmpeg.git\ncd nano-ffmpeg\ngo build -o nano-ffmpeg .\n.\u002Fnano-ffmpeg\n```\n\n## Usage\n\nRun with no arguments to open the TUI:\n\n```bash\nnano-ffmpeg\n```\n\nThe TUI guides you through the full flow:\n\n```\nHome  -->  File Picker  -->  Operations  -->  Settings  -->  Progress  -->  Result\n                                                                              |\n                                                                         Back to Home\n```\n\n1. **Home** -- See your ffmpeg version, capabilities, and recent files. Pick an operation.\n2. **File Picker** -- Browse to your file or type a path. See metadata inline.\n3. **Operations** -- Choose what to do (convert, compress, trim, etc.).\n4. **Settings** -- Configure with pre-filled defaults. See the ffmpeg command live.\n5. **Progress** -- Watch encoding with a live progress bar, ETA, and stats.\n6. **Result** -- See output path, before\u002Fafter size comparison. Do another or quit.\n\nAll flags are optional; see [CLI Options](#cli-options) for the full list and examples.\n\n## CLI Options\n\n| Flag | Short | Value | Description |\n|------|-------|-------|-------------|\n| `--theme` | `-t` | `dark` \\| `light` | Theme override for this run. Without the flag, the theme from `~\u002F.config\u002Fnano-ffmpeg\u002Fconfig.json` is used. |\n| `--dir` | `-d` | `\u003Cdirectory>` | Open the File Picker pre-focused on this directory. |\n| `--dir` | `-d` | `\u003Cfile>` | Skip the File Picker and jump straight to Operations with this file preloaded (the file is probed and added to the recent-files list). |\n| `--version` | -- | -- | Print the version and exit. |\n| `--help` | `-h` | -- | Print usage and exit. |\n\nExamples:\n\n```bash\n# Force a theme for a single run\nnano-ffmpeg --theme light\nnano-ffmpeg -t dark\n\n# Open the File Picker at a folder\nnano-ffmpeg -d ~\u002FVideos\n\n# Skip the File Picker entirely\nnano-ffmpeg -d ~\u002FVideos\u002Finterview.mp4\n```\n\n## Operations\n\n| Operation | What it does | Key settings |\n|-----------|-------------|--------------|\n| **Convert Format** | Change container\u002Fcodec | MP4, MKV, WebM, AVI, MOV; H.264, H.265, AV1, VP9; CRF quality, preset speed, audio codec |\n| **Extract Audio** | Strip video, keep audio track | MP3, AAC, FLAC, WAV, OGG, Opus; bitrate presets (64k-320k) |\n| **Resize \u002F Scale** | Change output height | 4K, 1080p, 720p, 480p, 360p; H.264 or H.265 (aspect ratio field is shown but currently has no effect -- see `docs\u002Ffuture_scope.md`) |\n| **Trim \u002F Cut** | Cut segments by time | Start\u002Fend time (end pre-filled from ffprobe); lossless cut (stream copy) toggle |\n| **Compress** | Reduce file size | CRF quality; H.264\u002FH.265\u002FAV1; preset speed (the Two-Pass toggle is shown but currently inert -- see `docs\u002Ffuture_scope.md`) |\n| **Merge \u002F Concat** | Join multiple files in the same folder with the same extension | Alphabetical order; stream copy or re-encode to H.264\u002FAAC |\n| **Add Subtitles** | Burn-in or embed existing subtitle streams from the input | Picks a subtitle track from the input file; font\u002Fsize\u002Fposition customization is not yet exposed |\n| **Create GIF** | Animated GIF from video | 10\u002F15\u002F24 fps; width presets; palette optimization (only GIF output today; WebP planned) |\n| **Extract Thumbnails** | Grab frames as images (PNG) | Single frame at a timestamp, 4x4 contact sheet, or every 5 seconds |\n| **Watermark** | Overlay a solid white color box | 5-position grid (corners + center), opacity, size presets (image and text overlays planned) |\n| **Audio Adjustments** | Normalize, volume, fade | loudnorm, dB boost\u002Freduce, fade in\u002Fout, remove audio |\n| **Video Filters** | Stabilize, deinterlace, speed, rotate, flip | vidstab (or deshake fallback), yadif, 2x\u002F0.5x speed, rotate 90°, horizontal\u002Fvertical flip |\n\n## Progress Screen\n\n```\n  input.mkv  -->  input_compressed.mp4\n\n  ████████████████████████████░░░░░░░░░░░░  63.4%\n\n  Elapsed   00:01:23        Frames    4,521\n  ETA       00:00:48        Size      142.3 MB\n  Speed     2.3x            Bitrate   8241 kbps\n  FPS       54.2\n  \n  ╭─ Live Log ─────────────────────────────────────────────╮\n  │ frame= 4521 fps=54.2 q=28.0 size= 148736kB time=...   │\n  │ frame= 4548 fps=54.1 q=28.0 size= 149120kB time=...   │\n  ╰────────────────────────────────────────────────────────╯\n```\n\n- Progress bar gradient: green (0%) to cyan (100%)\n- ETA smoothed with rolling average over last 5 updates (no jitter)\n- Braille spinner (`⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏`) for indeterminate operations\n- Cancel with `Esc` > confirm with `y`\n\n## Keybindings\n\n### Global\n\n| Key | Action |\n|-----|--------|\n| `q` | Quit |\n| `Ctrl+C` | Force quit |\n| `?` | Toggle help overlay |\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `↑` \u002F `k` | Move up |\n| `↓` \u002F `j` | Move down |\n| `Enter` | Select \u002F confirm \u002F execute |\n| `Esc` | Go back one screen |\n\n### File Picker\n\n| Key | Action |\n|-----|--------|\n| `Enter` | Open directory \u002F select file |\n| `Backspace` | Go to parent directory |\n| `\u002F` | Toggle path input mode |\n\n### Settings\n\n| Key | Action |\n|-----|--------|\n| `←` \u002F `→` | Change field value (select\u002Ftoggle) or move the text cursor |\n| Typing | Edit text fields (Start Time, End Time, Duration, Timestamp) |\n| `Enter` | Execute the ffmpeg command |\n\n### Progress\n\n| Key | Action |\n|-----|--------|\n| `Esc` | Cancel (with confirmation) |\n| `y` \u002F `n` | Confirm or deny cancellation |\n\n## Configuration\n\nConfig is stored at `~\u002F.config\u002Fnano-ffmpeg\u002Fconfig.json`:\n\n```json\n{\n  \"default_output_dir\": \"\",\n  \"theme\": \"dark\",\n  \"recent_files\": [\n    \"\u002FUsers\u002Fyou\u002FVideos\u002Finterview.mp4\",\n    \"\u002FUsers\u002Fyou\u002FDownloads\u002Fconcert.mkv\"\n  ],\n  \"hw_accel\": \"auto\",\n  \"ffmpeg_path\": \"\"\n}\n```\n\n| Field | Default | Description |\n|-------|---------|-------------|\n| `default_output_dir` | `\"\"` (same as input) | Where output files are saved |\n| `theme` | `\"dark\"` | Color theme: `dark` or `light` |\n| `recent_files` | `[]` | Last 10 files used (auto-populated) |\n| `hw_accel` | `\"auto\"` | Hardware acceleration: `auto`, `off`, `videotoolbox`, `nvenc`, `vaapi` |\n| `ffmpeg_path` | `\"\"` (auto-detect) | Override ffmpeg binary path |\n\nCapabilities are cached separately at `~\u002F.config\u002Fnano-ffmpeg\u002Fcapabilities.json` and auto-invalidated when your ffmpeg version changes.\n\nIf you pass `--theme dark|light` (or `-t dark|light`), it overrides the config theme for that run.\nIf you pass `--dir \u003Cdirectory|file>` (or `-d \u003Cdirectory|file>`), it overrides startup location for that run.\n\n## Project Structure\n\n```\nnano-ffmpeg\u002F\n├── main.go                              # Entry point\n├── cmd\u002F\n│   ├── root.go                          # Cobra CLI, --theme\u002F--dir\u002F--version flags\n│   └── root_test.go\n├── internal\u002F\n│   ├── app\u002F\n│   │   ├── app.go                       # Top-level Bubble Tea model, screen router\n│   │   ├── config.go                    # Config load\u002Fsave, recent files\n│   │   ├── app_test.go\n│   │   └── config_test.go\n│   ├── ffmpeg\u002F\n│   │   ├── detect.go                    # Find ffmpeg\u002Fffprobe binaries, parse version\n│   │   ├── capabilities.go              # Probe codecs, formats, filters, hwaccels; cache\n│   │   ├── probe.go                     # Run ffprobe, parse JSON into Go structs\n│   │   ├── command.go                   # Struct-based ffmpeg command builder\n│   │   ├── runner.go                    # Process management, stderr streaming\n│   │   ├── progress.go                  # Parse ffmpeg progress output, ETA calculation\n│   │   ├── errors.go                    # Translate ffmpeg errors to human-readable\n│   │   └── *_test.go                    # Full unit suite per file above\n│   ├── preset\u002F\n│   │   ├── preset.go                    # Quality \u002F resolution \u002F format preset catalog\n│   │   └── preset_test.go\n│   ├── screens\u002F\n│   │   ├── screen.go                    # Screen interface definition\n│   │   ├── messages.go                  # Shared navigation\u002Fstatus messages\n│   │   ├── screens_test.go\n│   │   ├── home\u002Fhome.go                 # Dashboard: ffmpeg info, recent files, operations\n│   │   ├── filepicker\u002Ffilepicker.go     # File browser + path input + ffprobe preview\n│   │   ├── operations\u002Foperations.go     # Operation category picker\n│   │   ├── settings\u002Fsettings.go         # Dynamic form per operation, live command preview\n│   │   ├── progress\u002Fprogress.go         # Progress bar, stats, live log, cancel flow\n│   │   └── result\u002Fresult.go             # Output summary, size comparison\n│   └── ui\u002F\n│       ├── theme.go                     # Color palette and shared styles (dark\u002Flight)\n│       ├── frame.go                     # Top bar, bottom bar, status line\n│       ├── help.go                      # Context-sensitive help overlay\n│       └── responsive.go                # Terminal size detection\n├── website\u002F                             # Next.js marketing site (deployed to Vercel)\n│   ├── app\u002F                             # Landing page + \u002Fdocs page\n│   ├── components\u002F                      # Navbar, Footer, TerminalDemo\n│   └── README.md                        # Contributor doc for the site\n├── .github\u002Fworkflows\u002F\n│   ├── ci.yml                           # Build + vet + test on push\u002FPR\n│   └── release.yml                      # GoReleaser on tag push\n├── .goreleaser.yaml                     # Cross-platform build + Homebrew tap + Scoop bucket config\n├── homebrew\u002Fnano-ffmpeg.rb              # Formula template (reference)\n├── docs\u002F\n│   ├── design\u002F                          # Original design spec and implementation plan\n│   ├── future_scope.md                  # Gap-closing roadmap (see Future Roadmap below)\n│   ├── release.sh                       # Single-command tag + push + workflow watch\n│   └── Makefile                         # `make release[-minor|-major]` wrappers\n├── go.mod\n├── go.sum\n└── README.md\n```\n\n## Tech Stack\n\n| Component | Library | Purpose |\n|-----------|---------|---------|\n| Language | Go 1.22+ | Single binary, no runtime dependency |\n| TUI framework | [Bubble Tea](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fbubbletea) | Elm-architecture terminal UI |\n| Styling | [Lip Gloss](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Flipgloss) | Composable terminal styles |\n| Components | [Bubbles](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fbubbles) | Pre-built TUI components |\n| CLI | [Cobra](https:\u002F\u002Fgithub.com\u002Fspf13\u002Fcobra) | Argument parsing, `--version`, `--help` |\n| ffmpeg | `os\u002Fexec` | Shell out to the user's installed ffmpeg (no CGo bindings) |\n| Release | [GoReleaser](https:\u002F\u002Fgoreleaser.com\u002F) | Cross-compile + GitHub Release + Homebrew tap + Scoop bucket |\n\n## Testing\n\n```bash\n# Fast path\ngo test .\u002F...\n\n# Verbose\ngo test .\u002F... -v\n\n# A single package\ngo test .\u002Finternal\u002Fffmpeg\u002F -v\ngo test .\u002Finternal\u002Fscreens\u002Fsettings\u002F -v\n\n# Ignore the cache\ngo test -count=1 .\u002F...\n```\n\nSnapshot of coverage by area:\n\n- **CLI (`cmd\u002F`)** -- flag parsing for `--theme`, `--dir` (directory vs file), error paths.\n- **App \u002F config (`internal\u002Fapp\u002F`)** -- recent-files dedup and cap, config load\u002Fsave defaults, initial-file startup path.\n- **ffmpeg (`internal\u002Fffmpeg\u002F`)** -- command builder (convert\u002Ftrim\u002Fextract\u002Fresize + extras), capability parsing, ffprobe JSON parsing, runner lifecycle, progress\u002FETA smoothing, error translation, detect helpers.\n- **Preset catalog (`internal\u002Fpreset\u002F`)** -- option tables for video\u002Faudio\u002Fgif\u002Fcompress presets.\n- **Screens (`internal\u002Fscreens\u002F*`)** -- filepicker, home, operations, settings (per-op form building + command assembly), progress, result, screen-router messages.\n- **UI (`internal\u002Fui\u002F`)** -- theme palette\u002Fstyle build, responsive size checks, help overlay layout, frame rendering.\n\n## Releasing\n\nReleases are driven by pushing a `v*` tag from `main`. The [`Release workflow`](.github\u002Fworkflows\u002Frelease.yml) then runs [GoReleaser](https:\u002F\u002Fgoreleaser.com) to publish a GitHub Release, update the Homebrew tap (`dgr8akki\u002Fhomebrew-tap`), and update the Scoop bucket (`dgr8akki\u002Fscoop-bucket`). Tap\u002Fbucket updates require `HOMEBREW_TAP_TOKEN` and `SCOOP_BUCKET_TOKEN` repo secrets.\n\nFrom a clean `main`:\n\n```bash\n# 1. Sanity checks\ngo test .\u002F...\ngo vet .\u002F...\n\n# 2. (Optional) Validate the GoReleaser config locally\ngoreleaser check\ngoreleaser release --snapshot --clean --skip=publish\n\n# 3. Pick the next version (last tag + bump). Example: v0.4.0 -> v0.5.0\nPREV=$(git describe --tags --abbrev=0)\nNEXT=v0.5.0\n\n# 4. Annotated tag whose body is the changelog since the previous tag\ngit tag -a \"$NEXT\" -m \"$NEXT\n\n$(git log \"$PREV\"..HEAD --pretty=format:'- %s' --reverse)\"\n\n# 5. Push the tag to trigger the release workflow\ngit push origin \"$NEXT\"\n\n# 6. Tail the workflow\ngh run watch\n```\n\n## Future Roadmap\n\nSee [`docs\u002Ffuture_scope.md`](docs\u002Ffuture_scope.md) for the full plan, including the feature gaps surfaced by the README\u002Fwebsite sync audit (watermark image\u002Ftext overlays, subtitle styling, crop\u002Fcolor filters, two-pass encoding, clipboard copy, capability-driven filtering, hardware-accelerated encoding, WebP output, aspect-ratio handling, merge reordering, smart defaults).\n\nLonger-term ideas tracked but not in v0.1.0:\n\n- [ ] Batch processing (apply same operation to multiple files)\n- [ ] Custom preset save\u002Fload\n- [ ] Operation queue (line up multiple jobs)\n- [ ] Watch folder (auto-process new files)\n- [ ] FFplay preview before full encode\n- [ ] Scene detection \u002F smart split\n- [ ] Whisper-based auto-subtitle generation\n- [ ] Plugin system for custom operations\n- [ ] Remote file support (URL \u002F S3 input)\n- [ ] Localization \u002F i18n\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature\u002Fawesome`)\n3. Make your changes\n4. Run tests (`go test .\u002F...`)\n5. Commit and push\n6. Open a PR\n\nPlease follow existing code structure -- one package per screen, logic in `internal\u002Fffmpeg\u002F`, UI in `internal\u002Fui\u002F`.\n\n## License\n\nReleased under the [MIT License](LICENSE).\n","nano-ffmpeg 是一个基于终端的多媒体处理工具，它将FFmpeg的强大功能封装在一个美观且键盘驱动的仪表板中。用户无需记忆复杂的命令行参数，通过浏览文件、选择操作（如转换格式、提取音频、调整大小等）、使用预设调整设置，并在编码过程中查看实时进度条即可完成任务。该项目采用Go语言编写，适合需要频繁使用FFmpeg但不熟悉其复杂命令行选项的用户。无论是视频编辑爱好者还是专业开发人员，在处理音视频文件时都能从中受益。MIT许可证下开源。","2026-06-11 02:42:49","CREATED_QUERY"]