A Windows toolkit for VR video cleanup, subtitle work, and common VR video utilities.
The original project, https://codeberg.org/zelefans/vr_remove_mosaic, only made simple use of FFmpeg CUDA hardware acceleration, while many transform operations still had to exchange data with the CPU.
This edition is programmatically optimized for NVIDIA CUDA. CUDA-capable workflows use NVIDIA GPU acceleration for decoding, geometry transforms, AI processing, and encoding where supported, with FFmpeg fallback for unsupported sources or runtime environments.
Homepage: https://github.com/zerochocobo/VR-Video-Toolbox-CE
Current main features:
Version history is available in CHANGELOG.md.
The goal is to make complex video workflows usable through a GUI and batch scripts, especially for users who do not want to write FFmpeg commands by hand.

Several workflows are available for different video types:
The word "fisheye" appears in three places, and they are for different jobs:
If you are only removing mosaics, start with One-Click Mode. Enable the fisheye checkbox only when the mosaic shape calls for it; otherwise leave it off.
The final result depends heavily on the AI mosaic removal engine (lada-cli or jasna) detection and restoration quality. Complex distortion, heavy compression, or low-quality source video may produce unstable results.
The program includes a built-in engine selector. Switch between Lada and Jasna in the main window under "AI Engine". Your choice is saved automatically.
- Lada: https://codeberg.org/ladaapp/lada
- Jasna (a newer maintained fork of Lada): https://github.com/Kruk2/jasna
This CUDA Edition is designed for NVIDIA GPUs. Beyond the external Lada/Jasna engines, projection conversion, left/right eye split and combine, VR-to-flat conversion, and geometry transforms in one-click workflows can use a GPU-first pipeline: PyNvVideoCodec decoding (NVDEC) -> CuPy/custom CUDA kernels -> PyNvVideoCodec encoding (NVENC). FFmpeg is still used for audio muxing and as a fallback path.
transcode_backend in vr_toolbox_config.json
auto (default): prefer GPU and automatically fall back to FFmpeg per file when the source or runtime is unsupported.gpu: force the CUDA path for debugging.ffmpeg: force the original FFmpeg path.Subtitle tools are included to reduce manual subtitle work:
Speech recognition and translation results should still be reviewed manually, especially for names, domain-specific words, and multi-speaker dialogue.
The simultaneous interpretation tool builds on Qwen3-TTS and FFmpeg:
.si.wav voice track with selectable language and predefined speaker voices.si.wavvideo.si.wav into the matching MP4/MKV as an SI audio resultSI.si.wav sidecar files and output _SI.mp4SI timing and loudness still need human review. Generated TTS may already contain translation delay, so the extra SI delay should be adjusted per source.
The new Sentence-Level Emotional Voice Cloning tool is based on Bilibili's latest open-source IndexTTS-2.5. It uses the WAV extracted for each source sentence directly as both the timbre and emotion reference, then speaks that sentence's translation:
SPEAKER prefixes to subtitles, and does not ask users to prepare WAV+TXT basis files.Transcribe & Translate, then Proofread Translation and Export Cloned Voice File. You can correct the translated text before exporting the timeline-aligned voice track.Skip existing intermediate files and .SI.WAV enabled, existing audio16k.wav, manifest.json, source.srt, translated.srt, and final .si.wav checkpoints are reused instead of repeating completed stages.<video>.si.wav and the matching <video>.si.duck.wav. Per-sentence reference and generated WAV files are retained under <video>.clone/indextts_v2_manifest/ beside the source video, never in the system Temp directory. Mix / Dubbing always keeps and lowers the original track, uses the strongest ducking level by default, overlays the cloned voice, and outputs _SI.mp4. The DLNA server can also live-mix a same-name .SI.WAV through [SI].| Difference | New tool | Legacy tool |
|---|---|---|
| Home-screen entry | Sentence-Level Emotional Voice Cloning | Clone Translation Dubbing |
| Voice model | IndexTTS-2.5 | OmniVoice |
| Voice reference | Matching source WAV for every sentence; no transcript | Selected/designed basis voice with matching reference text |
| Speaker handling | No speaker recognition or classification | Recognizes and distinguishes speakers |
| Main use | Direct sentence-by-sentence timbre and emotion cloning | Speaker-based clone dubbing and simple voice design |
The original Clone Translation Dubbing entry remains available as a separate legacy tool. It uses OmniVoice, requires speaker recognition and matching reference text, and can also design a simple voice. These legacy requirements do not apply to the IndexTTS-2.5 workflow.
Both workflows share the subtitle translation API configuration. For IndexTTS-2.5, clean source dialogue produces the best result; always review the translated text and listen to the generated .si.wav or _SI.mp4 before final use.
2D to 3D/VR conversion has moved to the VR Passthrough Server project. It supports real-time and offline 2D to 3D conversion with better quality and faster speed. Download it from https://wapok.com.
The toolkit also includes common VR helpers:
A highly cohesive and lightweight LAN DLNA / UPnP video streaming server:
_LR_180_SBS when browsed by clients. This perfectly induces players like Skybox to automatically render in 180° SBS 3D, avoiding tedious manual setup..srt/.ass/.vtt subtitles in the same folder, supporting prioritizing Chinese subtitles.New users should download release file.
From the launcher, choose the tool you need:
One-Click Mode: mosaic removal with minimal setupArea Selection Direct Crop Mode: local crop-based mosaic processingArea Selection VR to Flat Mode: VR-to-flat area processingJapanese Batch Subtitle Tools: subtitle generation, translation, and batch toolsSimultaneous Interpretation Voice: generate .si.wav from subtitles and mix SI audio into MP4/MKV videosSentence-Level Emotional Voice Cloning: use IndexTTS-2.5 to clone each source sentence directly, with no speaker recognition or reference transcript; use Voice Clone for a reviewable single-video workflow or Batch Clone for automatic directory processingClone Translation Dubbing: the legacy OmniVoice workflow, which identifies speakers and uses matching reference text or a simply designed voice2D to 3D/VR: opens the migration notice for the VR Passthrough Server downloadVR Hard Subtitle Embed Tool: hard subtitle embedding for VR videoRecommended environment:
Required executables and packages:
ffmpeg.exeffprobe.exelada-cli.exe or jasna.exe (choose one)Pillow, pyinstaller, ffmpy3, faster-whisper, numpy>=1.26,<2.1, auditok, onnxruntime-gpu, huggingface-hub, keyring, requests, transformers, accelerate, librosa, soundfile, av, fastapi, uvicornpynvvideocodec>=2.1.0, cupy-cuda12x>=14.0, nvidia-cuda-nvrtc-cu12==12.8.93, nvidia-cuda-runtime-cu12==12.8.90, nvidia-cuda-cccl-cu12>=12.9.27torch==2.8.0, torchvision==0.23.0, and torchaudio==2.8.0 from the PyTorch cu128 wheel index, plus ultralytics==8.4.4, mmengine==0.10.7, omegaconf, einops, safetensors, and opencv-pythonmodels/Qwen3-TTS-12Hz-0.6B-CustomVoice for SI voice generationmodels/IndexTTS-2.5 for sentence-level emotional voice cloning; see models/IndexTTS-2.5/get_IndexTTS-2.5.txt for the complete main and auxiliary model layoutmodels/kotoba-whisper-v2.0-faster and/or faster-whisper models under models/faster-whisper-* for voice-cloning transcriptionmodels/OmniVoice, OmniVoice ECAPA under models/OmniVoice_ECAPA, and pyannote speaker-diarization-community-1 under models/speaker-diarization-community-1 are used only by the legacy Clone Translation Dubbing workflowInstall Python dependencies:
cd VR-Video-Toolbox-CE
uv sync
If installing manually with pip, keep the CUDA package versions aligned with pyproject.toml, and install PyTorch/torchvision/torchaudio from https://download.pytorch.org/whl/cu128.
FFmpeg and the AI engine (Lada or Jasna) must be discoverable by the program. You can add them to the system PATH, or place the executables next to the packaged app or runtime directory.
.
├─ GUI/
│ └─ VR_Video_Toolbox/ Main GUI application
│ ├─ one_click/ One-click mosaic removal
│ ├─ area_selection_rect_crop/
│ ├─ area_selection_vr2flat/
│ ├─ tool_subtitle/ Subtitle generation, translation, batch processing
│ ├─ tool_subembed/ VR subtitle embedding
│ ├─ tool_si/ Simultaneous interpretation voice and SI audio mixing
│ ├─ tool_clonevoice_v2/ IndexTTS-2.5 sentence-level emotional voice cloning
│ ├─ tool_clonevoice/ Legacy OmniVoice clone translation dubbing
│ ├─ tool_dlna/ LAN DLNA/UPnP video server
│ ├─ tool_split_combine/ VR split/combine tools
│ ├─ tool_v360_trans/ VR projection conversion
│ ├─ tool_vr2flat/ VR-to-flat tools
│ └─ tools/ Small toolbox
├─ Scripts/
│ ├─ BatchFile(Windows)/ Windows batch scripts
│ └─ Python/ Training, subtitle, and helper scripts
├─ Models/ Model directory
└─ prompt/ Work notes and handover documents
Processed files are usually written next to the input video or to the output directory selected in the tool. Common filename markers include:
_restored: mosaic-processed output_sbs: side-by-side left/right eye format_L / _R: left-eye or right-eye video.srt, translated subtitle files, or videos with embedded subtitles.si.wav; SI video audio mixing outputs _SI.mp4<video>.si.wav plus <video>.si.duck.wav; its fixed lower-original remix outputs _SI.mp4Exact names depend on the selected tool and settings.
Some video and subtitle tasks may still work, but AI-based mosaic removal usually depends on CUDA. Without a suitable GPU, performance and availability may be limited.
The result depends on source quality, mosaic shape, VR projection distortion, AI engine (Lada or Jasna) capability, and selected parameters. Test a short clip first before processing a full video. You can also try switching engines (main window → AI Engine) to compare results.
Usually no. Speech recognition and machine translation can make mistakes, so manual review is recommended.
Start with one-click mode on a short clip. If the mosaic looks square/grid-like in the headset, try the fisheye checkbox in One-Click Mode. If the mosaic looks normal in VR but strongly slanted or trapezoid-shaped in the raw PC frame, try the VR-to-flat area workflow. The zoom/inspection tool in the launcher can help identify the mosaic style.
192.168.x.x:8090) in Skybox under "Network" -> "Add manual server".This project builds on FFmpeg, LADA, Jasna, Whisper-related tools, and community contributions. Thanks to the open-source authors and users who report issues and share improvements.
1 commits
1 commits
Python
100.0%
A Windows toolkit for VR video cleanup, subtitle work, and common VR video utilities.
The original project, https://codeberg.org/zelefans/vr_remove_mosaic, only made simple use of FFmpeg CUDA hardware acceleration, while many transform operations still had to exchange data with the CPU.
This edition is programmatically optimized for NVIDIA CUDA. CUDA-capable workflows use NVIDIA GPU acceleration for decoding, geometry transforms, AI processing, and encoding where supported, with FFmpeg fallback for unsupported sources or runtime environments.
Homepage: https://github.com/zerochocobo/VR-Video-Toolbox-CE
Current main features:
Version history is available in CHANGELOG.md.
The goal is to make complex video workflows usable through a GUI and batch scripts, especially for users who do not want to write FFmpeg commands by hand.

