Repository navigation
Releases: lucas-romanenko/bmdctl
Release list
v0.2.1
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
v0.2.0
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
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
v0.1.3
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
v0.1.2
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
v0.1.1
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
v0.1.0
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