{"id":51893035,"url":"https://github.com/julesklord/bananascaler","last_synced_at":"2026-07-26T06:30:44.561Z","repository":{"id":372027341,"uuid":"1302746918","full_name":"julesklord/bananascaler","owner":"julesklord","description":"GPU-accelerated neural video upscaler with interactive TUI. (WIP)","archived":false,"fork":false,"pushed_at":"2026-07-18T11:22:44.000Z","size":781,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-18T13:14:06.174Z","etag":null,"topics":["cli","gpu","mass","multimedia","scaler","tui","upscale","video"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/julesklord.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-16T12:16:15.000Z","updated_at":"2026-07-18T11:22:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/julesklord/bananascaler","commit_stats":null,"previous_names":["julesklord/bananascaler"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/julesklord/bananascaler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julesklord%2Fbananascaler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julesklord%2Fbananascaler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julesklord%2Fbananascaler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julesklord%2Fbananascaler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/julesklord","download_url":"https://codeload.github.com/julesklord/bananascaler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julesklord%2Fbananascaler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35904303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-26T02:00:06.503Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","gpu","mass","multimedia","scaler","tui","upscale","video"],"created_at":"2026-07-26T06:30:43.654Z","updated_at":"2026-07-26T06:30:44.555Z","avatar_url":"https://github.com/julesklord.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ctable border=\"0\"\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"200\" align=\"center\" valign=\"middle\"\u003e\n      \u003cimg src=\"docs/assets/logo.jpg\" width=\"180\" alt=\"bananascaler logo\"\u003e\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      \u003ch1\u003ebananascaler\u003c/h1\u003e\n      \u003cp\u003e\u003cstrong\u003eGPU-accelerated neural video upscaler with interactive TUI.\u003c/strong\u003e\u003cbr/\u003e\n      \u003cem\u003eA Go CLI tool that scales videos up to 4× using Real-ESRGAN neural super-resolution, with automatic NVIDIA hardware acceleration, atomic output, and a live Bubbletea dashboard.\u003c/em\u003e\u003c/p\u003e\n      \u003cp\u003e\n        \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue?style=plastic\" alt=\"License MIT\"\u003e\u003c/a\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Built%20With-Go-00ADD8?style=plastic\" alt=\"Built with Go\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/version-0.4.1-informational?style=plastic\" alt=\"Version 0.4.1\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/GPU-NVIDIA%20NVENC%2FNVDEC-76B900?style=plastic\" alt=\"NVIDIA GPU\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/AI-Real--ESRGAN-orange?style=plastic\" alt=\"Real-ESRGAN\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/TUI-Bubbletea-FF69B4?style=plastic\" alt=\"Bubbletea TUI\"\u003e\n      \u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n\u003c!--toc:start--\u003e\n- [Overview](#overview)\n- [Requirements](#requirements)\n  - [Build Requirements (from source)](#build-requirements-from-source)\n- [Installation](#installation)\n  - [Pre-built Binary](#pre-built-binary)\n  - [From Source](#from-source)\n  - [System-wide Install](#system-wide-install)\n  - [Dependencies (Arch Linux / CachyOS)](#dependencies-arch-linux-cachyos)\n- [Key Features](#key-features)\n- [Profiles](#profiles)\n  - [Hardware Tiers](#hardware-tiers)\n  - [Presets](#presets)\n  - [Profile Table](#profile-table)\n  - [VRAM Safety](#vram-safety)\n- [Technical Architecture](#technical-architecture)\n  - [Core Components](#core-components)\n- [Processing Pipeline](#processing-pipeline)\n  - [Key Engineering Decisions](#key-engineering-decisions)\n- [Usage](#usage)\n  - [CLI Mode](#cli-mode)\n  - [TUI File-Selection Mode](#tui-file-selection-mode)\n  - [Flags](#flags)\n  - [Examples](#examples)\n- [TUI Dashboard](#tui-dashboard)\n- [Roadmap \u0026 Milestones](#roadmap-milestones)\n- [Acknowledgments](#acknowledgments)\n- [License](#license)\n\u003c!--toc:end--\u003e\n\n\u003cimg src=\"docs/demo.gif\" alt=\"bananascaler demo\"\u003e\n\n## Overview\n\n**bananascaler** is a Go CLI tool that enhances video resolution using neural super-resolution. It orchestrates `realesrgan-ncnn-vulkan` for per-frame AI upscaling and `ffmpeg` for lossless audio muxing and hardware-accelerated re-encoding.\n\nWhen run in a terminal, it renders an interactive **Bubbletea TUI** with live progress bars, stage tracking, and a scrollable log. When piped or run with `--no-tui`, it falls back to plain text output suitable for scripting and CI.\n\nSince **v0.3.0**, running `bananascaler tui` opens an interactive file-browser so you can pick any video file in the current directory and start upscaling — no arguments required.\n\n---\n\n## Requirements\n\n| Dependency | Purpose | Notes |\n|---|---|---|\n| `ffmpeg` | Frame extraction and final encoding | NVENC support strongly recommended |\n| `realesrgan-ncnn-vulkan` | Neural super-resolution | Must be in `$PATH` |\n| NVIDIA drivers + CUDA | Hardware acceleration | Optional, auto-detected |\n\n### Build Requirements (from source)\n\n| Tool | Version | Purpose |\n|---|---|---|\n| `go` | ≥ 1.22 | Compiler |\n| `ffmpeg` | Any recent | Runtime dependency |\n| `realesrgan-ncnn-vulkan` | v0.2.5.0+ | Runtime dependency |\n\n---\n\n## Installation\n\n### Pre-built Binary\n\n```bash\n# Available in bin/bananascaler\n./bin/bananascaler input.mp4\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/julesklord/bananascaler.git\ncd bananascaler\nmake build\n# Binary ready at ./bin/bananascaler\n```\n\n### System-wide Install\n\n```bash\nsudo make install\n# Installs to /usr/local/bin/bananascaler\n\n# Custom prefix:\nsudo PREFIX=/usr make install   # → /usr/bin/bananascaler\n```\n\n### Dependencies (Arch Linux / CachyOS)\n\n```bash\n# FFmpeg\nsudo pacman -S ffmpeg\n\n# Real-ESRGAN (Vulkan backend)\nmkdir -p ~/.local/share/realesrgan \u0026\u0026 cd ~/.local/share/realesrgan\ncurl -sL -O \"https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-ubuntu.zip\"\nunzip realesrgan-ncnn-vulkan-20220424-ubuntu.zip\nrm realesrgan-ncnn-vulkan-20220424-ubuntu.zip\nchmod +x realesrgan-ncnn-vulkan\nln -sf ~/.local/share/realesrgan/realesrgan-ncnn-vulkan ~/.local/bin/realesrgan-ncnn-vulkan\n```\n\n---\n\n## Key Features\n\n*   **Hardware-aware profiles**: Auto-detects GPU VRAM and selects optimal tile size, model, and encoding parameters. Choose `fast`, `balanced`, or `quality` — settings are adapted to your hardware tier.\n*   **Interactive TUI with file browser**: `bananascaler tui` opens a keyboard-navigable file picker in the current directory. Select a video and press Enter — the pipeline launches immediately inside the same TUI.\n*   **Full GPU pipeline**: NVDEC hardware-accelerated decoding in frame extraction + Vulkan-accelerated Real-ESRGAN upscaling + NVENC hardware-accelerated encoding. All three stages run on the GPU.\n*   **VRAM-safe tiling**: Tile sizes are scaled to detected VRAM and model weight class. `CheckTileSafety()` warns before exceeding safe limits, preventing OOM/SEGV crashes.\n*   **Neural Super-Resolution**: Frame-level upscaling via `realesr-animevideov3-x2` (lightweight), `realesrgan-x4plus-anime` (medium), or `realesrgan-x4plus` (heavy), supporting 2×, 3×, and 4× scale factors.\n*   **`bananascaler detect`**: Hardware scan subcommand showing your GPU info and all available profiles adapted to your system.\n*   **Atomic Output**: Encodes to a `.tmp` file; renames to final destination only on success. Interrupted runs leave no corrupt files.\n*   **Audio Preservation**: Original audio is remuxed without re-encoding (`-c:a copy`), maintaining lossless fidelity.\n*   **Session Isolation**: Each run creates a unique temp directory (`/tmp/bananascaler_{timestamp}_{PID}`) preventing conflicts.\n*   **Framerate Sync**: Uses `ffprobe` to extract the exact source framerate for perfect audio-video sync.\n*   **Smart Output Naming**: Auto-generates `{input}_upscaled.mp4` when no output path is given.\n*   **Graceful Cancellation**: Ctrl+C triggers cleanup of temp files before exit.\n\n---\n\n## Profiles\n\nbananascaler auto-detects your GPU's VRAM via `nvidia-smi` and selects optimized pipeline parameters. Three presets let you trade speed for quality.\n\n### Hardware Tiers\n\nbananascaler's profiler classifies systems using 6 granular VRAM-based buckets mapped to 3 primary hardware tiers:\n\n| Tier | VRAM Buckets | Example GPUs |\n|------|--------------|-------------|\n| **low-end** | \u003c3 GB (very tight)\u003cbr\u003e3–5 GB (standard low) | GTX 1050, GTX 1650, GTX 1060 3GB |\n| **mid-range** | 5–7 GB (mid-low)\u003cbr\u003e7–10 GB (true mid) | GTX 1060 6GB, RTX 2060, RTX 3070 |\n| **high-end** | 10–14 GB (high-end)\u003cbr\u003e14 GB+ (enthusiast) | RTX 3080 10GB, RTX 4070 Ti, RTX 4090 |\n| **unknown** | no NVIDIA | CPU-only mode / integrated GPU |\n\n### Presets \u0026 Priority (Throttling)\n\nEach preset automatically configures the process priority (`nice` level) of the neural upscaler, ensuring the system remains fully responsive during execution (idle-priority behavior similar to DaVinci Resolve):\n\n| Preset | Focus | Process Nice Level | When to use |\n|--------|-------|--------------------|-------------|\n| **fast** | Speed | Low priority (`nice=5` to `nice=15`) | Quick preview, short videos, time-constrained |\n| **balanced** | Default | Low priority (`nice=5` to `nice=15`) | Recommended for most users |\n| **quality** | Best output | Low priority (`nice=5` to `nice=15`) | Final render, archival, when time doesn't matter |\n\n*CPU Fallback uses `nice=19` to protect the host machine from freezing during heavy multithreaded x265 processing.*\n\n### Profile Table\n\nEach tier × preset combination sets tile size, model, NVENC preset, x265 preset/CRF, maximum scale, and process priority:\n\n| Tier | Preset | Tile | Model | NVENC | x265 | CRF | Max Scale | Nice Level |\n|------|--------|------|-------|-------|------|-----|-----------|------------|\n| low-end | fast | 64 | animevideov3-x2 | p1 | ultrafast | 28 | 2× | 15 |\n| low-end | balanced | 100 | animevideov3-x2 | p3 | fast | 26 | 2× | 15 |\n| low-end | quality | 150 | animevideov3-x2 | p5 | medium | 24 | 3× | 15 |\n| mid-range | fast | 200 | animevideov3-x2 | p3 | fast | 26 | 2× | 10 |\n| **mid-range** | **balanced** | **300** | **animevideov3-x2** | **p5** | **medium** | **22** | **2×** | **10** |\n| mid-range | quality | 350 | x4plus-anime | p7 | slow | 18 | 2× | 10 |\n| high-end | fast | 300 | x4plus-anime | p4 | medium | 22 | 4× | 5 |\n| high-end | balanced | 400 | x4plus | p6 | slow | 20 | 4× | 5 |\n| high-end | quality | 512 | x4plus | p7 | veryslow | 18 | 4× | 5 |\n\nThe **bold** row is the default for mid-range GPUs (e.g., GTX 1060 6GB).\n\n### VRAM Safety\n\nHeavier models require smaller tiles on the same GPU. Using `realesrgan-x4plus` with tile=400 on a 6GB GPU will crash. The profile system enforces safe pairings, and `CheckTileSafety()` warns at startup if manual overrides exceed safe limits.\n\nRun `bananascaler detect` to see your hardware and all available profiles.\n\n---\n\n## Technical Architecture\n\nThe pipeline is a sequential 3-stage process coordinated by a Go CLI. External tools handle the heavy lifting; Go provides the orchestration, TUI, and safety guarantees.\n\n``` \ngraph TD \n    User([User]) --\u003e|\"bananascaler input.mp4\"| CLI(Cobra CLI)\n    User --\u003e|\"bananascaler tui\"| TUICmd(tui subcommand)\n    TUICmd --\u003e Explorer[File Explorer TUI]\n    Explorer --\u003e|\"Enter on video\"| Pipeline\n\n    subgraph bananascaler\n        CLI --\u003e|\"TTY detected?\"| TTY{Terminal?}\n        TTY --\u003e|\"yes\"| TUI[Bubbletea TUI]\n        TTY --\u003e|\"no / --no-tui\"| Plain[StdoutLogger]\n        TUI --\u003e|\"Logger interface\"| Pipeline\n        Plain --\u003e|\"Logger interface\"| Pipeline\n\n        subgraph Pipeline\n            Pipeline --\u003e|\"Hardware detection\"| Detect[nvidia-smi]\n            Detect --\u003e Stage1[Stage 1: FFmpeg Extract\\nNVDEC hw-accel]\n            Stage1 --\u003e Stage2[Stage 2: Real-ESRGAN\\nVulkan + tile safety]\n            Stage2 --\u003e Stage3[Stage 3: FFmpeg Re-encode\\nNVENC hw-accel]\n            Stage3 --\u003e Atomic[Atomic Rename]\n        end\n    end\n\n    Stage1 -..-\u003e|\"NVDEC\"| GPU[(NVIDIA GPU)]\n    Stage3 -..-\u003e|\"NVENC / libx265\"| GPU\n    Stage2 --\u003e|\"Vulkan compute\"| GPU\n    Atomic --\u003e Output[(output.mp4)]\n```\n\n### Core Components\n\n- **`cmd/root.go`**: Cobra CLI definition. Detects TTY, launches Bubbletea or plain logger. Handles `--profile`, `--auto`, and `detect` subcommand.\n- **`cmd/tui.go`**: `tui` subcommand — launches the file-selection TUI in the working directory.\n- **`internal/pipeline/pipeline.go`**: Core engine. Orchestrates the 3-stage processing chain via a `Logger` interface. Reads parameters from the active profile.\n- **`internal/tui/`**: Bubbletea TUI layer — model (explorer + pipeline states, profile cycling), design system (styles), messages, and pipeline adapter.\n- **`internal/hardware/detect.go`**: GPU detection and media probing via external tools.\n- **`internal/hardware/profile.go`**: Hardware profile system — GPU VRAM detection, tier classification, 12 profile variants (4 tiers × 3 presets), VRAM safety validation.\n- **`internal/config/config.go`**: Configuration struct with validation and profile resolution.\n\n---\n\n## Processing Pipeline\n\nThe pipeline executes three sequential stages with strict exit-code validation between each.\n\n```mermaid\nstateDiagram-v2\n    [*] --\u003e Initialized : bananascaler called\n    Initialized --\u003e HardwareCheck : validate input + deps\n    HardwareCheck --\u003e ExtractFrames : nvidia-smi probe complete\n    ExtractFrames --\u003e UpscaleFrames : ffmpeg NVDEC extraction success\n    UpscaleFrames --\u003e ReEncodeVideo : Real-ESRGAN success\n\n    state ReEncodeVideo {\n        [*] --\u003e EncodingToTmp\n        EncodingToTmp --\u003e AtomicRename : exit code 0\n        AtomicRename --\u003e [*]\n    }\n\n    ReEncodeVideo --\u003e Cleanup : always\n    Cleanup --\u003e Complete : rename succeeded\n    Cleanup --\u003e Error : any stage failed\n\n    ExtractFrames --\u003e Error : ffmpeg exit != 0\n    UpscaleFrames --\u003e Error : realesrgan exit != 0\n    Error --\u003e [*]\n    Complete --\u003e [*]\n```\n\n### Key Engineering Decisions\n\n- **NVDEC hardware decoding in extraction**: `-hwaccel cuda` passed to FFmpeg in stage 1 so the GPU handles video demux and decode, reducing CPU load and extraction time.\n- **Tile-based VRAM protection**: Tile sizes are dynamically set from the hardware profile, pairing heavier models with smaller tiles to prevent OOM/SEGV crashes.\n- **Profile-driven parameters**: Tile size, model, JPEG quality, NVENC preset, and x265 preset/CRF are all read from the active profile instead of hardcoded, enabling automatic hardware adaptation.\n- **JPEG for intermediate frames, not PNG**: Reduces temp disk usage by ~60–70% and lowers I/O pressure on NVMe.\n- **Vulkan backend (ncnn) over CUDA-only**: `realesrgan-ncnn-vulkan` works on any GPU vendor via Vulkan, making the tool portable.\n- **Atomic write (`output.tmp` → rename)**: A `SIGKILL` mid-encode will leave a `.tmp` artifact, never a silently corrupt `.mp4`.\n- **Logger interface**: Decouples pipeline from output method — enables TUI, plain text, or programmatic consumers.\n\n---\n\n## Usage\n\n### CLI Mode\n\nPass a video file directly — flags are optional:\n\n```bash\nbananascaler \u003cinput\u003e [flags]\n```\n\n### TUI File-Selection Mode\n\nLaunch the interactive file browser in the current directory:\n\n```bash\nbananascaler tui [flags]\n```\n\nNavigate with `↑`/`↓` (or `j`/`k`), enter directories with `Enter` or `→`, go up with `Backspace` or `h`.\nCycle settings before launching: `s` (scale), `g` (GPU), `m` (model). Press `Enter` on a video file to start.\n\n### Flags\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--output` | `-o` | `\u003cinput\u003e_upscaled.mp4` | Output file path |\n| `--scale` | `-s` | `2` | Upscale factor: 2, 3, or 4 |\n| `--gpu` | `-g` | `0` | GPU device index (-1 = CPU) |\n| `--model` | `-m` | `realesr-animevideov3-x2` | Real-ESRGAN model name |\n| `--profile` | | `balanced` | Performance preset: `fast`, `balanced`, or `quality` |\n| `--auto` | | `false` | Auto-detect GPU and apply optimal profile |\n| `--verbose` | `-v` | `false` | Forward ffmpeg/realesrgan output |\n| `--no-tui` | | `false` | Disable interactive TUI |\n\nAll flags are available on both the root command and the `tui` subcommand.\n\n### Examples\n\n**Hardware detection (new in v0.4.0):**\n```bash\nbananascaler detect               # scan GPU + show all profiles\n```\n\n**Auto-detect profile, default balanced (recommended):**\n```bash\nbananascaler input.mp4            # auto-detects GPU tier, applies balanced\nbananascaler input.mp4 --auto     # same, explicit\n```\n\n**Choose a preset:**\n```bash\nbananascaler input.mp4 --profile fast       # speed over quality\nbananascaler input.mp4 --profile quality    # best possible output\n```\n\n**Interactive file picker (v0.3.0+):**\n```bash\nbananascaler tui\nbananascaler tui --scale 4 --gpu 0\n```\n\n**Auto-name output, default 2× scale (with TUI):**\n```bash\nbananascaler movie.mp4\n```\n\n**Specify output and 4× scale:**\n```bash\nbananascaler input.mp4 --output output_4k.mp4 --scale 4\n```\n\n**Plain text mode for scripting:**\n```bash\nbananascaler input.mp4 --no-tui --scale 2\n```\n\n**Background execution:**\n```bash\nnohup bananascaler input.mp4 --output out.mp4 --scale 4 --no-tui \u003e run.log 2\u003e\u00261 \u0026\n```\n\n---\n\n## TUI Dashboard\n\n### File Selection (v0.3.0+)\n\n```\n  🍌 bananascaler  file selector\n  /home/user/Videos\n──────────────────────────────────────────────────\n    archive/\n    exports/\n  ▌ movie.mp4                                    ▌  ← selected (gold highlight)\n    clip.mkv\n    poster.jpg\n\n──────────────────────────────────────────────────\n  Scale: 2×  [s]   │   GPU: GPU 0  [g]   │   Model: animevideov3-x2  [m]   │   Profile: mid-range/balanced  [p]\n\n  ↑↓ / jk navigate  ·  Enter open / select  ·  ⌫ / h go up  ·  p cycle profile  ·  q quit\n```\n\n### Pipeline Progress\n\n```\n  🍌 bananascaler\n  Profile: mid-range · balanced   GPU: GPU 0 · NVDEC+NVENC   Model: animevideov3-x2   Scale: 2×\n  in  movie.mp4\n  out movie_upscaled.mp4\n ──────────────────────────────────────────────────\n \n   ✔  1/3  Frame Extraction\n        ████████████████████████████████████████  100%  12847/12847\n \n   ▶  2/3  Neural Upscaling\n        ████████████████▓░░░░░░░░░░░░░░░░░░░░░░   34%  4412/12847  ETA 1m 45s\n \n   ○  3/3  Re-encode + Mux\n        ──────────────────────────────────────  waiting\n \n ──────────────────────────────────────────────────\n   ✔ ok   NVIDIA GPU detected — NVDEC+NVENC enabled\n   ◆ step [2/3] Neural upscaling (2×) via Real-ESRGAN...\n   · info 4412 frames upscaled\n ──────────────────────────────────────────────────\n   q / Esc cancel  ·  v verbose\n```\n\n**Keybinds**: `q`/`Ctrl+C`/`Esc` to cancel, `v` to toggle verbose output.\n\n---\n\n## Roadmap \u0026 Milestones\n\n| Version | Status | Milestone |\n|---|---|---|\n| **v0.1.0** | ✅ | Core pipeline: extract → upscale → re-encode → atomic output (Bash) |\n| **v0.2.0** | ✅ | Go rewrite + Bubbletea TUI + Logger interface + quality fixes |\n| **v0.3.0** | ✅ | `bananascaler tui` file picker · Full GPU pipeline (NVDEC+NVENC) · VRAM-safe tiling · Premium TUI redesign · System-wide `make install` |\n| **v0.4.0** | ✅ | Hardware profile system (4 tiers × 3 presets) · `bananascaler detect` · VRAM safety validation · Profile-aware encoding · TUI profile cycling |\n| **v0.4.1** | ✅ | Process nice priority control, stage ETA/percentage progress display, and refined 6-bucket hardware profiler |\n| **v0.5.0** | ⏳ | Parallel frame extraction/upscaling for multi-GPU setups |\n\n---\n\n## Acknowledgments\n\n- **[xinntao / Real-ESRGAN](https://github.com/xinntao/Real-ESRGAN)** — Neural super-resolution models and ncnn Vulkan inference backend.\n- **[FFmpeg](https://ffmpeg.org)** — Video demuxing, frame I/O, NVDEC/NVENC hardware codec layer.\n- **[Charm](https://github.com/charmbracelet)** — Bubbletea TUI framework and Lipgloss styling.\n\n## License\n\n\u003cp align=\"center\"\u003e\n  Engineered by \u003ca href=\"https://github.com/julesklord\"\u003ejulesklord\u003c/a\u003e.\u003cbr\u003e\n  Released under the terms of the MIT License.\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulesklord%2Fbananascaler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulesklord%2Fbananascaler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulesklord%2Fbananascaler/lists"}