Repository navigation
v1.1.1
v1.1.0 was pulled shortly after release due to the Docker image reporting an incorrect version number. v1.1.1 includes the same changes with a packaging fix. The PyPI package was unaffected.
The first feature release of Owlbot is here! The headline addition is the clips module, letting viewers capture and share their favorite stream moments without leaving chat. This release also brings a proper templating system and per-instance state to the module API, making it easier to build modules with polished web UIs and managed runtime state. And for the first time, Owlbot ships as a Docker image.
New Features
Clips
Owncast doesn't include built-in clip support, and previous community solutions have required complex setup to get running. The new clips module fills that gap.
Viewers can capture moments from a live stream directly from chat. Typing !clip sends the user a private link to a browser-based editor where they can trim the footage, add a title, and save the clip. Each clip gets its own shareable page with a video player, and all saved clips are browsable from a gallery page. No external services or extra software required, just ffmpeg on the host.
See the Clips documentation for more information.
Docker Image
Owlbot is now published as a Docker image alongside the PyPI package. The CD pipeline builds and pushes to the Gitea Container Registry on every tagged release, so docker pull is now a first-class installation path.
Module API
Templates and Static Assets
Owlbot now bundles Bootstrap and a shared base template which modules can extend. Package modules place templates in a templates/ directory and render them via ctx.templates.render(). The built-in base.html gives every module a clean, unified look without having to pull in its own stylesheets or layout boilerplate. Static assets bundled with Owlbot are served automatically at /owlbot/static/.
See HTTP Routes documentation for more information.
Per-Instance State
ModuleContext now includes a state dict for holding runtime objects (schedulers, caches, managers) across handler invocations. This replaces the use of module-level globals and ensures multiple bot instances in the same process maintain fully independent state.
See Context documentation for more information.
Everything Else
- Adds multi-handler support to RouteRegistry for registering multiple handlers on the same path with different HTTP methods.
- Adds
!editcountermanagement command for setting and adjusting named counters. - Adds Python 3.13 and 3.12 support alongside existing 3.14 support.
- Fixes new timers never firing.
- Fixes Docker image reporting incorrect version by removing .dockerignore.