.claude/settings.local.json was only excluded by a machine-global
ignore file, so it would be trackable in any fresh clone. It holds
machine-local state (including the internal Gitea host), so ignore
it from the repo itself. Also cover the .tmp.* files written during
atomic saves, which otherwise break `git add -A`.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Complete rewrite from the Python/Tkinter app to a native Tauri 2 desktop
app. Drops the song-detection feature, so it needs no Python and no ML
model — just ffmpeg. Replaces video_concat.py entirely.
- Rust backend (src-tauri): stream-copy concat via ffmpeg with honest
real-time progress (-progress pipe:1, out_time vs total duration), held
at 99% through the +faststart finalising pass so the bar never jumps
- ffprobe duration scanning parallelised across threads; cancel kills the
whole ffmpeg process tree; CREATE_NO_WINDOW hides console flashes
- BiliBili Live filename helper ported to Rust (bililive_rename)
- TypeScript UI, no framework: tiny h() DOM helper, drag-and-drop,
reorderable/checkable file list with live totals, light/dark theme,
reusable toast + progress components
- Optional delete-originals-after-merge with a clear warning
- New app icon (three clips merging into one); build.bat assembles a
portable folder with ffmpeg/ffprobe bundled next to the exe
- Ignore tauri-generated gen/schemas (regenerated on every build)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Plain tkinter GUI: file picker, listbox of selected videos
- Move Up / Move Down buttons to reorder the sequence
- Output name entry + output directory chooser
- Optional 'delete originals after concatenation' checkbox
- Concatenates with the ffmpeg concat demuxer (-c copy) on a worker thread
- Crude fixed time estimate (5s-per-file countdown before running ffmpeg)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>