Skip to content

Releases: lucas-romanenko/bmdctl

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 17:30

Install with curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh, Scoop, the deb or rpm below, or ghcr.io/lucas-romanenko/bmdctl:0.2.1 (docs/INSTALL.md).

New to bmdctl? docs/GUIDE.md walks through it, task by task. What has run on real hardware, and what hasn't yet: docs/HARDWARE.md.

Changelog

Fixes

  • 0d3689b fix(cli): a flag before any command, or no command, says so
  • 77962a4 fix(install): find the latest release with BusyBox's wget
  • 73096b4 fix(install): the PATH hint names ~/.zshrc under zsh

Documentation

  • 396c7f1 docs(hardware): the twenty-fifth run, the first Videohub
  • 9b0b670 docs: commit references after the history rewrite
  • 2373780 docs: made-up names for the test switcher's stills
  • 367d429 docs: the oldest macOS, Windows and Linux the builds run on; v0.2.0 checked on every platform

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 14:32

Install with curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh, Scoop, the deb or rpm below, or ghcr.io/lucas-romanenko/bmdctl:0.2.0 (docs/INSTALL.md).

New to bmdctl? docs/GUIDE.md walks through it, task by task. What has run on real hardware, and what hasn't yet: docs/HARDWARE.md.

Changelog

