Repository navigation
v0.2.0 — Drop it in.
The whole Idle screen is now a target. Drop a video and a subtitle (or a folder containing them) onto the window — Moekoder auto-pairs by filename and pre-fills the three ingredients. No dialogs, no preview popups, just the burn.
Headline feature: drag-and-drop with anime-aware auto-pairing. Works with bare files, multi-file selects, and whole folders. When a drop produces multiple matching candidates, an inline dropdown on the affected stage lets you swap between them without re-running the picker.
Install
- Windows —
Moekoder-0.2.0-win-x64.exe. Still unsigned; SmartScreen will show More info → Run anyway on first launch. - macOS —
Moekoder-0.2.0-mac-arm64.dmg. Still unsigned; after dragging into/Applications, run:to clear the Gatekeeper quarantine.xattr -cr /Applications/Moekoder.app
- Linux — not shipped this release. Still on the roadmap.
If you're upgrading from v0.1.0, the auto-updater on Windows pulls this release in the background; the next launch comes up on v0.2.0. macOS users grab the DMG manually until code-signing lands.
What you get when you drop
- Drop one video → fills the video slot.
- Drop a video + subtitle pair → both slots fill via the three-strategy filename matcher (exact → contains → contained-by, with word-boundary checks so
ep10no longer mispairs withep1). - Drop a folder → folder routes to the output slot, contents are scanned and auto-paired.
- Drop multiple matching subtitles (or videos) → an inline chevron next to the stage opens a swap menu listing every candidate.
Under the hood
- Whole-Idle drop overlay with a tinted veil and an 投 sigil; covers the screen, not just an inner card.
- Three-strategy filename auto-pairing (exact match → video-base contains subtitle-base → subtitle-base contains video-base) with word-boundary checks so
ep10.mkvno longer mispairs withep1.asswhen the matchingep10.assis missing. - Folder drops scan their immediate children for media (non-recursive), surface videos + subtitles to the auto-pair pipeline, and route the folder itself to the output slot — drop one folder, all three slots fill.
- Inline candidates dropdown on the video and subtitle stages: when a drop produces multiple matches, a chevron next to the slot opens a swap menu. Built on Radix Popover with a portal-rendered, scrollable, collision-aware panel.
- Multi-select OS file picker (
dialog:open-files) wired through to the same setter pipeline as drag-drop. - New
fs:list-folderIPC channel — extension-filtered, numeric-aware sort soep2precedesep10in the candidates list. - Extended renderer whitelist — video accepts
.mkv .mp4 .m4v .webm .avi .mov .ts .m2ts; subtitle accepts.ass .ssa .srt .vtt. The same constants drive both drop classification and dialog filters. - Output-override guard (
outUserDirty) — swapping the active video candidate no longer clobbers an output folder the user manually picked via the Output stage. webUtils.getPathForFileexposed via the preload bridge so drag-and-drop continues to resolve real filesystem paths under Electron's moderncontextIsolation(the legacyFile.pathwas removed in 32+).
Changed
- File classification is now extension-only across the whole renderer —
File.typewas unreliable for.ass(often arrives as empty MIME) and.mkv(Linux-only on Chromium). - Click and drop pipelines now share a single
setVideoFromPath/setSubsFromPath/setOutFromFoldersetter layer so the auto-output-folder derivation cannot drift between entry points.
Tests
Vitest landed in apps/web for the first time, with 13 unit tests covering filename categorisation, the auto-pair matcher, and edge cases (numeric prefixes, case-insensitive matching, empty inputs).
Known limitations
- Same as v0.1.0: binaries are unsigned, auto-updater is Windows-only, no Linux build, single-file encode (queue lands in v0.3).
- Folder scan is non-recursive — top-level files only. Nested release-folder layouts surface only the directly-dropped folder's children.
Source under the Moekoder Source Available License.