Repository navigation
1.3.0: profile video mode, reconnect readiness, macro slot 0
Three atemwire fixes and one new property. Two known problems stay open, listed at the end with the capture each needs. Nothing is removed; hyperdeckwire, ultimattewire and videohubwire are unchanged.
Behaviour changes
ATEM.connectedandprobe()report not-connected during a reconnect gap. After about 5 s without packets the transport re-handshakes on its own, and the switcher's state is empty until the new state dump completes. During that gap,ATEM.connectedis now False, andprobe()returnsconnection_status=Falsewith the other fields None; both used to report a connected switcher with no state.ATEMConnection.is_connectedkeeps its meaning (worker alive, handshake done):send()and the pool's dead-worker eviction rely on it.- Profiles saved by 1.3.0 use the canonical video-mode names. These are the spellings ATEM Software Control uses:
1080p5994rather than1080p59.94, andNTSC_widescreen/PAL_widescreenfor 16:9 SD.
Fixes
Profile video mode round-trips at every rate. Save used to write the display label (1080p59.94) while apply only knew 1080p5994-style names, so every fractional-rate mode was skipped on apply as "unrecognized mode". Both SD aspects were also saved as one string. Save, apply and the macro codec now share one table, atemwire.messages.input_video.VIDEO_MODE_XML_NAMES, covering all 30 modes. Apply compares mode numbers, so a profile at the current mode no longer re-sends the mode change and waits 3 s.
Files saved by earlier versions still apply. The decimal spellings are read, except the two SD labels that never recorded 4:3 or 16:9:
525i59.94leaves the video mode unchanged and logs a warning.625i50, which is also ASC's own name for PAL 4:3, applies as 4:3 with a warning.
ATEMConnection.is_ready is new: True while connected and the switcher's state is current, False from the protocol's disconnected event until the next connected. It is what ATEM.connected and probe() now read.
Macro slot 0 is latched as the last-run macro. The play-status handler turned index 0 into "idle", so lastRunMacro stayed empty whenever macro 1 ran.
Also new: atemwire/docs/SURFACE.md, an inventory of the library's whole surface (commands, state, transfers, connection lifecycle, gaps), read from the code.
Not fixed
Split-mono Fairlight strips in profile apply. Apply sends both halves of a split-mono strip with channel −1, so the second overwrites the first. Save writes the same AudioSource id for both halves and records no subchannel, and how ATEM Software Control marks the second half is unknown. Capture needed: an ATEM Software Control "Save Switcher State" XML from a switcher with one input set to dual-mono (split).
Fly-key infinite-run direction, centre position. run_flying_key_infinite_direction documents 5 as the centre; the macro codec's table has 0 = CentreOfKey and no 5. They agree on every other position. ASC treats CentreOfKey and MiddleCentre as different locations. Both sites carry a TODO; behaviour is unchanged. Capture needed: a Wireshark capture of ATEM Software Control's RFlK packets (byte 5) as it runs a fly-enabled key to each of its ten locations (CentreOfKey and the 3×3 grid including MiddleCentre). Ideally also record those ten runs into a macro and download it, to compare the location byte of op 0x0056.
Wheels for Linux x86_64 and aarch64, macOS arm64 and x86_64, Windows x86 and x86_64 on CPython 3.10 to 3.14, plus the sdist.