Skip to content

FUXKVOB/Apexedit

Repository files navigation

Apexedit logo

Apexedit

Native desktop video editor — multi-track timeline, real-time preview, FFmpeg export.

Built with Tauri 2 + Rust + React (Next.js). Runs as a real Windows app — no browser limits.

GitHub top language GitHub release GitHub platform GitHub


Features

Timeline

  • Multi-track — video + audio tracks, add/remove/mute/reorder freely
  • Clip trimming — drag left/right trim handles to resize clips
  • Drag & drop — drag media from library onto timeline, reorder clips between tracks
  • Automatic ripple — clips shift when neighbours are moved
  • Snap to grid — smart snapping at configurable intervals
  • Zoom — scroll to zoom in/out on the timeline (pixels per second)

Preview

  • Real-time canvas — WebGL compositing via HTML5 video elements
  • Scrub — click anywhere on the progress bar to seek
  • Playback controls — play/pause, rewind, timecode display
  • Zoom — scale preview from 25% to 400%
  • Fullscreen — one-click fullscreen mode

Media Import

  • Native file picker — powered by @tauri-apps/plugin-dialog
  • Supported formats: MP4, WebM, MKV, MOV, AVI, WMV, FLV, MP3, WAV, OGG, FLAC, AAC, M4A
  • Thumbnails — auto-generated from each media file on import
  • Waveform — audio waveform extracted and displayed on clips

Effects & Transitions

  • Filters — brightness, contrast, saturation, blur (per-clip)
  • Fades — fade in / fade out per clip (configurable duration)
  • Transitions — dissolve, wipe-left, wipe-right between adjacent clips
  • Keyframes — animate volume, opacity, position over time
  • Text overlays — custom text with font, size, color, opacity

Export

Mode Description Formats
Quick Real-time canvas capture via MediaRecorder WebM (VP8, VP9)
FFmpeg Frame-by-frame rendering + FFmpeg encoding H.264, H.265/HEVC, VP9, AV1
  • Resolution: 480p / 720p / 1080p / 4K
  • Bitrate: 4 / 8 / 16 / 40 Mbps
  • Frame rate: 24 / 30 / 60 / 120 fps

Audio

  • Multi-clip mixing via rodio (symphonia under the hood)
  • Play / pause / seek / stop
  • Per-clip volume control
  • Speed control (0.25× – 4×)
  • Trim in/out points per clip

Keyboard Shortcuts

Key Action
Space Play / Pause
J Rewind 5s
K Pause
L Forward 5s
I Set in point
O Set out point
C Split clip at playhead
Delete / Backspace Remove selected clip(s)
Ctrl+Z Undo
Ctrl+Shift+Z Redo
Escape Clear in/out points

Other

  • Frameless window — custom titlebar with drag region, min/max/close buttons
  • Undo / Redo — 50-step history stack
  • Auto-save — project state saved to %APPDATA%/Apexedit/ every 30 seconds
  • Hotkeys — full keyboard-driven workflow

Tech Stack

Layer Technology
Desktop shell Tauri 2
Backend Rust (tokio, serde, rodio, image 0.25, symphonia 0.5)
Frontend Next.js 16 (React 19, TypeScript)
State management Zustand 5 + Rust IPC
Video encoding ffmpeg CLI (optional, detected in PATH)

Getting Started

Prerequisites

Install dependencies

pnpm install

Run in development mode

pnpm tauri dev

Build for production

pnpm tauri build

Output will be in src-tauri/target/release/:

  • apexedit.exe — standalone portable binary
  • bundle/msi/Apexedit_*_x64_en-US.msi — MSI installer
  • bundle/nsis/Apexedit_*_x64-setup.exe — NSIS installer

Project Structure

apexedit/
├── app/                    # Next.js app router (pages, layout)
├── components/
│   └── video-editor/       # React components: Timeline, PreviewPlayer, MediaLibrary, ExportPanel, ClipInspector
├── lib/
│   ├── video-editor/       # Types, utilities
│   ├── editor-store.ts     # Web proxy to Rust store
│   └── tauri.ts            # Tauri IPC wrappers
├── src-tauri/
│   └── src/
│       ├── main.rs         # Entry point
│       ├── lib.rs          # Tauri app setup, command registration
│       ├── models.rs       # Shared data types (Clip, Track, TimelineState, etc.)
│       ├── store.rs        # EditorStore — in-memory state + undo/redo
│       ├── render.rs       # Software frame compositing
│       ├── media.rs        # Media parsing via ffmpeg (thumbnails, waveform, frame extraction)
│       ├── audio.rs        # Audio mixer using rodio
│       ├── export.rs       # Video export via ffmpeg pipe
│       └── commands.rs     # 30+ Tauri commands
├── public/                 # Static assets
├── package.json
└── Cargo.toml

Architecture Overview

┌─────────────────────────────────────────┐
│           Frontend (React)              │
│  ┌──────────┐  ┌──────────────────────┐ │
│  │ Timeline │  │   PreviewPlayer      │ │
│  │ (clips,  │  │   (canvas compositing│ │
│  │  tracks) │  │    + playback loop)  │ │
│  └────┬─────┘  └──────────┬───────────┘ │
│       └────────┬──────────┘              │
│         editor-store.ts                   │
│        (useSyncExternalStore)            │
└───────────────┬─────────────────────────┘
                │ invoke()
┌───────────────┴─────────────────────────┐
│           Backend (Rust)                │
│  ┌──────────┐  ┌──────┐  ┌──────────┐  │
│  │  store   │  │media │  │  export  │  │
│  │ (state + │  │(ffmpeg│  │(ffmpeg  │  │
│  │  undo)   │  │ parse)│  │  pipe)  │  │
│  └────┬─────┘  └──────┘  └──────────┘  │
│       │                                   │
│  ┌────┴─────┐  ┌──────────────────────┐  │
│  │  render  │  │     audio (rodio)    │  │
│  │composite │  │   multi-clip mixer   │  │
│  └──────────┘  └──────────────────────┘  │
└─────────────────────────────────────────┘

License

MIT