Skip to content

v0.2.0 — Drop it in.

Choose a tag to compare

@Shironex Shironex released this 03 May 20:08
· 126 commits to main since this release

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:
    xattr -cr /Applications/Moekoder.app
    to clear the Gatekeeper quarantine.
  • 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 ep10 no longer mispairs with ep1).
  • 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.mkv no longer mispairs with ep1.ass when the matching ep10.ass is 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-folder IPC channel — extension-filtered, numeric-aware sort so ep2 precedes ep10 in 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.getPathForFile exposed via the preload bridge so drag-and-drop continues to resolve real filesystem paths under Electron's modern contextIsolation (the legacy File.path was removed in 32+).

Changed

  • File classification is now extension-only across the whole renderer — File.type was unreliable for .ass (often arrives as empty MIME) and .mkv (Linux-only on Chromium).
  • Click and drop pipelines now share a single setVideoFromPath / setSubsFromPath / setOutFromFolder setter 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.