FunClipper
Inspired by one of the users on this forum who asked for help with creating a VR compilation, I created this app
FunClipper is a Windows desktop app that lets you take multiple videos, cut the parts you want from each one, and merge them into a single video. The funscripts get automatically merged and time-aligned, no manual editing required
This is a fully standalone app - no external dependencies, no setup, no additional tools required. Download → run → use
Here is an example of the final result achieved using this app (video + script)
Nothing was edited, this is pure output from the app:
The videos and amazing scripts used here come from @SIDM from this post:
https://discuss.eroscripts.com/t/rinjo-18-mega-script-bundle-incooming-brace-and-or-bust-32-scripts-of-varying-lengths-over-3-hours-of-scripted-content/308452
What it does
- Add clips from anywhere on your drive (file picker, folder import, or just drag & drop onto the window)
- Set start/end timestamps for each clip using the built-in preview player
- Reorder clips by dragging them up and down the list
- Apply the same start/end timestamps to all clips at once with the Apply to All bar
- Merge everything into one
.mp4+.funscript - Save and load projects (
.funclipperfiles) so you can continue editing later
Funscripts are detected automatically - just put them in the same folder as the video with the same filename (video.mp4 + video.funscript) and the app handles the rest. Timing math, offset calculation, fade transitions etc
Multi-axis funscripts (.pitch, .roll, .surge, .sway, .twist) are also detected and merged correctly alongside the main script
Two modes: Edit / Merge
- Edit mode - re-encodes everything to your target resolution, FPS and codec. Applies fade transitions. Works on any clips no matter how mixed
- Merge mode - uses lossless
-c copywhen all your clips have matching codec, resolution and FPS. No re-encoding, no quality loss, instant. A live compatibility indicator tells you whether your current clips qualify
Preview player
Click
Preview on any clip to open it in the built-in player. Use the seekbar to find your cut points, then hit Set Start / Set End
Keyboard shortcuts:
Space- play/pause← →- seek[- set start at current position]- set end at current position
Green marker = start, red marker = end, visible directly on the seekbar
Generate Full Preview
Renders a fast, lower-quality preview of the final output - both video and merged funscript - so you can verify everything before the actual export. Uses GPU encoding when available
Multi-Axis 3D Preview
When a clip has axis scripts, a separate transparent 3D window shows a live stroker animated in sync with playback. Available both in the per-clip preview and Generate Full Preview. The window stays on top of other windows, and remembers its size and position between sessions
Upscale & Frame Interpolation
Optional output upscaling and framerate boosting:
- Upscale - Fast (GPU, quick) or Quality (AI, sharper but slow). Quality offers separate models for Real-life / 3D and Anime / 2D
- Frame Interpolation - generates intermediate frames to raise output framerate (e.g. 30 → 60 fps). Powered by RIFE
AI models are bundled, no extra download. Quality features need a Vulkan-capable GPU - the app auto-detects and disables them otherwise
Best used for small bumps (e.g. 720p → 1080p). For top-quality upscaling use a dedicated tool like Topaz Video AI
Settings
| Option | What it does |
|---|---|
| Fade in/out | Each clip fades smoothly at the edges. Default 1.2s. Applies to video and funscript independently |
| Encoder | GPU (Nvidia, AMD, Intel) or CPU. Auto-select or pick a specific one |
| Resolution | Presets for VR, 16:9 and 2:1 from 1080p to 8K. Portrait/Landscape toggle. Custom option too |
| FPS | 24 / 30 / 60 / 120 FPS. Mixed FPS clips all get normalized to your target |
| Quality | Fast / Balanced / Quality |
| Audio | Keep original, replace with an MP3, or mix MP3 with original audio + volume slider |
| Normalize | Evens out volume differences between clips |
In the gear icon (top of the header) you’ll also find a sound effects toggle and 6 accent color themes
Larger clips scale down, smaller ones get centered with black bars
Output is encoded with -pix_fmt yuv420p, -tag:v hvc1 and -movflags +faststart so it SHOULD play correctly in HereSphere and other VR players
Audio in preview
If you’re using Replace or Mix mode, the preview player syncs the music to the correct timeline position for that clip so clip 3 will play the music starting from where clips 1+2 would have ended. What you hear in preview is what the final video sounds like
Timeline
There’s a visual timeline at the bottom showing all clips proportionally. If you have a music track loaded, the audio length shows as a grey background so you can see at a glance if it covers all your clips. Click any block to open that clip’s preview
Download link → 344.4 MB folder on MEGA
VirusTotal scan results → VirusTotal
Built with Electron + ffmpeg
If needed, I will add more features or improve what is already there. I am open to suggestions. Let me know if you run into any issues :3
Update details
1.1.0
UPDATE 1.1.0
-
Script preview
Added script preview under each video preview -
Generate Full Preview
FunClipper now renders a fast, lower-quality preview of the final output, including both video and script, so you can verify everything before the final render
1.2.0
UPDATE 1.2.0
-
Separate Video & Script Fade Controls
Now you can apply fade independently to the video and the script -
Multi-GPU Encoder Support
Added hevc_amf, h264_amf (AMD), hevc_qsv, h264_qsv (Intel) -
Project Save/Load System
Save your project configuration (clips, timings, settings) to a .funclipper file, load saved projects to continue editing later -
Disk Space Check Before Export
Estimates output file size based on clip duration and quality settings. Checks available free space on target drive before starting export. Warns if insufficient space and prevents failed exports -
Video Metadata Display
Shows resolution, FPS, and codec for each video in the video list -
Minor Changes & Improvements
Fixed a few bugs and added a few more to fix later
1.2.1
UPDATE 1.2.1
-
Enhanced GPU Encoder Support
Manual dropdown to select specific encoder (NVIDIA NVENC, AMD AMF, Intel QSV) or “Auto-select best available”. Fixed vendor-specific parameters for AMD/Intel GPUs (fixes “Could not open encoder” errors) -
Error Reporting
Save error logs with system info to help debug issues -
Bug Fixes
Fixed funscript fade calculation error (when clip duration is shorter than fade duration). Fixed XSS vulnerability in clip card filenames. Fixed memory leak in funscript cache
1.3.0
UPDATE 1.3.0
-
Merge Mode
Added a new “Merge” mode alongside the existing “Edit” mode. Switch between them using the buttons at the top of the settings panel. Merge mode is merging clips together losslessly using-c copy, no re-encoding, no quality loss, instant. Works only when all clips have matching codec, resolution and FPS. A live compatibility indicator shows whether your clips can be merged losslessly, with details on what differs if they can’t -
Multi-Axis Funscript Support
Now detects and processes multi-axis funscripts. If your clips have.pitch.funscript,.roll.funscript,.surge.funscript,.sway.funscript,.twist.funscriptfiles alongside the main script, they will all be trimmed and merged correctly
Multi-axis script preview is not available yet. I need to figure out how to implement it without making a mess in the UI -
Apply to All Clips
New bar above the clip list lets you set Start and End time for all clips at once. If any clips are shorter than the entered End time, they get trimmed to their maximum duration and you get a notification listing which ones were affected -
Script Preview Moved to Player
Removed the “Script” button from each clip card. Instead, a “Show script” / “Hide script” button now appears in the player bar next to the volume slider. Switching preview to a different clip while the script is visible automatically refreshes the script for the new clip -
Recursive Folder Import
“Add Folder” now scans all subfolders recursively. Files are sorted alphabetically by full path -
H.264 + High Resolution Warning
When H.264 is selected as GPU encoder and a resolution above 4K is chosen, the app automatically switches to HEVC and shows a notification explaining why -
Preview Uses GPU
Generate Full Preview now uses GPU encoding if available instead of always using CPU -
Bug Fixes
Fixed thumbnails - now appear as soon as they’re ready instead of waiting for the next clip to be added
Fixed drag & drop not working
Fixed crash when loading a project with an unrecognized encoder value
Fixed crash when loading a corrupted/incomplete project file
Fixed funscript read crashing on malformed files
Fixed disk space estimate always using “balanced” quality regardless of selected setting
Fixed GPU encoder warning toast appearing once per clip instead of once per export
Fixed video files with#in the filename not loading in the player
Fixed disk space check failing on Windows 11 24H2
1.3.1
UPDATE 1.3.1
Bug Fixes
-
Separate Video & Script Fade Controls
Fixed - now you can apply fade independently to the video and the script -
Video Playback with Special Characters
Fixed a bug where video files with#in their filename would fail to load in the preview player -
Audio Sync in Preview
Fixed audio desync in the preview player. Audio now correctly follows the current video position within a clip instead of always starting from the beginning of the audio track -
Export Button Locked After Mode Switch
Fixed a bug where switching from Merge mode (with incompatible clips) back to Edit mode left the Export button permanently grayed out -
Cancel Button Race Condition
Fixed a race condition where clicking Cancel would briefly re-enable the Export button before the main process confirmed the task was stopped -
Funscript Errors Now Logged
Parsing errors for funscript files are no longer silently swallowed. Invalid or corrupted funscript files will now produce a warning in the log -
Audio Path Validation
Added validation for the audio path before starting export. A missing or invalid audio file now produces a proper error instead of crashing the FFmpeg process -
Windows Reserved Filenames
Output filenames that match Windows reserved names (CON, NUL, COM1, etc.) are now automatically prefixed to prevent export failure
Performance & Stability
-
Faster Clip Loading
Loading clips (both when adding files and when opening a saved project) is now done in parallel instead of one-by-one. Large clip lists load significantly faster -
Smoother Script Preview
The script waveform preview no longer recalculates canvas dimensions on every animation frame. Canvas metrics are now cached and only refreshed on window resize -
Funscript Cache Limit
The funscript data cache is now capped at 50 entries to prevent unbounded memory growth when working with many files across a long session -
Temp Folder Cleanup on Startup
Leftover temporary folders from previous crashed or interrupted sessions are now automatically cleaned up when the app starts -
Merge Disk Space Estimate Fix
Fixed an incorrect disk space calculation for Merge mode. The estimate now correctly accounts for temporary segment files and the final output existing on disk at the same time
Merge Mode
- Merge Mode Compatibility
Merge Mode compatibility has been improved. It will now check more accurately whether video files are identical and suitable for merging with-c copyto avoid faulty exports + better error logs
1.3.2
UPDATE 1.3.2
Bug Fixes
-
Portrait Mode Now Works with Custom Resolution
Fixed a bug where selecting Portrait orientation with a custom resolution didn’t swap width and height. Portrait mode now correctly applies the swap to custom values as well as presets -
Mix Mode Falls Back When Source Has No Audio
Fixed a crash when using Mix audio mode with a video file that has no audio track. Mix mode now automatically falls back to Replace mode if the source video is silent, with a notification explaining the change -
Empty Funscript Output Prevented
Fixed an edge case where funscript extraction could produce an empty merged result, causing a corrupted .funscript file. Empty funscripts are now skipped with a log warning -
Load Project Guard
Fixed being able to load a project file while an export, preview, or merge was already running, which could cause state corruption -
Task Cancellation Speed
Cancelling an export, preview, or merge now stops immediately between processing stages, instead of waiting for the current FFmpeg operation to finish
1.4.0
UPDATE 1.4.0
New Features
-
Multi-Axis 3D Preview
Real-time 3D preview of multi-axis funscripts. When a clip has axis scripts (.pitch / .roll / .twist / .sway / .surge), a “Multi-axis 3D” button appears in the player and opens a separate, resizable window showing a 3D stroker. Available both in the main player and in Generate Full Preview. The 3D window always stays on top of other app windows, and remembers its size and position between sessions. -
Remove All Clips Button
Added a “Remove All Clips” button on the right side of the Apply to All bar. Clicking it opens a confirmation dialog before removing all clips -
Comprehensive Logging
The app now keeps a log of everything that happens during exports, previews and merges, plus any errors. Useful when something goes wrong and you want to report a bug. Logs are kept for 30 days -
Time Format Now Shows Hours
All time displays (clip duration, player, total output, timeline) now automatically switch to H:MM:SS format when duration exceeds 59 minutes -
Export Complete Notification
When an export finishes, a popup dialog appears -
Sound Effects
The app now plays sound effects for key events: confirmation dialogs, export completion, and errors. All sounds are optional and they can be toggled off in Settings -
Settings Panel
Added a Settings button in the header. Contains a Sounds on/off toggle and a Theme picker with 6 accent color presets
Bug Fixes
-
Funscript Drifting Out of Sync on Multi-Clip Output
Fixed a critical bug where the merged funscript would drift further out of sync the longer your output video was -
Export / Merge Failing When Output Folder Missing
Fixed a bug where Export or Merge would fail with an “no such file or directory” error if the chosen output folder was deleted, renamed, or never created -
Generate Full Preview Player Too Small
The video in the preview window starts bigger and now grows together with the window when you resize it, instead of staying small while only the script panel got taller -
Visual Artifacts at Clip Boundaries
Fixed a class of glitches (blocky pixels, brief stuttering, tiny speed-ups) right where one clip ended and the next started, especially when source clips had different frame rates. Most players hid the problem, but stricter players like OFS / ScriptPlayer would show it clearly. Thanks @Slibowitz
-
Audio Hanging Mid-Playback on Mixed Audio
Fixed a bug where Generate Full Preview would freeze partway through (and exports could glitch) when source clips had different audio formats - for example one stereo and one 5.1. If every clip has the same audio layout it’s preserved, otherwise everything is converted to stereo -
Generate Full Preview Failing on Intel QSV
Fixed Generate Full Preview crashing with an “Error -22” when the Intel QSV encoder was selected -
Replace Audio Cutting Video to Audio Length
Fixed a bug where using “Replace Audio” would produce an output as long as the audio file instead of the video. Video now keeps its full length, audio shorter than video is followed by silence -
Portrait Mode Resolution Labels Not Updating
Fixed a bug where switching to Portrait orientation left the resolution dropdown showing Landscape dimensions. Labels now update dynamically to reflect the correct swapped resolution -
Export Crashing on Clips With No Audio
Fixed a bug where exports would fail with a “no audio stream” error if any of the clips were silent (no audio track). Such clips are now correctly handled and exported without audio -
Empty Axis Funscript Files Written
Fixed an edge case where exporting could produce empty.pitch.funscript/.roll.funscriptetc. when your clip ranges happened to trim out all axis actions. Empty axis files are now simply skipped, same as already worked for the main funscript -
Project Load Crash on Corrupted File
Fixed a crash when loading a project file with a missing or invalid resolution value. The app now falls back to 3840×2160 in that case instead of crashing
1.5.0
UPDATE 1.5.0
New Features
-
Upscale
Upscale your videos to higher resolution. Two modes available. Fast uses the FFmpeg and is very quick, good for casual upscale. Quality is AI-powered, much sharper but slower. When you pick Quality, choose between “Real-life / 3D” for live action and CGI footage, or “Anime / 2D” for cartoons and anime. Needs a Vulkan-capable GPU - the app auto-detects and disables the option if not supported -
Frame Interpolation
Generate intermediate frames to raise output framerate (e.g. 30 fps source → 60 fps output). Toggle under Output FPS. Powered by RIFE -
AI Models Bundled
All AI models are included inside the app - no extra downloads, no separate setup. Just run and use
Known Limits
- Quality upscale (AI) is slow. Expect roughly 30 seconds per 1 second of 720p → 4K footage with the Real-life model. The Anime model is about 3× faster
- Upscale here is best for small bumps (e.g. 720p → 1080p). For top-quality results, use a dedicated tool like Topaz Video AI
My tests on RTX 3090:
- Upscale Quality real + Frame Interpolation - 720p30fps → 4k60fps - 19m49s
- Upscale Quality anime + Frame Interpolation - 720p30fps → 4k60fps - 06m51s
- Upscale Fast + Frame Interpolation - 720p30fps → 4k60fps - 0m33s
- Frame Interpolation only - 720p30fps → 720p60fps - 0m21s
1.5.1
UPDATE 1.5.1
Bug Fixes
-
Preview Window Now Updates After Regenerating
Fixed a bug where the preview window would keep showing the old video after you changed your clips and generated a new preview. Now it refreshes automatically without having to close and reopen it -
Existing .funscript Files No Longer Overwritten Silently
Fixed export and merge not warning you when a.funscriptfile (or axis scripts like.pitch.funscript) already existed in the output folder. The app now checks all output files, not just the.mp4, before overwriting -
Merge Compatibility Check Now Looks at Audio Too
Fixed merge mode marking clips as “compatible” when they had matching video but different audio formats (e.g. one clip AAC 44.1kHz, another AAC 48kHz). Compatibility now checks audio codec, sample rate, and channel layout in addition to video codec, resolution, and FPS -
Two Copies of FunClipper Could Run at Once
Fixed that launching the app twice would let both copies run simultaneously, which could corrupt temporary files and active exports. Now only one instance runs at a time - opening the app again just brings the existing window to front -
Quality Export Filling Up Disk Mid-Export
Fixed Quality mode (AI upscale + frame interpolation) not warning about the massive temporary disk space it needs. The disk check now estimates the hundreds of gigabytes of temporary PNG frames that AI processing creates and warns before starting -
Long Quality Export Without Warning
Added a confirmation popup before very large Quality exports. When AI processing would create more than ~20 GB of temporary frame data, the app warns first since these jobs can take 30+ minutes even on fast hardware -
Error Log Files Never Deleted
Fixed error log files (error-*.txt) piling up forever in the logs folder. They’re now cleaned up along with regular logs -
Error Logs Contained Personal Folder Paths
Fixed saved error logs including your Windows username and folder paths (likeC:\Users\YourName\...). These are now automatically replaced with[REDACTED]before saving -
Potential Corrupted Save Files on Crash
Fixed a small risk of corrupted project files or window settings if the app crashed exactly while saving. Saves are now written to a temp file first and safely moved into place -
Crash With Rare Corrupted Video Metadata
Fixed a possible crash during export when a video file had unusual frame rate metadata (e.g. reporting “0/1” frames per second)
Stability
-
Export Processes Properly Closed on App Exit
Fixed AI processing tasks (RIFE, Real-ESRGAN) sometimes staying alive in the background after closing FunClipper mid-export. All background processes are now forcefully terminated when the app closes -
Faster Project Loading
Loading a saved project with many clips is now faster. Clip probes are limited to running a few at a time instead of all at once
1.5.2
UPDATE 1.5.2
Stability & Safety
-
Better Error Log Privacy
Improved privacy cleanup in saved error logs. Windows user folder paths are now removed more reliably, including paths saved in technical/escaped formats -
Improved Funscript Error Handling
Invalid or corrupted funscript files now show a clearer error instead of silently behaving like an empty script
Quality Export Improvements
-
More Realistic Quality Temp Space Warning
The Quality export warning now estimates temporary disk usage based on the actual staged export process instead of an overly large theoretical maximum. The warning should be much closer to real temporary folder usage and less scary for normal exports -
Clearer Quality Disk Message
Quality export warnings now explain that temporary frame data is removed after export and include a safety margin in the estimate -
Background GPU / Vulkan / AI Tool Detection
FunClipper now opens first and checks GPU encoders, Vulkan, RIFE and Real-ESRGAN availability in the background. This should make startup feel more responsive, especially on systems where hardware detection takes a moment
UI / UX
- Consistent Warning Style
Large export warnings, low disk warnings, overwrite confirmations etc now look like part of FunClipper instead of system popups







