Paste a YouTube link → download → on-device AI transcription → viral clip detection → karaoke captions → vertical 9:16 export.
No subscriptions. No accounts. No tracking. Your audio never leaves your phone.
| 📥 12-engine downloader | watchpage → visionOS → Samsung TV → Safari/Android web → NewPipeExtractor → Invidious → Piped → PO-token minter, with automatic fallback and per-engine health tracking |
| 🔑 PO-token minter | Video-ID-bound proof-of-origin tokens (unbound tokens die ~45 s into streams) |
| 🗣️ On-device Whisper | whisper.cpp transcription with word-level timestamps — no audio ever leaves your device |
| 🔥 AI clip ranking | Virality scorer finds the moments worth clipping |
| 🎤 Karaoke captions | Word-by-word highlighted subtitles, draggable in the editor |
| ✂️ Video editor | Trim, captions, waveform view, 9:16 export via Media3 Transformer |
| 🍪 Cookie import | Import your YouTube cookies.txt for age-restricted / private content (Seal-style) |
| 🚀 Adaptive downloading | Work-stealing ranged downloader, 8-way parallel chunks, QUIC via Cronet with OkHttp fallback |
| ⚙️ Remote config | Player configs and engine toggles update out-of-band — no APK update needed |
Since v1.9.6, ClipForge ships the antiform redesign — a xeroxed punk-zine aesthetic:
- 📰 Newsprint paper background with procedural grain overlay
- ✂️ Ransom-note logotype — every letter a different typeface, each tilted 1–3°
- 📸 Torn-edge photo collage with translucent tape strips
- 🔴 Agitprop red
#C42B22+ acid chart#C7D436— the only accents - ⬛ 4 px ink section borders — zero rounded corners, zero gradients, nothing centered
| Layer | Technology |
|---|---|
| Language | Kotlin 2.0 |
| UI | Jetpack Compose (Material3) |
| DI / Async | Kotlin Coroutines + Flow |
| Networking | OkHttp 4, Cronet (QUIC/HTTP-2), aria2c |
| Media | Media3 Transformer, ExoPlayer |
| STT | whisper.cpp 1.7.4 (JNI, libclipforge_whisper.so) |
| Extraction | NewPipeExtractor, yt-dlp (via youtubedl-android) |
| Config | Remote JSON + bundled fallback |
app/src/main/java/com/clipforge/android/
├── ingest/ # 12 download engines, PO-token minter, cookie auth,
│ # adaptive downloader, Cronet client, remote config
├── pipeline/ # Clip pipeline: transcription → virality scoring → tiling
├── stt/ # Whisper engine (JNI), model manager, VAD processor
├── video/ # Video engine: trim, caption burn-in, 9:16 export
├── ui/
│ ├── antiform/ # Punk-zine component library (~560 lines)
│ ├── editor/ # Clip editor: timeline, waveform, draggable captions
│ └── theme/ # Material3 theme + typography
└── data/ # SettingsStore, cookie storage
watchpage → visionos → tv_samsung → web_safari+cookies → cookies+aria2c
→ android+aria2c → web+aria2c → android+native → newpipe
→ invidious → piped → pot-minter
Each engine reports health; the chain skips dead engines automatically. The validateResources Gradle task runs on every build — corrupt fonts or images fail the build instead of crashing at runtime.
# Requires: Android SDK (compileSdk 36), JDK 17, Android NDK (for whisper.cpp)
git clone https://github.com/Rustys90/clipforge.git
cd clipforge
./gradlew :app:assembleDebugThe native Whisper library is built from whisper.cpp — see native/ for the build script. The PO-token minter ships as clipforge_pot.zip (QuickJS bundle, rebuilt via scripts/).
Every release is documented with Added / Removed / Improved / Fixed sections — see CHANGELOG.md.
PRs welcome. Please run ./gradlew lint before submitting. Bug reports should include the device model, Android version, and the ClipForge version (Settings → About).
GPL-3.0 — see LICENSE. Required by the NewPipeExtractor and aria2c dependencies.
Built by Rustys90 · Delhi, India
No subscriptions. No tracking. Just clips.