Several workflows are available for different video types:
The word "fisheye" appears in three places, and they are for different jobs:
If you are only removing mosaics, start with One-Click Mode. Enable the fisheye checkbox only when the mosaic shape calls for it; otherwise leave it off.
The final result depends heavily on the AI mosaic removal engine (lada-cli or jasna) detection and restoration quality. Complex distortion, heavy compression, or low-quality source video may produce unstable results.
The program includes a built-in engine selector. Switch between Lada and Jasna in the main window under "AI Engine". Your choice is saved automatically.
- Lada: https://codeberg.org/ladaapp/lada
- Jasna (a newer maintained fork of Lada): https://github.com/Kruk2/jasna
This CUDA Edition is designed for NVIDIA GPUs. Beyond the external Lada/Jasna engines, projection conversion, left/right eye split and combine, VR-to-flat conversion, and geometry transforms in one-click workflows can use a GPU-first pipeline: PyNvVideoCodec decoding (NVDEC) -> CuPy/custom CUDA kernels -> PyNvVideoCodec encoding (NVENC). FFmpeg is still used for audio muxing and as a fallback path.
transcode_backend in vr_toolbox_config.json
auto (default): prefer GPU and automatically fall back to FFmpeg per file when the source or runtime is unsupported.gpu: force the CUDA path for debugging.ffmpeg: force the original FFmpeg path.Subtitle tools are included to reduce manual subtitle work:
Speech recognition and translation results should still be reviewed manually, especially for names, domain-specific words, and multi-speaker dialogue.
The simultaneous interpretation tool builds on Qwen3-TTS and FFmpeg:
.si.wav voice track with selectable language and predefined speaker voices.si.wavvideo.si.wav into the matching MP4/MKV as an SI audio resultSI.si.wav sidecar files and output _SI.mp4SI timing and loudness still need human review. Generated TTS may already contain translation delay, so the extra SI delay should be adjusted per source.
The new Sentence-Level Emotional Voice Cloning tool is based on Bilibili's latest open-source IndexTTS-2.5. It uses the WAV extracted for each source sentence directly as both the timbre and emotion reference, then speaks that sentence's translation:
SPEAKER prefixes to subtitles, and does not ask users to prepare WAV+TXT basis files.Transcribe & Translate, then Proofread Translation and Export Cloned Voice File. You can correct the translated text before exporting the timeline-aligned voice track.Skip existing intermediate files and .SI.WAV enabled, existing audio16k.wav, manifest.json, source.srt, translated.srt, and final .si.wav checkpoints are reused instead of repeating completed stages.<video>.si.wav and the matching <video>.si.duck.wav. Per-sentence reference and generated WAV files are retained under <video>.clone/indextts_v2_manifest/ beside the source video, never in the system Temp directory. Mix / Dubbing always keeps and lowers the original track, uses the strongest ducking level by default, overlays the cloned voice, and outputs _SI.mp4. The DLNA server can also live-mix a same-name .SI.WAV through [SI].| Difference | New tool | Legacy tool |
|---|---|---|
| Home-screen entry | Sentence-Level Emotional Voice Cloning | Clone Translation Dubbing |
| Voice model | IndexTTS-2.5 | OmniVoice |
| Voice reference | Matching source WAV for every sentence; no transcript | Selected/designed basis voice with matching reference text |
| Speaker handling | No speaker recognition or classification | Recognizes and distinguishes speakers |
| Main use | Direct sentence-by-sentence timbre and emotion cloning | Speaker-based clone dubbing and simple voice design |
The original Clone Translation Dubbing entry remains available as a separate legacy tool. It uses OmniVoice, requires speaker recognition and matching reference text, and can also design a simple voice. These legacy requirements do not apply to the IndexTTS-2.5 workflow.
Both workflows share the subtitle translation API configuration. For IndexTTS-2.5, clean source dialogue produces the best result; always review the translated text and listen to the generated .si.wav or _SI.mp4 before final use.
2D to 3D/VR conversion has moved to the VR Passthrough Server project. It supports real-time and offline 2D to 3D conversion with better quality and faster speed. Download it from https://wapok.com.
The toolkit also includes common VR helpers:
A highly cohesive and lightweight LAN DLNA / UPnP video streaming server:
_LR_180_SBS when browsed by clients. This perfectly induces players like Skybox to automatically render in 180° SBS 3D, avoiding tedious manual setup..srt/.ass/.vtt subtitles in the same folder, supporting prioritizing Chinese subtitles.New users should download release file.
From the launcher, choose the tool you need:
One-Click Mode: mosaic removal with minimal setupArea Selection Direct Crop Mode: local crop-based mosaic processingArea Selection VR to Flat Mode: VR-to-flat area processingJapanese Batch Subtitle Tools: subtitle generation, translation, and batch toolsSimultaneous Interpretation Voice: generate .si.wav from subtitles and mix SI audio into MP4/MKV videosSentence-Level Emotional Voice Cloning: use IndexTTS-2.5 to clone each source sentence directly, with no speaker recognition or reference transcript; use Voice Clone for a reviewable single-video workflow or Batch Clone for automatic directory processingClone Translation Dubbing: the legacy OmniVoice workflow, which identifies speakers and uses matching reference text or a simply designed voice2D to 3D/VR: opens the migration notice for the VR Passthrough Server downloadVR Hard Subtitle Embed Tool: hard subtitle embedding for VR videoRecommended environment:
Required executables and packages:
ffmpeg.exeffprobe.exelada-cli.exe or jasna.exe (choose one)Pillow, pyinstaller, ffmpy3, faster-whisper, numpy>=1.26,<2.1, auditok, onnxruntime-gpu, huggingface-hub, keyring, requests, transformers, accelerate, librosa, soundfile, av, fastapi, uvicornpynvvideocodec>=2.1.0, cupy-cuda12x>=14.0, nvidia-cuda-nvrtc-cu12==12.8.93, nvidia-cuda-runtime-cu12==12.8.90, nvidia-cuda-cccl-cu12>=12.9.27torch==2.8.0, torchvision==0.23.0, and torchaudio==2.8.0 from the PyTorch cu128 wheel index, plus ultralytics==8.4.4, mmengine==0.10.7, omegaconf, einops, safetensors, and opencv-pythonmodels/Qwen3-TTS-12Hz-0.6B-CustomVoice for SI voice generationmodels/IndexTTS-2.5 for sentence-level emotional voice cloning; see models/IndexTTS-2.5/get_IndexTTS-2.5.txt for the complete main and auxiliary model layoutmodels/kotoba-whisper-v2.0-faster and/or faster-whisper models under models/faster-whisper-* for voice-cloning transcriptionmodels/OmniVoice, OmniVoice ECAPA under models/OmniVoice_ECAPA, and pyannote speaker-diarization-community-1 under models/speaker-diarization-community-1 are used only by the legacy Clone Translation Dubbing workflowInstall Python dependencies:
cd VR-Video-Toolbox-CE
uv sync
If installing manually with pip, keep the CUDA package versions aligned with pyproject.toml, and install PyTorch/torchvision/torchaudio from https://download.pytorch.org/whl/cu128.
FFmpeg and the AI engine (Lada or Jasna) must be discoverable by the program. You can add them to the system PATH, or place the executables next to the packaged app or runtime directory.
.
├─ GUI/
│ └─ VR_Video_Toolbox/ Main GUI application
│ ├─ one_click/ One-click mosaic removal
│ ├─ area_selection_rect_crop/
│ ├─ area_selection_vr2flat/
│ ├─ tool_subtitle/ Subtitle generation, translation, batch processing
│ ├─ tool_subembed/ VR subtitle embedding
│ ├─ tool_si/ Simultaneous interpretation voice and SI audio mixing
│ ├─ tool_clonevoice_v2/ IndexTTS-2.5 sentence-level emotional voice cloning
│ ├─ tool_clonevoice/ Legacy OmniVoice clone translation dubbing
│ ├─ tool_dlna/ LAN DLNA/UPnP video server
│ ├─ tool_split_combine/ VR split/combine tools
│ ├─ tool_v360_trans/ VR projection conversion
│ ├─ tool_vr2flat/ VR-to-flat tools
│ └─ tools/ Small toolbox
├─ Scripts/
│ ├─ BatchFile(Windows)/ Windows batch scripts
│ └─ Python/ Training, subtitle, and helper scripts
├─ Models/ Model directory
└─ prompt/ Work notes and handover documents
Processed files are usually written next to the input video or to the output directory selected in the tool. Common filename markers include:
_restored: mosaic-processed output_sbs: side-by-side left/right eye format_L / _R: left-eye or right-eye video.srt, translated subtitle files, or videos with embedded subtitles.si.wav; SI video audio mixing outputs _SI.mp4<video>.si.wav plus <video>.si.duck.wav; its fixed lower-original remix outputs _SI.mp4Exact names depend on the selected tool and settings.
Some video and subtitle tasks may still work, but AI-based mosaic removal usually depends on CUDA. Without a suitable GPU, performance and availability may be limited.
The result depends on source quality, mosaic shape, VR projection distortion, AI engine (Lada or Jasna) capability, and selected parameters. Test a short clip first before processing a full video. You can also try switching engines (main window → AI Engine) to compare results.
Usually no. Speech recognition and machine translation can make mistakes, so manual review is recommended.
Start with one-click mode on a short clip. If the mosaic looks square/grid-like in the headset, try the fisheye checkbox in One-Click Mode. If the mosaic looks normal in VR but strongly slanted or trapezoid-shaped in the raw PC frame, try the VR-to-flat area workflow. The zoom/inspection tool in the launcher can help identify the mosaic style.
192.168.x.x:8090) in Skybox under "Network" -> "Add manual server".This project builds on FFmpeg, LADA, Jasna, Whisper-related tools, and community contributions. Thanks to the open-source authors and users who report issues and share improvements.
1 commits
1 commits
Python
100.0%