Skip to content

Releases: xmrius/dubstage

v1.3.2 - automatic captions work again

Choose a tag to compare

@xmrius xmrius released this 25 Oct 18:46
db4da5b

Automatic captions in DubForge broke for everyone who installed speech recognition after 29 September. This release fixes that.

Fixed

  • "Generate captions" failed with open() got an unexpected keyword
    argument 'metadata_errors'
    . PyAV 19, a library faster-whisper uses to read
    audio, dropped an argument that faster-whisper still passes. DubForge now
    decodes the audio with its own ffmpeg, so captions no longer depend on it,
    and new installs keep PyAV below 19.

Updating

  • Installed with the setup: run DubStage-Setup-1.3.2.exe below over your
    existing installation, or use the update banner in the app — the app-side fix
    alone is enough for captions to work again.
  • Running from source: update, then
    py -m pip install -r requirements-transcription.txt.

Full history in CHANGELOG.md.

v1.3.1 - recordings no longer lose their first half second

Choose a tag to compare

@xmrius xmrius released this 25 Oct 18:30
0f2eabd

A fix for the most annoying thing about recording in DubStage: the start of a line went missing, and the sound cut in late.

Fixed

  • The first half second of a recording was missing. Three delays added up:

    • recording started 300 ms after "Go!" appeared — whoever started speaking
      on the signal lost exactly that part;
    • the microphone was only opened at that moment, and many devices — USB and
      especially Bluetooth headsets — deliver silence for a few hundred
      milliseconds after opening; Bluetooth also switches profiles then, which
      briefly cuts the sound;
    • the driver's input latency was not accounted for, so the take sat slightly
      late against the picture.

    DubStage now opens the microphone as soon as the countdown starts, so the
    device is ready by the time it matters, starts recording and video exactly
    on "Go!", and skips what the driver still had buffered, so your take lines
    up with the video.

Updating

Use the update banner in the app, or install DubStage-Setup-1.3.1.exe below
over your existing installation — packs, recordings and settings stay.

Full history in CHANGELOG.md.

v1.3.0 - a real installer, app icons and a new look

Choose a tag to compare

@xmrius xmrius released this 28 Sep 08:08

DubStage now comes as a proper Windows program: download DubStage-Setup-1.3.0.exe below, run it, and start DubForge and DubStage from the Start menu. No Python, no batch files.

Added

  • Windows installer. Installs both tools per user, without admin rights,
    and brings its own Python with every package they need. ffmpeg is downloaded
    with a progress bar; vocal separation (Demucs) and automatic captions are
    optional components you can add later by running the setup again. Uninstall
    from Settings → Apps — you are asked before packs and recordings go.
  • App icons. DubForge and DubStage have their own icons in the Start menu,
    on the desktop, in the title bar and in the taskbar, instead of Python's.

Changed

  • DubForge has a new look that matches DubStage: numbered cards for the
    three steps, a format switch next to the logo, flat buttons and fields, slim
    scrollbars, a striped clip table, and a waveform that lights up inside each
    clip, with drag handles on its edges.
  • DubStage's menu shows a preview frame for every pack, and while you
    record, a small "● REC" badge in the corner replaces the banner across the
    video — the mouth you are syncing to stays visible.
  • German texts use real umlauts.

Fixed

  • A pack named .. deleted the program folder (and . all packs), because
    building first removes the old pack of that name.
  • Copying a pack into its own folder deleted it.
  • A failed MP4 export in DubStage threw away every take. You now stay on
    the finale and can simply save again.
  • "Update yt-dlp" could show a message with a literal %s; audio files with a
    time range could not be analysed; Demucs could fail to read audio; DubForge
    opened with a delay of several seconds; DubStage's menu ran ffprobe for every
    pack on every redraw.

Updating

  • Recommended: install DubStage-Setup-1.3.0.exe. Your old folder stays as
    it is — move packs/ into the new install folder, or add it in DubStage with
    "Add folder".
  • The in-app update from 1.2.1 still works and brings the new code into your
    existing folder; it keeps using your own Python.
  • The setup is not code-signed yet, so Windows SmartScreen may warn:
    More info → Run anyway.

Full history in CHANGELOG.md.

v1.2.1 - no more console window during updates

Choose a tag to compare

@xmrius xmrius released this 20 Aug 11:08

Fixes to the in-app update and to controls that went blank when hovered.

Fixed

  • Hovering turned controls white and swallowed their text. Radio buttons,
    checkboxes and the column headers of the clip list took their hover colours
    from a ttk state table that configure() cannot reach — the same trap the
    dropdowns fell into earlier. All of them are set through map() now, along
    with the slider, the spinbox and read-only entry fields.

  • A console window appeared during an update and stayed. The swap script was
    started with DETACHED_PROCESS, which leaves the process without a console —
    so tasklist, find and ping each opened one of their own. It is now
    started with CREATE_NO_WINDOW, which hands it an invisible console that the
    child processes inherit.

  • A failure while closing could block the update. The swap script waits for
    the application to disappear before touching any files, and gives up after 60
    seconds. If saving the settings or clearing the temporary folder raised on the
    way out, the window closed but the process stayed alive — and the update
    quietly did nothing. Both tools now treat every cleanup step as optional and
    always reach the actual shutdown.