Features

  • 9542e8c feat(engine): loop loses its unverified mark
  • 92bc3c3 feat(hyperdeck): follow bmdwire v1.8.0 (bmdwire#60)
  • b665cfe feat(hyperdeck): pause
  • f42e52f feat(hyperdeck): remote, configuration show and configuration set
  • 95931ce feat(hyperdeck): timeline add, remove and clear
  • 803f71e feat(ultimatte): the Ultimatte commands
  • da15430 feat(ultimatte): the Ultimatte package
  • 73b614b feat(ultimatte): the keyer's model, and what a restore would lose (bmdwire#52)
  • c5b9603 feat(videohub): the Videohub commands
  • 3455c33 feat(videohub): the Videohub package

Fixes

  • 486515f fix(atem): a transfer's last progress report reaches its caller
  • 4a1b06e fix(cli): a deck watch names slow play's speed; an empty slot has no time left
  • 5b7b9ce fix(cli): the man page lists every device's commands
  • 2b85d4d fix(doctor): a socket path too long for a Unix socket fails
  • bd6d9e1 fix(engine): the audio mixer is atemwire's audio_mixer_type, not _AMC
  • 2c4a9b1 fix(engine): timeline clear reads the timeline back until it is empty
  • 107245c fix(mcp): a message that is neither request nor response is an Invalid Request
  • ac44eba fix(ultimatte): a restore doesn't set the video format, so the warning doesn't say it does
  • 00aca91 fix: a timeout's message names the wait it was

Documentation

  • 9080e44 docs(hardware): the first HyperDeck and Ultimatte sessions
  • 957a29f docs(hardware): the twenty-first run, the new HyperDeck commands
  • bf47547 docs(hardware): the twenty-fourth run, the ATEM before v0.2.0
  • 7add8cc docs(hardware): the twenty-second run, an empty timeline after bmdwire 1.7.1
  • d287b52 docs(hardware): the twenty-third run, loop and timeline clear
  • a5e5f97 docs(porting): the record says what the port has now, and what it left out
  • 419aba1 docs(ultimatte): network set's example readdresses to a free address
  • 843ddd2 docs: CLAUDE.md keeps its rules and drops their history
  • f45c089 docs: LICENSE is MIT's text alone, with the licence map in NOTICE
  • 2a94721 docs: PORTING.md's scope, test line and history; ARCHITECTURE's oracle counts
  • eeff050 docs: SURFACE inventories of videohubwire and ultimattewire
  • 88d11d7 docs: Videohub and Ultimatte in the guide, README and architecture
  • 55b0684 docs: a security policy and a code of conduct
  • 52e9fd8 docs: bmdctl controls four devices, and follows bmdwire past v1.3.0
  • 6bdaf00 docs: leave a private deployment's details out of the hardware record
  • 442cfd6 docs: the README and the guide say what has run on hardware now

Other

  • ea36819 Merge pull request #24 from lucas-romanenko/dependabot/pip/docsite/docs-8fd6947140
  • dd65e52 Merge pull request #25 from lucas-romanenko/dependabot/github_actions/actions-d5666170a1
  • 47a78d1 ci(surface-drift): check out all four packages' docs
  • f051c48 ci: no nightly race run; CI on every push is the check
  • c0d5593 refactor(cli): one way to ask the running engine
  • 5d04997 refactor(engine): one watch loop, state, disconnect and registration for every device
  • 1934cd7 refactor(hyperdeck): Python's text rules in internal/pytext
  • 576d67d refactor: the standard library's maps and slices for hand-written copies
  • 2f97d4b test(bmdctl): a deck watch's change comes after its baseline
  • 6c3633c test(bmdctl): stopEngine waits for the engine's Serve to return
  • 9c49afa test(bmdctl): the hub's lock comes in the preamble
  • fb16295 test(cmd): give eventually 15 s
  • 8644410 test(fakes): the Videohub and Ultimatte fakes over loopback
  • f56c60a test(hosts): a made-up device name in the alias tests and their samples
  • 01f252e test(hyperdeck): the oracle at bmdwire v1.7.1, with a deck's timing; Dial refuses what isn't a greeting
  • feb524d test(ultimatte): bmdwire 1.7.0's parser tests, ported one for one

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 16 Oct 12:00

Install with curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh, Scoop, the deb or rpm below, or ghcr.io/lucas-romanenko/bmdctl:0.1.4 (docs/INSTALL.md).

New to bmdctl? docs/GUIDE.md walks through it, task by task. What has run on real hardware, and what hasn't yet: docs/HARDWARE.md.

Changelog

Features

  • 258d38a feat(atem): a state dump without a video mode re-handshakes (bmdwire#27)
  • ece244b feat(atem): aggressive drain for uploads, as WebATEM's uploader runs
  • 0748e5a feat(atem): another client's turn at every release (bmdwire#38, #40)
  • 5ec2519 feat(atem): uploads as ATEM Software Control sends them (bmdwire#36)
  • c53c289 feat(bmdctl): leaders to the on-bus marks, paths cut from the left
  • f0658ff feat(bmdctl): the command reference as a page per group
  • 576c26c feat(engine): a save's still capture stops when the session goes (bmdwire#31)
  • 797a3dc feat(engine): keep the media pool's stills, so a profile save needs no download
  • 1dc23d1 feat(mcp): wait_for_change, a long poll with a cursor

Documentation

  • 9a17110 docs(brand): the mark and the lockup as SVG
  • 28c7004 docs(hardware): eighteenth run, the UDP thread waiting on itself
  • ce667d4 docs(hardware): fifteenth run, a whole media pool restored
  • 9bcd58d docs(hardware): fourteenth run, renamed and unnamed stills, upload speed
  • 3d3c6bd docs(hardware): seventeenth run, ATEM Software Control's turn
  • a5aeb83 docs(hardware): sixteenth run, uploads as ATEM Software Control sends them
  • db6ab2f docs(hardware): thirteenth run, profile saves from the still cache
  • 766d8da docs(hardware): twelfth run, a full media pool and ASC's save captured
  • 2466962 docs: a documentation site from docs/, with MkDocs Material
  • fccb7cd docs: the guide as a page per section, and a quick start

Other

  • 683d5a5 ci: build the documentation site, and publish it to GitHub Pages
  • 35e669a ci: fail on a file gofmt would change
  • 5d469ad perf(engine): a restore prepares each picture ahead, once
  • 90be99f test(bmdctl): every command line in the docs passes bmdctl's checks

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 14 Oct 14:59

Install with curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh, Scoop, the deb or rpm below, or ghcr.io/lucas-romanenko/bmdctl:0.1.3 (docs/INSTALL.md).

New to bmdctl? docs/GUIDE.md walks through it, task by task. What has run on real hardware, and what hasn't yet: docs/HARDWARE.md.

Changelog

Features

  • e717430 feat(bmdctl): each session's age and idle time, and stale
  • 8a10eda feat(bmdctl): hosts alias NAME SHORT
  • 3d20930 feat(bmdctl): the host as the first word
  • c67206c feat(bmdctl): use HOST, and bmdctl marks the default
  • 3a1480b feat(engine): pinned sessions close after an hour idle
  • 493b868 feat(hosts): an alias a host goes by as well as its name

Documentation

  • 4502a31 docs(contributing): a wire command starts in bmdwire
  • e95e835 docs(porting): the bmdwire version the port tracks, on one line
  • 10e1944 docs(readme): what has run on hardware
  • 5b6313a docs: CLAUDE.md, bmdwire first

Other

  • dc9b297 ci: nightly SURFACE drift check against bmdwire main
  • 994e933 test(bmdctl): wait out the stopped engine's lock, not its socket

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 13 Oct 18:26

Install with curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh, Scoop, the deb or rpm below, or ghcr.io/lucas-romanenko/bmdctl:0.1.2 (docs/INSTALL.md).

New to bmdctl? docs/GUIDE.md walks through it, task by task. What has run on real hardware, and what hasn't yet: docs/HARDWARE.md.

Changelog

Features

  • f0a2f13 feat(atem): fly-key locations from bmdwire#22, MiddleCentre is 5
  • 986988c feat(macro): floats to six significant digits, as ASC writes them
  • a0296f6 feat(profile): dual-mono Fairlight inputs save and apply per half

Fixes

  • 1be59e5 fix(fakeatem): an empty macro upload keeps a name-only macro

Documentation

  • 0e69555 docs: PORTING records the ninth run's macOS binary and Claude Code
  • fd53e43 docs: the eleventh hardware run, a dual-mono profile restore
  • a992964 docs: the eleventh run's build and switcher
  • 9338e36 docs: the ninth hardware run, the macOS release and MCP
  • fc93ad0 docs: the tenth hardware run, profiles in ATEM Software Control

Other

  • dc06dbf test(bmdctl): restore a dual-mono profile with only audio on
  • 1a9e4bd test(fixtures): gen_profile.py draws only the single-op macro samples

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 23:47

Install with curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh, Scoop, the deb or rpm below, or ghcr.io/lucas-romanenko/bmdctl:0.1.1 (docs/INSTALL.md).

New to bmdctl? docs/GUIDE.md walks through it, task by task. What has run on real hardware, and what hasn't yet: docs/HARDWARE.md.

Changelog

Fixes

  • 3ccd09c fix(atem): reopen Ready before a disconnect fails anyone
  • 0bd2b21 fix(cli): a HyperDeck host's line in the overview is a switcher's

Documentation

  • 7533c40 docs(brand): the social preview
  • c829174 docs(hardware): a Tested on table and an Unverified list
  • 61dd10a docs: ARCHITECTURE.md
  • cad946b docs: CONTRIBUTING.md
  • 68d0037 docs: GUIDE.md, a task-by-task walkthrough
  • 4b5f802 docs: INSTALL.md, per platform
  • 416287c docs: README for the public repository
  • 3c32a80 docs: cite commits by their hashes after the history rewrite
  • 98cf772 docs: test every touched package before committing

Build

  • f8e0203 build(release): changelog grouped by type, without authors; a release header

Other

  • 08c33d7 ci: no setup-go cache, and a nightly race run
  • f9686f0 test(cli): TestSpinnerRuns measures the real connect time
  • c4695c8 test(cli): a fixed connect time in the bench, so headers don't depend on the machine

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 14:06

First release.

One binary for Blackmagic ATEM and HyperDeck, talking the native protocols directly. Videohub and Ultimatte are stubs for now.

ATEM: program/preview/cut/auto, transitions, upstream and downstream keys, aux, media pool upload/download/clear, macros (download and decode), profile save, Fairlight and classic audio with live meters, watch (text and JSON), exec cue files, undo.
HyperDeck: transport, clips, slots, record, config. Ported from hyperdeckwire; not yet verified on hardware.
Both: hosts named by the device's own name, device probe on connect, 1-based indexes, --dry-run, -t, bash/zsh/fish completion, atemctl/hdctl/vhctl/ultctl aliases.
Integration: MCP server (15 tools) with a Claude skill, HTTP/JSON + SSE via bmdctl serve.

Tested on a 1 M/E Constellation HD (1080p25). See docs/HARDWARE.md for what was verified and what wasn't.

Install: curl -fsSL https://raw.githubusercontent.com/lucas-romanenko/bmdctl/main/install.sh | sh