Skip to content

Releases: WebSummoner/images

Video Recorder 1.0.0

Choose a tag to compare

🎥 images — release video-recorder-1.0.0

The container the hub starts next to a browser when enableVideo is set: websummoner/video-recorder:1.0.0, latest-release (the hub's default -video-recorder-image) and latest, published by the images workflow on this tag. The base image, the browser image sources and the build tool are covered by browser-base-1.0.0.

🎥 Changes

  • Waits for the browser's PulseAudio — up to 25 attempts, 200 ms apart — instead of probing once at start-up; a browser container still bringing the daemon up no longer silently costs the recording its audio track.
  • The audio track is encoded explicitly as AAC at 128 kb/s; +faststart moves the index to the front of the file so recordings stream; a CRF option joins PRESET for libx264; DISABLE_AUDIO=true records video only. Maintainer changed in the APKBUILD.

🚀 Publishing

Published only on a video-recorder-<version> tag, or a manual run of the images workflow naming one. A version with a pre-release suffix (1.2.0-rc1) publishes that exact tag only, so a release candidate never becomes the recorder every hub pulls by default. Without a pullable recorder the hub cannot record video, which is why this image is published by GitHub Actions and not by hand.


Part of WebSummoner 1.0.0 · 📖 Documentation · 💬 Discussions

WebSummoner is developed and maintained by RIADVICE under Apache-2.0. It builds on Selenoid by Aerokube and Ivan Krutov, and on the original UI by Kirill Merkushev.

Browser Base 1.0.0

Choose a tag to compare

@GhaziTriki GhaziTriki released this 03 Sep 02:33

🐳 images — release browser-base-1.0.0

The browser image sources and the Go tool that builds them. This repository publishes two images itself, each on its own release tag, so it has two releases: this one for websummoner/browser-base:1.0.0, which also carries the notes for the browser image sources and the build tool, and video-recorder-1.0.0 for the recorder. There is no plain 1.0.0 release here.

🧱 Base image

  • websummoner/browser-base:1.0.0 on Ubuntu 26.04 LTS, WebSummoner's own base line. Full font coverage (Noto core, CJK and colour emoji, Indic, Thai, WQY Zen Hei, Liberation, DejaVu, Microsoft core fonts), DBUS_SESSION_BUS_ADDRESS pointed at /dev/null so Chromium stops logging bus errors, and the fluxbox style renamed with the brand — the wallpaper had fallen back to black because the config referenced a style file that no longer existed.
  • No default LANG on purpose; language is per session through the env capability.

🌐 Browsers

Browser Version Driver
Chrome 152.0.7977.75 ChromeDriver 152.0.7977.75
Firefox 155.0.0 geckodriver 0.37.1
Edge 152.0.4191.62 msedgedriver 152.0.4191.62
Opera 135.0.5973.76 (Chromium 151) OperaDriver 151.0.7922.176
Brave 1.94.119 (Chromium 152) ChromeDriver 152.0.7977.75
Yandex 26.6.1.1083 yandexdriver
Safari WebKitGTK 2.52.6 WebKitWebDriver
  • Brave is a new image (websummoner/brave), with a DevTools proxy like Chrome's. The build tool starts the dev image, reads the embedded Chromium version from the browser and fetches the matching chromedriver.
  • Chrome drivers come from the Chrome-for-Testing endpoints (last-known-good-versions and storage.googleapis.com/chrome-for-testing-public); chromedriver.storage.googleapis.com stopped serving new versions in 2023. Stable, Beta and Dev channels resolve correctly. Chromedriver download is shared with Brave.
  • Edge: latest resolves through the LATEST_STABLE pointer, downloads come from msedgedriver.microsoft.com, and the package's deb822 sources migration is worked around in postinst.
  • Firefox installs from Mozilla's official APT repository (the Ubuntu Mozilla-team PPAs are end-of-life), resolves libavcodec dynamically, and no longer embeds the hub binary: the image runs geckodriver --host 0.0.0.0 with --allow-hosts for the container hostname, and browsers.json uses "path": "/". The Selenium-JAR variant for Firefox ≤ 48 is removed.
  • Opera: the driver is resolved from Opera's Chromium line (Opera N is Chromium N+16, and operachromiumdriver tags follow Chromium). When no driver exists for that line yet, the newest published operadriver is used — never a chromedriver, which crashes on window.open. The image label records the driver actually used.
  • Yandex: PulseAudio was started under HOME=$HOME/pulse, so the browser never found the daemon's cookie and recordings were silent. Fixed.
  • Safari: WebKitGTK 2.52.6 built from source on Ubuntu 26.04, with the MiniBrowser patched so media playback does not require a user gesture at the engine level; WEBKIT_VERSION baked into the image and reported as the browser version; PulseAudio added to the image and started before Xvfb, like every other image; and the prism shim sends a click after every navigation when ENABLE_AUDIO=true, which is the gesture WebKit demands before it plays anything.
  • All entrypoints wait for the PulseAudio daemon before loading the TCP module and unload module-suspend-on-idle, so the recorder never attaches to a daemon that is not ready or has gone idle. The VNC password is websummoner.
  • APT keys use signed-by keyrings everywhere; apt-key is gone since Ubuntu 24.04.
  • Removed: chromium, android (with its automation scripts), opera_presto, phantomjs.

🛠️ Build tool

  • pkger is gone; the build context is copied from the real static/ directory, because some subdirectories are nested Go modules that go:embed cannot include. The tool must run from the repository root and says so.
  • Cross-compiled with plain go build for linux, darwin and windows; gox removed. Extraction errors (gzip, MkdirAll) are no longer ignored.
  • brave command added, chromium removed; default tests directory is ../websummoner-container-tests.
  • Go 1.27, golangci-lint, workflows with build permissions fixed, Codecov, DeepSource, Dependabot (Docker files deliberately excluded; Docker Hub scanning covers them).
  • Starlight documentation site at websummoner.riadvice.com/images with a reference page per browser and a building guide; README with a Docker Hub badge.

🚀 Publishing

This repository owns two images and publishes them itself, only on their own release tags. The images workflow runs when a tag named browser-base-<version> or video-recorder-<version> is pushed — or on a manual run given such a tag — and builds and pushes exactly that image:

Tag Image Docker Hub tags
browser-base-1.0.0 websummoner/browser-base (what every browser Dockerfile is built FROM) 1.0.0, latest
video-recorder-1.0.0 websummoner/video-recorder 1.0.0, latest-release (the hub's default), latest

An ordinary push builds nothing, so neither image is rebuilt unless a release for it was cut. A version with a pre-release suffix (1.2.0-rc1) publishes that exact tag only, so a release candidate never becomes the recorder every hub pulls by default. ci/docker-push.sh <tag> runs the same steps locally, DRY_RUN=1 prints them without building, and UBUNTU_VERSION overrides the base's distribution. Without a pullable recorder the hub cannot record video, and without the base no browser image can be built, so both are guaranteed to exist the moment their tag lands.

The seven browser images are not built in GitHub Actions. Each needs the vendor's package for one exact version, a driver resolved against it at build time, for Safari a WebKitGTK compile that takes hours, and a run of the container suite before it is tagged. RIADVICE builds and publishes them from these public sources with the public images tool, following each vendor release; anyone can reproduce an image with the same tool.

🏷️ Tags

Chrome, Firefox, Edge and Opera publish three tags — line (firefox:155), alias (firefox:155.0) and immutable full version (firefox:155.0.0). Brave and Yandex have no separate alias level and publish line and full version (brave:1.94, brave:1.94.119); Safari carries the WebKitGTK version only (safari:2.52.6).


Part of WebSummoner 1.0.0 · 📖 Documentation · 💬 Discussions

WebSummoner is developed and maintained by RIADVICE under Apache-2.0. It builds on Selenoid by Aerokube and Ivan Krutov, and on the original UI by Kirill Merkushev.