One caveat

The script that performs a swap always comes from the version being replaced,
not from the one being installed. So this fix takes effect from the next
update onwards — updating to 1.2.1 itself still runs the old script.

If an update ever looks stuck, %TEMP%\dubstage_update_*.log records every
step, and the files it replaced are backed up next to it.

Full history in CHANGELOG.md.

v1.2.0 - export packs for The Choicer Voicer

Choose a tag to compare

@xmrius xmrius released this 20 Aug 10:55

DubForge can now build packs for The Choicer Voicer as well as for DubStage.
Pick the target format at the top of the window; the interface adapts to it.

Added

  • Two export formats. DubStage as before, or The Choicer Voicer. The CV
    profile adds a character per clip, an image per character and the pack
    description. The DubStage profile is unchanged.

  • Choicer Voicer export: one .txt per line beside its audio, plus
    _pack_info.ini, and the video as OGV — Godot reads nothing else, so a pack
    without dub_video.ogv will not load at all.

  • Character images straight from the scene. Select a clip, type the
    character, press "Grab image": a still frame is pulled from the video at that
    moment and assigned to that character, with a thumbnail next to the field. The
    pack icon works the same way. Real packs use one image per speaker rather than
    one per line, and the export follows that.

  • Numbering runs per character in the CV profile, not across the scene —
    06_woody may sit later than 06_buzz. Order within the scene comes from the
    timestamps alone, which is how the game reads it.

About the format

The .txt format is documented nowhere; the official route is the editor inside
the game. This implementation was read out of a working pack and checked against
it — all twenty metadata files and the _pack_info.ini of that pack are
reproduced byte for byte. UTF-8, CRLF, no newline at the end, timestamps padded
to two digits with three decimals, lists without a space after the comma.

Captions never need escaping because real packs use typographic quotation marks
inside the straight ones. The export does the same, so the question of how the
game escapes a " never comes up.

Upgrading

The update banner in either tool will offer it. Packs, recordings and settings
are untouched.

Full history in CHANGELOG.md.

v1.1.0 - in-app updates and a scrollable DubForge window

Choose a tag to compare

@xmrius xmrius released this 15 Aug 20:52

Both tools now tell you when a new version is out and can update themselves.
Plus the fix that started it: DubForge was unusable in a non-maximised window.

Added

  • Update notice inside both tools. On start they ask GitHub once whether a
    newer release exists — at most every six hours, and the answer is remembered
    so the banner also shows up when no request is made. The banner names the new
    version, expands to show that release's changelog, and updates the tools on
    one click: the archive is downloaded, checked, the app closes, the files are
    replaced and the app starts again.

  • Guard rails, because this downloads code and runs it: HTTPS only, GitHub
    hosts only, this repository only, a size limit on the download, no archive
    paths pointing outside the target folder, and every .py/.pyw in the
    archive is compiled before anything is replaced — a truncated download cannot
    leave you with a broken install.

  • Opt out by setting "check_updates": false in dubforge_settings.json
    or dubstage_settings.json. Nothing but the release information is ever
    requested, and nothing is sent.

Fixed

  • DubForge was unusable in a non-maximised window. The three steps were
    packed straight into the window, so anything past the bottom edge — step 3,
    "Build pack", the progress bar and the log — was simply gone, with no way to
    reach it. The content now sits in a scrollable canvas. It is stretched to the
    window as long as there is room, so a maximised window looks exactly as
    before; below that it scrolls.

  • Mouse wheel scrolls the page — except over widgets that scroll or count
    on their own. The waveform still zooms, the clip list and the log scroll
    themselves and hand the wheel back to the page once they reach their end, and
    the spinbox keeps counting.

  • Both tools now open no taller than the screen allows. At 1180×880
    DubForge did not fit on a 1080p display once the taskbar and title bar were
    subtracted — which is how the problem arose in the first place. The minimum
    window size drops from 980×740 to 900×480.

  • Scrollbars were unstyled and showed up pale grey against the dark
    interface.

Upgrading

This one still has to be installed by hand — the previous version has nothing
that could fetch it. Replace DubForge.pyw and DubStage.pyw and add the new
updater.py. From here on the tools offer it themselves.

No new dependencies; packs, settings and recordings are untouched.

Full history in CHANGELOG.md.

DubForge and DubStage v1.0.1

Choose a tag to compare

@xmrius xmrius released this 11 Aug 16:32

Full Changelog: v1.0.0...v1.0.1

DubForge and DubStage v1.0.0

Choose a tag to compare

@xmrius xmrius released this 10 Aug 14:16