Dialogue Cut creates reviewable dialogue-only cuts from local video files. It can use embedded subtitles when they are useful, or generate German timestamps with MLX Whisper, then render a QuickTime-safe H.264/AAC MP4.
It also includes a video-processing tab for slowing audio and video together, which is useful when preparing footage for dubbing practice.
The desktop app also has a material-grabber tab that wraps yt-dlp for this
workflow: paste one URL, click Start, then choose video quality and exact
subtitle tracks before the same button changes to Download.
Use it only with media you have the right to process.
cd ui
npm install
npm run tauri dev
python3 dialogue-only.py /path/to/movie.mkv
Force a fresh German Whisper transcript:
python3 dialogue-only.py /path/to/movie.mkv --force-transcribe
Tune the cut feel:
python3 dialogue-only.py /path/to/movie.mkv --pre-pad 0.3 --post-pad 0.5 --merge-gap 1.0
In the desktop app, open Video processing, choose a video, set the playback
speed, and start the transcode. A 0.50x output is twice as long as the input.
Audio is slowed with ffmpeg atempo, so pitch is preserved.
The tab also shows a thumbnail gallery of videos from the Material grabber Output settings folder. Click a thumbnail to select that video for slow-down.
The output is written beside the source video:
movie.slow-0.50x.mp4
In the desktop app, open Converter, choose a video (typically an MKV), and
start the conversion. The MP4 is written beside the source with the same name
(or movie.converted.mp4 if that name is taken). Two modes:
Re-encode H.264/AAC (default): most compatible for editing; re-encodes
everything, so it takes a while.Fast remux: copies the video stream as-is into MP4 and converts audio to
AAC. Nearly instant, but editors may struggle with HEVC/AV1 sources.Embedded subtitles and chapters are dropped; only the first video and audio streams are kept.
In the desktop app, open Transcription, choose a video or audio file, pick
the spoken language (German by default, or auto-detect), and tick the output
files you want. The app extracts the first audio track, transcribes it with
MLX Whisper, and writes the selected files beside the source:
movie.de.srt / movie.de.vtt — subtitles (on by default)movie.de.txt — plain text transcript (on by default)movie.de.json — raw Whisper output with segments and timestampsmovie.de.tsv — start/end/text timestamp tableWith auto-detect the language suffix is omitted.
In the desktop app, open Material grabber, paste a URL, and click Start.
The app asks yt-dlp for metadata first, then shows available video heights and
exact subtitle language tracks. The output folder defaults to
~/Downloads/Dialogue Cut Material; change it from Output settings only
when you want a different destination. Each URL is saved into its own
Title [id] subfolder. The same button changes to Download after metadata
is loaded. yt-dlp is not bundled with the app: the managed copy downloads on
the first scan. The Grabber checks it against the latest PyPI release and shows
an Update button when an older version must be replaced. For YouTube, the
managed bgutil provider performs playback verification through the private Deno
runtime without opening a browser. The app uses a fixed yt-dlp preset:
No videoBuild an Apple Silicon macOS app and DMG:
cd ui
npm run bundle:mac
The packaged app does not bundle its large and frequently updated runtime
dependencies. It installs a checksum-verified private Python runtime, static
ffmpeg/ffprobe, MLX Whisper dependencies, and yt-dlp only when needed.
Whisper model files download automatically on first transcription and stay
cached in the app's Application Support directory. The managed yt-dlp copy
can be updated independently from the app in Material Grabber.
Current packaged target: Apple Silicon Mac with macOS 13.5 or newer.
The repo includes a Solo command:
Dialogue Cut UI
It runs npm run tauri dev from ui.
See DIALOGUE_ONLY.md for the full workflow, project JSON format, and manual adjustment notes.
48 commits
Rust
42.8%
TypeScript
36.1%
Python
11.7%
CSS
9.4%
Dialogue Cut creates reviewable dialogue-only cuts from local video files. It can use embedded subtitles when they are useful, or generate German timestamps with MLX Whisper, then render a QuickTime-safe H.264/AAC MP4.
It also includes a video-processing tab for slowing audio and video together, which is useful when preparing footage for dubbing practice.
The desktop app also has a material-grabber tab that wraps yt-dlp for this
workflow: paste one URL, click Start, then choose video quality and exact
subtitle tracks before the same button changes to Download.
Use it only with media you have the right to process.
cd ui
npm install
npm run tauri dev
python3 dialogue-only.py /path/to/movie.mkv
Force a fresh German Whisper transcript:
python3 dialogue-only.py /path/to/movie.mkv --force-transcribe
Tune the cut feel:
python3 dialogue-only.py /path/to/movie.mkv --pre-pad 0.3 --post-pad 0.5 --merge-gap 1.0
In the desktop app, open Video processing, choose a video, set the playback
speed, and start the transcode. A 0.50x output is twice as long as the input.
Audio is slowed with ffmpeg atempo, so pitch is preserved.
The tab also shows a thumbnail gallery of videos from the Material grabber Output settings folder. Click a thumbnail to select that video for slow-down.
The output is written beside the source video:
movie.slow-0.50x.mp4
In the desktop app, open Converter, choose a video (typically an MKV), and
start the conversion. The MP4 is written beside the source with the same name
(or movie.converted.mp4 if that name is taken). Two modes:
Re-encode H.264/AAC (default): most compatible for editing; re-encodes
everything, so it takes a while.Fast remux: copies the video stream as-is into MP4 and converts audio to
AAC. Nearly instant, but editors may struggle with HEVC/AV1 sources.Embedded subtitles and chapters are dropped; only the first video and audio streams are kept.
In the desktop app, open Transcription, choose a video or audio file, pick
the spoken language (German by default, or auto-detect), and tick the output
files you want. The app extracts the first audio track, transcribes it with
MLX Whisper, and writes the selected files beside the source:
movie.de.srt / movie.de.vtt — subtitles (on by default)movie.de.txt — plain text transcript (on by default)movie.de.json — raw Whisper output with segments and timestampsmovie.de.tsv — start/end/text timestamp tableWith auto-detect the language suffix is omitted.
In the desktop app, open Material grabber, paste a URL, and click Start.
The app asks yt-dlp for metadata first, then shows available video heights and
exact subtitle language tracks. The output folder defaults to
~/Downloads/Dialogue Cut Material; change it from Output settings only
when you want a different destination. Each URL is saved into its own
Title [id] subfolder. The same button changes to Download after metadata
is loaded. yt-dlp is not bundled with the app: the managed copy downloads on
the first scan. The Grabber checks it against the latest PyPI release and shows
an Update button when an older version must be replaced. For YouTube, the
managed bgutil provider performs playback verification through the private Deno
runtime without opening a browser. The app uses a fixed yt-dlp preset:
No videoBuild an Apple Silicon macOS app and DMG:
cd ui
npm run bundle:mac
The packaged app does not bundle its large and frequently updated runtime
dependencies. It installs a checksum-verified private Python runtime, static
ffmpeg/ffprobe, MLX Whisper dependencies, and yt-dlp only when needed.
Whisper model files download automatically on first transcription and stay
cached in the app's Application Support directory. The managed yt-dlp copy
can be updated independently from the app in Material Grabber.
Current packaged target: Apple Silicon Mac with macOS 13.5 or newer.
The repo includes a Solo command:
Dialogue Cut UI
It runs npm run tauri dev from ui.
See DIALOGUE_ONLY.md for the full workflow, project JSON format, and manual adjustment notes.
48 commits
Rust
42.8%
TypeScript
36.1%
Python
11.7%
CSS
9.4%