Repository navigation
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