Skip to content

Releases: LoftiStudios/oxbow

Oxbow 0.6.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 21:46
c9f5923

So this is a pretty big release under the hood.

Rendering

One of the things I didn't love about my original approach is that it had a multi-step process where we used the TwitchRenderCLI to render the chat into a video file, and then composited that chat video + VOD.

This meant a couple things:

  • First, the chat video was double-encoded. Not the end of the world, but not great. It should be fitting well within the compression range of the whole thing, but I didn't love it (insert nine inch nails copy of a copy of a...)
  • It was also kind of slow. Rendering the chat was a whole separate step, and executing the .net framework + skia was a bit expensive. It typically happened at the same time a VOD was downloading, but on a busy chat, and fast link, you'd be held up by it.
  • Lastly: disk space. Rendering out a large VOD + chat meant meany gigabytes of chat video sitting on disk while you're trying to download and composite.

The approach now is to still use the CLI, but leverage Core Text and Core Graphics to render the text ourselves at composite time. This gives us free support for all unicode (emoji's, right to left text, kanji, etc) for free (it also squashes some of the known issues the CLI has in those cases). ImageIO handles emotes and animating them for next to nothing also. And on a apple silicon chip, there's tons of chat rendering headroom that the encoder is never starved or waiting.

Crash reporting

App crashes, and on next launch we prompt to open a GH issue with the trace. It's simple, but it's a start. (There's also a new GH action for issues the resymbolize the crash)

New Signing.

Since we've moved this project to lofti studios, we're now signing it with that apple developer id (vs. my personal one).


The Nitty Gritty

  • Trim the Swift comments, and unblock OxbowTests on Xcode 27 by @barclay in #75
  • Render chat offline from embedded images, and share them across jobs by @barclay in #76
  • Design a native chat renderer, and correct the upstream-cadence claim by @barclay in #77
  • Render chat natively behind a hidden setting (native renderer, phase 1) by @barclay in #78
  • Stop a native render's dead FFmpeg from killing Oxbow by @barclay in #79
  • Draw badges, emotes, cheermotes and system messages natively (native renderer, phase 2) by @barclay in #80
  • Ship Inter's licence with the fonts by @barclay in #81
  • Make the native chat renderer the default, with a way back in Settings by @barclay in #82
  • Draw chat during the composite, with no render step (native renderer, phase 4) by @barclay in #84
  • Write the development guide for contributors by @barclay in #86
  • Sign releases as Lofti Studios, LLC by @barclay in #87
  • Attach the dSYM to each release by @barclay in #88
  • Offer to report a crash on the next launch by @barclay in #89
  • Prepare 0.6.0 by @barclay in #93

Full Changelog: v0.5.0...v0.6.0

Oxbow 0.5.0

Choose a tag to compare

@github-actions github-actions released this 12 Sep 07:43
b0766bf

Watching a channel.

You can now subscribe to a channel, and download everything from it. Eventually this will move to a menubar item, so it can just run on the mac all the time. For now, it's a little broken, but it mostly works.

We've got a pretty big UI overhaul

It's now more mac-ish, with 3-panes, and the later being an inspector.

screenshot-1

One of the things I love is the mail.app jaunty little stacking of thumbnails in the queue.
Screen Recording 2026-09-11 at 7 35 46 PM

What's Changed

  • Defaults that stick, a redesigned intake, and the menu icons macOS 26 wants by @barclay in #53
  • Generate the README screenshot from a fixture, not from real streams by @barclay in #54
  • Move workspace teardown out of QueueEngine, and cover what that made testable by @barclay in #55
  • docs: stop claiming conventional commits match existing history by @barclay in #56
  • Move retained pieces and the resume point out of QueueEngine by @barclay in #57
  • Describe the commit convention the repository actually uses by @barclay in #59
  • Move step-context construction into StepContextBuilder by @barclay in #58
  • Move assemble's spent-input cleanup out of StepContextBuilder by @barclay in #60
  • Record what a channel's video list will and will not tell us by @barclay in #61
  • One Shortcuts action, which macOS 26 also puts in Spotlight by @barclay in #62
  • Design a channel watcher that tells you first and fetches only if asked by @barclay in #63
  • Say what happens when a watch's download fails by @barclay in #64
  • Make the sidecar FFmpeg test run, and fix the muxer gap it found by @barclay in #67
  • Watch a Twitch channel for new archives by @barclay in #65
  • Record why sub-only sign-in is closed rather than deferred by @barclay in #69
  • Channels as sidebar destinations, and an inspector beside Get Info by @barclay in #70
  • Make the inspector permanent, open and wide by @barclay in #71
  • Prepare 0.5.0: regenerated screenshot, watched channels in the fixture, changelog by @barclay in #73
  • Say in the README that Oxbow watches channels by @barclay in #74

Full Changelog: v0.4.0...v0.5.0

Oxbow 0.4.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 22:43
67ec692

A few smaller changes, here, but the bigger one being to move the project under lofti studios.

The dock statuses are pretty slick, too.

What's Changed

  • Hold the project under Lofti Studios LLC by @barclay in #46
  • Keep the Mac awake while the queue has work in flight by @barclay in #47
  • Warn at intake when a job will not fit on disk by @barclay in #48
  • Status: dock badge, dock progress, and a chime when a job finishes by @barclay in #49
  • Release 0.4.0 by @barclay in #52

Full Changelog: v0.3.0...v0.4.0

Oxbow 0.3.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 17:32
0c68ddc

Trimming a stream down to just the part you want is now a matter of dragging two handles, chat comes included by default, and Oxbow warns you before replacing a download you already have. Finished files are also dramatically smaller—a quiet stream that used to take about 48 GB now takes around 9, and looks no worse. This version now requires macOS 26.

What's Changed

  • Tell the user when a new version exists by @barclay in #32
  • Refuse chat for a clip whose parent broadcast is gone by @barclay in #33
  • Find out why the composited chat looks coarse, and fix what the answer allows by @barclay in #35
  • Measure a machine's composite encode ceiling by @barclay in #36
  • Rate control for the composite: constant quality, not a bitrate by @barclay in #37
  • Composite rate control: ship constant quality, with the gates measured by @barclay in #38
  • Queue and intake polish: warn before replacing, and stop warning about queued steps by @barclay in #39
  • Keep the composite's video on its source timeline by @barclay in #40
  • Clamp the chat's resume seek, and refuse a frameless piece by @barclay in #41
  • Raise the deployment target to macOS 26 by @barclay in #42
  • Redesign the intake around a trim timeline by @barclay in #43
  • Include chat by default, and show the status icon in Get Info by @barclay in #44
  • Release 0.3.0 by @barclay in #45

Full Changelog: v0.2.1...v0.3.0

Oxbow 0.2.1

Choose a tag to compare

@github-actions github-actions released this 28 Aug 22:34
7e9eedd

What's Changed

  • Surface composite progress accurately, and fix a trim-duration bug behind it by @barclay in #26
  • Present the README as a shipped app, not a work in progress by @barclay in #27
  • Measure coverage over OxbowKit, and fail below a floor by @barclay in #28
  • Making a consistant DMG filename. by @barclay in #30
  • Release 0.2.1 by @barclay in #31

Full Changelog: v0.2.0...v0.2.1

Oxbow 0.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 18:11
933217c

What's Changed

  • Keep blocking process syscalls off the cooperative thread pool by @barclay in #2
  • Add the app icon by @barclay in #3
  • Design for the queue UI by @barclay in #4
  • ci(build): add a full-bundle workflow that exercises embed and sign by @barclay in #5
  • Slim the issue templates down to plain markdown by @barclay in #6
  • Queue UI: the first application code by @barclay in #7
  • Kill the running helpers on quit instead of orphaning them by @barclay in #8
  • Keep and surface the helper's output by @barclay in #9
  • Reset the signal mask when spawning the helper by @barclay in #10
  • Chat, render, and clips by @barclay in #11
  • New icon by @barclay in #12
  • Record the state after chat and render, and a scope question by @barclay in #13
  • Rebuild the windows around what macOS already knows how to do by @barclay in #14
  • About window, and real versioning by @barclay in #15
  • Release packaging: DMG, and a workflow that signs and notarizes it by @barclay in #16
  • Fail fast when release credentials are missing by @barclay in #17
  • Composite the VOD and its chat into one file, and narrow the intake to two choices by @barclay in #18
  • Measure the composite's encoder ceiling, and retract the optimisation that wasn't by @barclay in #19
  • Design: fragment the composite's output, and correct what that replaces by @barclay in #20
  • Weigh the bundled CLI against replacing it, and keep it by @barclay in #21
  • Resume an interrupted composite instead of restarting it by @barclay in #23
  • Anchor the submodule pin in a mirror so 0.2.0 can ship by @barclay in #24
  • Release 0.2.0 by @barclay in #25

Full Changelog: https://github.com/barclay/oxbow/commits/v0.2.0