If a target address is configured for a universe, use it directly
instead of looking for discovered nodes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Multi-port ArtNet devices (like PD8000) send separate ArtPollReply
packets for each group of 4 ports. Previously we overwrote universes
on each reply; now we accumulate them.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Log when GetNodesForUniverse finds no matching nodes
- Use pkt.Port (from ArtPollReply) instead of UDP source port
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Similar to sACN pcap receiver, allows receiving ArtNet packets without
binding to port 6454. Use --artnet-pcap=any to enable.
The BPF filter "udp port 6454" captures packets where src OR dst is
6454, so we also catch ArtPollReply responses sent from port 6454.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add 255.255.255.255 (limited broadcast) and 2.255.255.255 (classic
ArtNet subnet) to the auto-detected broadcast list.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Make --artnet-broadcast default to "auto" so broadcast works out of box
- Add consistent [category] prefixes to all log messages
- Change discovery logs from [discovery] to [artnet] since it's protocol-specific
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Accepts comma-separated list of addresses or 'auto'
- Auto-detection calculates broadcast from all network interfaces
- Used as fallback when no per-universe target or discovered nodes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New -sacn-pcap flag uses packet capture instead of binding port 5568.
This allows running alongside other software using the sACN port.
- Captures both incoming and outgoing packets (same-host sender support)
- Requires root/sudo for packet capture privileges
- Use "auto" for automatic interface detection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Config changes:
- Use protocol prefixes in addresses: "sacn:64:361-450" -> "artnet:0.0.0:1"
- Remove separate from_proto/proto fields
- Targets now include protocol: universe = "artnet:0.0.0"
CLI changes:
- Rename --listen to --artnet-listen (empty to disable)
- Fix --debug help text
Logging changes:
- Use [<-proto] and [->proto] prefixes for direction
- Consistent lowercase key=value format
- Refactor duplicate send code into sendOutputs()
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>