Releases: adeze/HueEntertainmentKit
Releases · adeze/HueEntertainmentKit
Release list
v0.2.0 - Film Cadence & Adaptive Deadband
Highlights of v0.2.0
- 20–60 Hz Frame Rate Range: Lowers the minimum bound to 20 Hz to natively support Apple TV 'Match Frame Rate' cadences (23.976, 24.0, 29.97, and 30.0 fps) without judder.
- Adaptive Deadband Throttling: Automatically detects static frames and throttles UDP transmissions down to a 2 Hz keep-alive heartbeat, reducing Bridge CPU load and WiFi airtime by up to 90%.
- HueXYFrame CIE 1931 xy Gamut C Support: Full pipeline support for CIE 1931 xy coordinates clamped to official Philips Hue Gamut C boundaries.
v0.1.0 - Initial Public Release
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[0.1.0] - 2026-09-17
Added
- Swift 6.0+ package supporting macOS 15+, iOS 18+, tvOS 18+, and visionOS 2+.
HueEntertainmentKit:- Typed CLIP v2 models (
HueBridgeEndpoint,HueEntertainmentConfiguration,HueChannelColor,HueFrame). - Bridge discovery via Bonjour mDNS, Philips Hue cloud broker, and manual IP/host.
- Pushlink pairing workflow with physical link button polling and cancellation support.
- Secure credential storage backed by macOS/iOS Keychain (
KeychainHueCredentialStore). - Color interoperability with
CGColor, SwiftUIColor, hex strings (#FF5500), and named presets (.red,.green, etc.). - CIE 1931 xy color space conversion with official Philips Hue Gamuts A, B, and C clamping.
- Reactive
AsyncStreamlive Bonjour discovery (bonjourStream()) and real-time session state observation (stateUpdates). - Unified logging integration via
swift-log(Logging.Logger) across discovery, client, transport, and session lifecycle. - Swift-NIO Channel Pipeline support with
HueStreamChannelHandler: ChannelDuplexHandlerandHueStreamMessage. - Native Swift-NIO HTTP transport (
NIOHueHTTPTransport) powered byNIOHTTP1andNIOTransportServiceswith Signify Hue root CA verification. - HueStream v2 packet encoder supporting RGB and XY+Brightness color spaces up to 20 channels.
- DTLS 1.2 UDP datagram transport powered by Apple Network framework (
NIOTSDTLSTransport). - Actor-isolated
HueEntertainmentSessionmanaging exclusive configuration ownership, DTLS handshake, 50 Hz frame pumping, and graceful cleanup.
- Typed CLIP v2 models (
HueEntertainmentEffects:- Spatial effect primitives mapped to room coordinates (
HueAreaEffect,HueLightSourceEffect,HueMultiChannelEffect,HueLightIteratorEffect). - Source-over alpha blending mixer and deterministic animation timelines (
HueTimeline). - Allocation-free sliding window history using
Dequefromswift-collectionsinHueSafeFrameLimiter. - Frame pacing for asynchronous sequences via
AsyncSequence.paceForEntertainment(frameRate:)usingswift-async-algorithms. - Photosensitivity safety limiter (
HueSafeFrameLimiter) capping transitions below 5 Hz and enforcing 80% maximum component limits by default.
- Spatial effect primitives mapped to room coordinates (
HueEntertainmentAudio:- Real-time C11 atomic seqlock mailbox (
HueAudioFeatureMailbox) for zero-allocation, lock-free feature publication from audio render threads. - Snapshot extraction of RMS, peak, transient strength, and 8-band spectral energy.
- Real-time C11 atomic seqlock mailbox (
HueEntertainmentTesting:- Mock HTTP and DTLS transports (
MockHueHTTPTransport,MockHueDTLSTransport) for offline unit testing without physical bridge hardware.
- Mock HTTP and DTLS transports (
hue-entertainment-diagnostics:- Read-only command-line tool for network bridge discovery and configuration inspection.
- Reference AUv3 audio-reactive example projects for macOS and tvOS.
Security
- Strict TLS certificate chain validation using embedded Signify Hue Bridge root CAs.
- Certificate common name validation matching discovered bridge ID (no insecure trust mode or trust-on-first-use).
- Complete redaction of credentials in string descriptions and logs (
HueCredentials(redacted)). - Refusal to preempt active streams owned by other applications (
.failIfActive).