Skip to main content

ScreamRouter audio routing system with web interface and C++ audio engine

Project description

ScreamRouter

License: AGPL-3.0 Python 3.10+ FastAPI WebRTC WHEP C++ pybind11 Docker

The real‑time router for your whole‑home, studio, and lab audio.

ScreamRouter brings together a pro‑grade C++ audio engine and a friendly web UI so you can route, mix, and monitor audio across your network with confidence. Bridge Scream, RTP, and local capture, apply EQ and delay per stream, and listen from any browser with low‑latency WebRTC.

Overview

  • One router for heterogeneous audio: Scream, RTP, PulseAudio (native protocol), local capture, and browsers — all in one place.
  • Per‑stream control: volume, delay, time‑shift, EQ, speaker mapping — at source, route, or sink level.
  • Designed for real‑time: jitter‑aware buffering, resync controls, and WHEP WebRTC for low‑latency monitoring.
  • Ready for busy homes and labs: discovery, grouping, multi‑device RTP, live logs, stats, and hot reconfig.
  • Extensible: plugins for new sources, ALSA PCM plugin for native apps, and noVNC to drive hosts.

What You Can Do

  • Drive multi‑room audio while keeping rooms in sync.
  • Downmix 5.1 → stereo for phones or upmix stereo → multi-speaker layouts.
  • Monitor any route from your browser with low latency (WHEP).
  • Inject URLs (streams, files) directly into a sink or group.
  • Route per-process audio from a desktop to any room.
  • Inspect, tune, and recover issues quickly with live logs and stats.
  • Scrub and export the last five minutes of PCM from any source with the browser-based timeshift editor.

Get Started in 2 Minutes

Linux (host networking, best for multicast):

docker run -d --network host \
  -v $PWD/config:/app/config \
  -v $PWD/logs:/app/logs \
  -v $PWD/cert:/app/cert \
  --name screamrouter \
  netham45/screamrouter:latest
# Open https://<host>/site (self‑signed TLS on first run)

Portable (port mapping; multicast discovery limited):

docker run -d \
  -p 443:443 -p 16401:16401/udp -p 40000:40000/udp \
  -v $PWD/config:/app/config -v $PWD/logs:/app/logs -v $PWD/cert:/app/cert \
  --name screamrouter \
  netham45/screamrouter:latest

Note: Expose the UI only on trusted networks. For Internet access, place ScreamRouter behind a reverse proxy (TLS + auth) and restrict UDP ingress to the ports you actually use.

Who Is It For?

  • Home integrators: whole‑home audio with room groups, EQ per zone, and browser monitors.
  • Streamers/podcasters: low‑latency monitoring and quick route swaps.
  • AV/lab engineers: matrix tests, multi‑device RTP mapping, rapid troubleshooting.
  • Developers: clean APIs, plugin hooks, and a React SPA for rich control.

Images and diagrams: images/ScreamRouter.png

Learn More

  • Why ScreamRouter? See below.
  • Screenshots: a quick tour of the UI.
  • Deep dive: full architecture, APIs, settings, and configuration details.

Table of Contents

  • Product Overview
  • Get Started in 2 Minutes
  • Who Is It For?
  • Screenshots
  • Why ScreamRouter?
  • Architecture Overview
  • At‑a‑Glance Capabilities
  • Feature Highlights
  • Deep Dive
    • Backend Runtime
    • Configuration Management
    • APIs (Backend)
    • Streaming & WebSockets
    • WebRTC Lifecycle
    • VNC Proxy & Website
    • Plugin System
    • Utilities
    • Logging
    • Frontend (React)
    • ALSA PCM Plugin
    • Running & Build Details
    • Quick Starts by Persona
    • Configuration Files & Examples
    • Tuning Guide
    • Security & Deployment Hardening
    • API Usage Examples
    • License

Architecture Overview

  • Core: C++ audio engine (pybind11 module screamrouter_audio_engine) for low‑latency DSP, mixing, buffering, and transport.
  • Control plane: Python FastAPI application for configuration, APIs, WebSockets, WebRTC signaling, logging, discovery, and serving the site.
  • Frontend: React (Chakra UI) single‑page app, compiled into site/ and served under /site.
  • Discovery: mDNS discovery (Zeroconf) and PTR responder, optional NTP micro‑server for time features.
  • Plugins: Python plugin system for new sources/actions (e.g., play URL via ffmpeg).
  • Protocols: Scream (UDP), RTP, system audio endpoints, MP3 over HTTP/WebSocket, WebRTC (WHEP) for browser playback.

Why ScreamRouter?

  • One router for heterogeneous audio: bridge Scream, RTP, local capture, and browsers without vendor lock‑in.
  • Per‑entity DSP, not all‑or‑nothing: independent volume, delay, EQ, timeshift, and speaker mapping at source/route/sink levels.
  • Designed for real‑time: jitter‑aware timeshifts, resync controls, and WHEP for low‑latency browser monitoring.
  • Operational visibility built‑in: live logs viewer, engine stats, structured settings, and configuration diffs over WebSocket.
  • Extensible at the edges: plugin API for new sources or behaviors; ALSA PCM to plug native apps; noVNC to drive sources.

Comparison

How ScreamRouter stacks up against common options (out‑of‑the‑box):

Capability ScreamRouter Snapcast AirPlay (RAOP) PipeWire Remote
Multi‑protocol routing (Scream, RTP, system audio) ✗ (single server stream) △ (advanced setup)
Per‑entity volume / delay / EQ / time‑shift ✓ (source/route/sink) △ (per‑stream volume) △ (volume) △ (graph‑based)
Browser monitoring (WebRTC WHEP, sub‑second)
MP3 per‑sink web stream
Plugin framework (URL playback, extensible sources)
Live logs, stats, settings APIs △ (limited) △ (CLI tools)
Discovery + PTR + NTP helper △ (some zeroconf) △ (Bonjour only)
ALSA PCM plugin for native apps N/A (core audio graph)
Multi‑device RTP mapping △ (expert)
Temporary WebRTC sinks (no config churn)
Built‑in web UI & admin △ (community UIs)

Notes:

  • “△” indicates partial/indirect support or requires advanced, external tooling.
  • AirPlay excels at consumer playback within Apple’s ecosystem but isn’t a general router. Snapcast delivers great multiroom sync for a single upstream. PipeWire is a superb local audio graph; cross‑network routing requires additional components.

At‑a‑Glance Capabilities

  • Ingest: Scream senders (Windows/Linux/ESP32), RTP senders, per‑process sources, local capture devices, and plugin‑driven streams.
  • Distribute: network sinks (Scream/RTP), browser listeners (MP3/WebRTC), or local system audio endpoints.
  • Process: per‑entity volume/delay/timeshift/EQ; global DSP tunables; speaker layout matrices for up/down‑mix.
  • Coordinate: device discovery via mDNS; PTR hostname binding; optional NTP and time sync features for multi‑sink alignment.
  • Operate: log aggregation and live streaming, preferences persistence, robust hot‑reload of configs, plugin lifecycle.
  • Develop: full React SPA with live updates and hot module reload, WebRTC managers, stats/telemetry surfaces.

Architecture

  • screamrouter/__main__.py boots a FastAPI app, initializes the C++ AudioManager, wires subsystems, sets TLS, and runs uvicorn.
  • screamrouter/constants/constants.py resolves directories/ports (root/non‑root/Windows aware), maps CLI args → env vars, and centralizes tunables.
  • screamrouter/configuration/ owns YAML config parsing, “solve and apply” orchestration to the C++ engine, background tasks, system audio inventory, and discovery.
  • screamrouter/api/ exposes HTTP and WebSocket APIs: configuration CRUD and live updates, streaming (MP3), WebRTC (WHEP), VNC proxy, logs viewer, system stats, and preferences.
  • screamrouter/plugin_manager/ hosts the plugin framework with built‑in plugins like Play URL (ffmpeg) and multi‑URL playback.
  • screamrouter/utils/ provides mDNS tools, PTR responder, tiny NTP server, and a minimal VNC client.
  • screamrouter-react/ is the React app (Chakra UI), built into site/ and mounted at /site.
  • alsa_plugin/ contains an ALSA PCM plugin to expose ScreamRouter loopback taps via FIFOs.

High‑Level Architecture

┌──────────────────────────────────────────────────────────────────────┐
│                              ScreamRouter                             │
│                                                                      │
│  Sources                Control Plane (FastAPI)            Sinks     │
│  ───────                ─────────────────────────          ─────     │
│  • Scream senders  →    Config CRUD / WS diffs     →      • Scream   │
│  • RTP senders     →    WHEP (WebRTC) signaling   →      • RTP       │
│  • System capture  →    Logs / Stats / Settings   →      • System    │
│  • Plugins (ffmpeg)→    Site / VNC proxied UI     →      • Web (MP3) │
│                                                                      │
│                      C++ Audio Engine (pybind11)                      │
│         Mix / EQ / Timeshift / Sync / Encode / Transport             │
└──────────────────────────────────────────────────────────────────────┘

Feature Highlights

  • Routing: define routes from sources to sinks, with per‑level enable/disable, volume, delay, timeshift, EQ, and speaker layouts.
  • Sources: Scream (UDP), RTP, capture/process sources, plugin‑generated sources (e.g., ffmpeg), group sources, VNC metadata support.
  • Sinks: network receivers (Scream, RTP), MP3 stream, system audio sinks, temporary WebRTC sinks for listening; grouping and multi‑device (RTP) mapping.
  • Processing: low‑latency mixer, EQ (18‑band), normalization, soft‑clip, DC filter, oversampling, per‑stream timeshift buffers.
  • Discovery: mDNS discovery (sources/sinks), manual PTR responder aligned to certificate SAN, and settings pinger/advertiser.
  • Browser playback: MP3 HTTP/WebSocket stream per sink; WebRTC (WHEP) low‑latency path with ICE trickle and heartbeats.
  • Logs: per‑module rolling logs, C++ log forwarding into Python loggers, live logs viewer via WebSocket.
  • Preferences: persisted JSON preferences with schema validation and partial updates.
  • Frontend: drag‑drop full menu, add/edit dialogs for sources/sinks/routes/groups, equalizer UI, visualizer, VNC, stats, discovery, and a listen page.
  • ALSA: custom ALSA PCM plugin to bridge apps to FIFOs under $XDG_RUNTIME_DIR/screamrouter (falls back to /var/run/screamrouter if the runtime dir is missing).
  • Windows desktop menu: Windows hosts automatically spawn a WebView2 overlay + tray icon that renders /site/DesktopMenu with transparent mouse-through regions and a quick Exit action (the build auto-fetches the Microsoft Edge WebView2 SDK via nuget.exe; override with WEBVIEW2_SDK_DIR if you already have the package). Swap the tray icon by replacing src/audio_engine/windows/resources/screamrouter.ico before building on Windows.

Screenshots

Dashboard

Sources Sinks Routes

Add Source Add Sink Add Route Add Group

Equalizer Equalizer Presets Dark Mode VNC

Directory Map

  • Backend (Python)
    • screamrouter/__main__.py — app bootstrap, TLS, uvicorn, mDNS PTR, NTP, AudioManager init, routers
    • screamrouter/constants/constants.py — env/paths/tunables (API_HOST/PORT, logs, certs, config paths, etc.)
    • screamrouter/configuration/ — configuration_manager.py (solve/apply, temp entities, system device inventory), configuration_solver.py, temporary_entity_manager.py
    • screamrouter/api/ — REST + WebSockets (see API Reference below)
    • screamrouter/plugin_manager/ — plugin_manager.py, screamrouter_plugin.py, built‑ins in screamrouter/plugins/
    • screamrouter/utils/ — mdns responders/pingers, NTPServerProcess, SimpleVNCClient, helpers
    • screamrouter/screamrouter_types/ — pydantic models and annotations
  • Frontend (React)
    • screamrouter-react/ — sources, pages, contexts, WebRTC libs, webpack config
    • Built assets emitted into site/, copied to screamrouter/site/ by setup.py build_react
  • Audio engine
    • src/audio_engine/ — C++ (built by CMake via setup.py; pybind11 module screamrouter_audio_engine)
    • screamrouter_audio_engine.pyi — generated type stubs
  • ALSA plugin
    • alsa_plugin/ — shared module and Makefile to install pcm_screamrouter
  • Container & packaging
    • docker/ — Dockerfile, compose, run scripts
    • setup.py, pyproject.toml — modular build system for C++ + React + Python packaging

Backend Runtime

Entry point: screamrouter/main.py:1

  • CLI arguments map to env vars (fallbacks in constants):

    • --api-host (API_HOST, default 0.0.0.0), --api-port (API_PORT, default 443 as root or 8443 otherwise)
    • --scream-receiver-port, --scream-per-process-receiver-port, --rtp-receiver-port, --sink-port
    • Paths: --logs-dir, --config-path, --equalizer-config-path, --certificate, --certificate-key
    • Logging: --console-log-level, --log-to-file, --log-entries-to-retain, --show-ffmpeg-output
    • Site: --npm-react-debug-site (use local dev server)
    • Desktop menu: --desktop-menu-only (Windows overlay only, skip everything else), --desktop-menu-url (override overlay target)
    • Audio: --timeshift-duration, --configuration-reload-timeout
  • TLS: self‑signed certificate auto‑generated if cert/key missing, including SANs for local usage.

  • Audio engine: imports and builds screamrouter_audio_engine if not found, then initializes AudioManager with RTP listen port and global timeshift buffer.

  • Services: starts ManualPTRResponder (mDNS PTR based on TLS SAN), starts an NTP micro‑server, and bootstraps all API routers.

  • App lifecycle: background tasks on startup for configuration and WebRTC maintenance; graceful shutdown paths on SIGINT.

Command Line

python -m screamrouter \
  --api-host 0.0.0.0 \
  --api-port 443 \
  --scream-receiver-port 16401 \
  --rtp-receiver-port 40000 \
  --sink-port 4010 \
  --logs-dir /var/log/screamrouter/logs/ \
  --console-log-level INFO \
  --log-to-file True \
  --certificate /etc/screamrouter/cert/cert.pem \
  --certificate-key /etc/screamrouter/cert/privkey.pem \
  --config-path /etc/screamrouter/config.yaml \
  --equalizer-config-path /etc/screamrouter/equalizers.yaml

All flags map to environment variables via constants. Non‑root defaults use user config under ~/.config/screamrouter and port 8443.

Configuration Management

Files: screamrouter/configuration/configuration_manager.py:1, screamrouter/screamrouter_types/configuration.py:1

  • Loads/saves YAML (CONFIG_PATH) with SourceDescription, SinkDescription, RouteDescription models.
  • Solves config deltas and applies to the C++ engine via AudioEngineConfigApplier.
  • Tracks system audio devices (SystemAudioDeviceInfo) and exposes them to the frontend.
  • Discovery: maintains discovered_devices, aggregates snapshots across methods, and exposes add‑discovered APIs.
  • Temporary entities: creates ephemeral sinks and routes to support listening (WebRTC) without mutating saved config.
  • WebSocket config broadcast: APIWebsocketConfig.broadcast_config_update diffs last vs current and pushes minimal updates to /ws/config.

How configuration is applied

  • Config mutations are serialized with a semaphore, and background tasks signal reloads.
  • The manager computes a “solved” configuration snapshot and compares it to the previous one to determine which underlying engine objects to create/update/remove.
  • Volume/EQ changes can be applied without full reconfiguration (handled via a dedicated condition variable).
  • Temporary entities are flagged (is_temporary) and excluded from persistence and some broadcasts.

System audio registry

  • Linux ALSA devices are periodically polled into system_capture_devices and system_playback_devices (card/device indices, channel/rate support, presence), broadcast to clients and available over REST.

Core Models (selected)

  • SourceDescription (endpoint or group)

    • name, ip or tag (per‑process), enabled, is_group, group_members[]
    • Processing: volume, delay, timeshift, equalizer, speaker_layouts{inputChannels->matrix}, vnc_ip, vnc_port
    • Optional capture hints: channels, sample_rate, bit_depth (for capture/system inputs)
  • SinkDescription (endpoint or group)

    • Network/system: ip, port, protocol (scream, rtp, rtp_opus, system_audio, web_receiver)
    • enabled, is_group, group_members[], volume, delay, timeshift, equalizer, speaker_layouts{}
    • Format: bit_depth, sample_rate, channels, channel_layout
    • Sync: time_sync, time_sync_delay
    • Extra: config_id (GUID), use_tcp, enable_mp3
    • RTP multi‑device: multi_device_mode, rtp_receiver_mappings[] { receiver_sink_name, left_channel, right_channel } (supported on rtp and rtp_opus sinks)
  • RouteDescription

    • name, source, sink, enabled, volume, delay, timeshift, equalizer, speaker_layouts{}, config_id
  • Equalizer (18 bands, normalization toggle)

  • SpeakerLayout (8x8 matrix per input channel count, auto_mode or manual matrices; composable)

APIs (Backend)

Configuration (REST)

  • Sinks

    • GET /sinks — List permanent sinks
    • POST /sinks — Create sink (SinkDescription JSON)
    • PUT /sinks/{old_sink_name} — Update sink (partial allowed)
    • DELETE /sinks/{sink_name} — Delete sink
    • GET /sinks/{sink_name}/enable|disable — Toggle
    • GET /sinks/{sink_name}/volume/{v} — Set volume 0.0–1.0
    • GET /sinks/{sink_name}/delay/{ms} — Set delay ms
    • GET /sinks/{sink_name}/timeshift/{sec} — Set timeshift seconds
    • POST /sinks/{sink_name}/equalizer — Set equalizer
    • GET /sinks/{sink_name}/reorder/{index} — Reorder
    • GET /sinks/rtp_compatible — Filter sinks protocol==rtp (non‑groups)
  • Sources

    • GET /sources — List
    • POST /sources — Create
    • PUT /sources/{old_source_name} — Update
    • DELETE /sources/{source_name} — Delete
    • GET /sources/{source_name}/enable|disable — Toggle
    • GET /sources/{source_name}/volume/{v} — Set volume
    • GET /sources/{source_name}/delay/{ms} — Set delay
    • GET /sources/{source_name}/timeshift/{sec} — Set timeshift
    • POST /sources/{source_name}/equalizer — Set equalizer
    • GET /sources/{source_name}/play|nexttrack|prevtrack — Control
    • GET /sources/{source_name}/reorder/{index} — Reorder
    • POST /sources/add-discovered — Promote discovered source ({device_key})
  • Routes

    • GET /routes — List
    • POST /routes — Create
    • PUT /routes/{old_route_name} — Update
    • DELETE /routes/{route_name} — Delete
    • GET /routes/{route_name}/enable|disable — Toggle
    • GET /routes/{route_name}/volume/{v} — Set volume
    • GET /routes/{route_name}/delay/{ms} — Set delay
    • GET /routes/{route_name}/timeshift/{sec} — Set timeshift
    • POST /routes/{route_name}/equalizer — Set equalizer
    • GET /routes/{route_name}/reorder/{index} — Reorder

Discovery & Devices

  • GET /mdns/devices — Current mDNS snapshot
  • GET /discovery/snapshot — Unified discovery view (mDNS + others)
  • GET /system_audio_devices — Host capture/playback devices snapshot
  • POST /sinks/add-discovered — Promote discovered sink ({device_key})

Equalizers (library)

  • POST /equalizers/ — Save by name (Equalizer with name)
  • GET /equalizers/ — List saved equalizers
  • DELETE /equalizers/{name} — Remove saved equalizer

Preferences

  • GET /preferences — Read (Preferences model)
  • PUT /preferences — Partial update; deeply merged & validated

System & Engine

  • GET /api/system/info — Host/process info, uptime, load avg, memory, process stats
  • GET /api/stats — Audio engine stats (global, per stream/source/sink)
  • GET /api/settings — Audio engine settings
  • POST /api/settings — Update partial settings
  • Timeshift buffer exports:
    • GET /api/timeshift/{source_tag}?lookback_seconds=300 — Raw PCM dump of the per-source rolling buffer (headers include sample rate, channels, bit depth, duration, and packet ages)

Audio engine settings schema

  • Timeshift Tuning
    • cleanup_interval_ms — background cleanup interval for timeshift buffers
    • late_packet_threshold_ms — classification threshold for late packets
    • target_buffer_level_ms — steady-state target buffer depth
    • loop_max_sleep_ms — main loop sleep cap to reduce wakeups
    • max_catchup_lag_ms — cap for rate catch-up when running behind
    • max_clock_pending_packets — queue depth guard for clock packets
  • Mixer Tuning
    • mp3_bitrate_kbps, mp3_vbr_enabled, mp3_output_queue_max_size — MP3 encoder behavior for web streams
    • underrun_hold_timeout_ms — grace period before resuming after underruns
    • max_input_queue_chunks, min_input_queue_chunks — source queue sizing
    • max_ready_chunks_per_source — limiter for mixer ready queue
  • Source Processor Tuning
    • command_loop_sleep_ms — control loop interval for source processors
  • Processor Tuning
    • oversampling_factor — internal oversampling for processing
    • volume_smoothing_factor — smoothing of volume changes
    • dc_filter_cutoff_hz — DC offset filter
    • normalization_target_rms, normalization_attack_smoothing, normalization_decay_smoothing — loudness normalization behavior
    • dither_noise_shaping_factor — dithering characteristics
  • Synchronization
    • enable_multi_sink_sync — when supported by sinks/paths, synchronize multiple endpoints
  • Synchronization Tuning
    • barrier_timeout_ms, sync_proportional_gain, max_rate_adjustment, sync_smoothing_factor — parameters for multi‑sink barrier and rate control

Streaming & WebSockets

  • MP3 per sink:
    • GET /stream/{sink_ip}/ — HTTP MP3 stream
    • WS /ws/{sink_ip}/ — WebSocket MP3 stream
  • Config updates: WS /ws/config — JSON diff push: sources/sinks/routes/system devices + removals
  • Log viewer:
    • GET /api/logs — list files in LOGS_DIR
    • WS /ws/logs/{filename}/{initial_lines} — stream tail with pause/resume
  • WebRTC listening (WHEP):
    • POST /api/whep/{sink_id} — WHEP offer (Content‑Type: application/sdp), 201 with answer and Location header
    • PATCH /api/whep/{sink_id}/{listener_id} — trickle client ICE candidates (application/json)
    • GET /api/whep/{sink_id}/{listener_id}/candidates — poll server ICE candidates (JSON)
    • POST /api/whep/{sink_id}/{listener_id} — heartbeat
    • DELETE /api/whep/{sink_id}/{listener_id} — stop listener
  • Temporary listener helpers:
    • POST /api/listen/source/{source_id}/setup — create temp sink/route for a source
    • POST /api/listen/route/{route_id}/setup — temp sink/route for an existing route
    • DELETE /api/listen/temporary/{sink_id} — cleanup temp WebRTC sink/routes

WebRTC WHEP lifecycle

  1. Client creates RTCPeerConnection (recvonly audio), makes offer, POSTs SDP to /api/whep/{sink_id}
  2. Backend:
    • Resolves {sink_id} → sink config_id when needed
    • Registers listener and callbacks in C++ engine (on_local_description, on_ice_candidate)
    • Responds 201 with SDP answer and Location: /api/whep/{sink_id}/{listener_id}
  3. Client PATCHes ICE candidates as they appear; backend queues into engine
  4. Backend buffers server ICE candidates; client polls GET .../candidates
  5. Heartbeats keep sessions alive; background task prunes stale listeners (>15s inactivity)
  6. DELETE to the location URL terminates the session and cleans up any temporary entities

VNC Proxy & Website

  • GET /site/vnc/{source_name} — VNC dialog
  • WS /ws/vnc/{source_name} — WebSocket proxy to VNC TCP (noVNC under /site/noVNC)
  • Static site: /site (SPA), /site/static, /favicon.ico, and React dev proxy if NPM_REACT_DEBUG_SITE=true.

noVNC and native proxy

  • The noVNC assets ship in site/noVNC and are mounted as static files.
  • /ws/vnc/{source_name} accepts WS connections and bridges TCP to the configured vnc_ip/vnc_port for that source with robust lifecycle and backpressure handling.

Plugin System

Files: screamrouter/plugin_manager/plugin_manager.py:1, screamrouter/plugins/

  • Base class ScreamRouterPlugin hosts lifecycle hooks: start/load/unload/stop. Plugins may export temporary/permanent sources, declare endpoints on startup, and integrate with the audio engine instance.
  • Built‑in plugins:
    • play_url: POST /sinks/{sink_name}/play_one/{volume} with { "url": "http(s)://... or file:///..." } — spawns ffmpeg, injects PCM into engine as a temporary source tagged per instance; manages lifecycle via SIGCHLD.
    • play_url_multiple: concurrent URL playback per unique instance ID, each with its own ffmpeg process and injection path.
  • Requirements: ffmpeg available on PATH; constants.SHOW_FFMPEG_OUTPUT to include output in logs.

Plugin authoring tips

  • Use plugin_start(self.api, audio_manager_instance) to register REST endpoints and retain the engine handle.
  • Use temporary sources to make ephemeral producers that are auto‑removed when playback stops.
  • For multi‑instance patterns, generate unique instance IDs/tags and thread names for tracing.

Utilities

  • ManualPTRResponder (screamrouter/utils/mdns_ptr_responder.py:1): manual responder for mDNS PTR queries mapping A.B.C.D.in-addr.arpa.hostname.local.. Hostname derived from certificate SAN/CN.
  • MDNSResponder, MDNSPinger, MDNSSettingsPinger, ScreamAdvertiser: advertise and discover devices/services.
  • NTPServerProcess: minimal NTP server for local timestamping/time sync workflows.
  • SimpleVNCClient: minimal RFB client sufficient to send key events.

Logging

Files: screamrouter/screamrouter_logger/screamrouter_logger.py:1

  • Root logger and per‑module loggers with console and rotating file handlers (LOGS_DIR).
  • C++ log forwarding via screamrouter_audio_engine.get_cpp_log_messages(timeout_ms=...) on a background thread; routed to dedicated Python loggers per C++ source file.
  • Live viewer via APILogViewer: list logs and stream append lines over WebSocket.

Frontend (React)

Location: screamrouter-react/

  • Stack: React 18, TypeScript, Chakra UI, Framer Motion, butterchurn visualizer, react‑router. Compiled with webpack; output to site/.
  • Site mount: served at /site by FastAPI. Dev mode: set NPM_REACT_DEBUG_SITE=true and run npm start in screamrouter-react to proxy assets (including a WebSocket proxy on /ws for webpack HMR).
  • Major pages/components:
    • Full menu dashboard and desktop menu with drag/drop and search (components/fullMenu/*)
    • Add/Edit dialogs: sources, sinks, routes, groups; equalizer modal with 18 bands + presets library
    • Stats page (engine stats via /api/stats), Settings editor (/api/settings)
    • Visualizer page (butterchurn), VNC page (noVNC embed), Process list (per‑process discovery), Speaker layout editor
    • Listen page: creates temporary WebRTC sinks or uses existing sinks; establishes WHEP connections with ICE trickle + heartbeat
    • Discovery UI: mDNS/unified snapshot, promote discovered devices
  • Data flow:
    • Initial state fetch (sources/sinks/routes/system devices), then live updates from WS /ws/config (diff/push model)
    • API client in src/api/api.ts wraps REST/WebSocket endpoints; includes Preferences and Discovery helpers
    • WebRTC managers: legacy WebRTCManager and EnhancedWebRTCManager for robust session handling, stats, and reconnection
  • Theming: Chakra theme in src/theme.ts, dark mode styles in src/styles/darkMode.css.

Data/State architecture

  • src/api/api.ts: Axios client + WS bootstrap (/ws/config); strongly typed models mirror backend
  • Contexts:
    • AppContext — global lists, selection, modal state, listen helpers (including temp listener orchestration)
    • WebRTCContext and EnhancedWebRTCContext — expose status, streams, errors, stats, and control methods
    • MdnsDiscoveryContext and TutorialContext — discovery UX and onboarding
  • WebRTC components
    • lib/webrtc/WebRTCManager — single‑session manager (with server ICE polling fix)
    • lib/webrtc/EnhancedWebRTCManager — multi‑session, stats, heartbeats, robust reconnection hooks
  • Pages
    • Add/Edit Source/Sink/Route/Group, Equalizer, Stats, Visualizer, VNC, Process List, Speaker Layout, Listen

Speaker layouts (matrix)

  • For a given input channel count, define an 8x8 matrix to map/mix channels to outputs (downmix/upmix).
  • auto_mode=true chooses identity/automatic mapping; manual matrices multiply when chained.

ALSA PCM Plugin

Location: alsa_plugin/

  • Provides pcm.screamrouter via ALSA IO‑plug. When an application opens screamrouter:<name>, the plugin creates FIFOs under $XDG_RUNTIME_DIR/screamrouter (fallback /var/run/screamrouter) and mirrors the stream:
    • Playback FIFO: $XDG_RUNTIME_DIR/screamrouter/out.<label>.<rate>Hz.<channels>ch.<bits>bit.<format>
    • Capture FIFO: $XDG_RUNTIME_DIR/screamrouter/in.<label>.<rate>Hz.<channels>ch.<bits>bit.<format>
  • Build and install (requires ALSA dev headers): make && sudo make install (honors PREFIX, DESTDIR, DEVICE_DIR, SOUND_GROUP). Ensure the runtime dir exists and is writable by your audio group.
  • Usage examples:
    • aplay -D screamrouter:monitor sample.wav
    • arecord -D screamrouter:music -f cd out.wav

Under the hood

  • The module registers pcm_type.screamrouter and a bootstrap pcm.screamrouter so that screamrouter:<name> resolves dynamically.
  • FIFOs are created on open and torn down on close; the IO‑plug decouples app timing from FIFO backpressure.

Running

From source (development)

  • Python 3.12+, system packages: openssl and libmp3lame runtime suggested (for MP3 encode/playback).
  • Install Python deps: pip install -r requirements.txt
  • Build C++ engine and React site with packaging workflow (optional, but recommended): python -m pip install -e . (runs CMake + build_react)
  • Or run directly and let the module attempt to build the engine in‑place: python -m screamrouter
    • Certificates auto‑generated into CERTIFICATE/CERTIFICATE_KEY if missing.
    • Open https://:<API_PORT>/site/ (self‑signed TLS).

Build details (packaging)

  • setup.py customizes three stages:
    • build_react: runs npm install + build in screamrouter-react/, then copies site/ into screamrouter/site/
    • build_ext: invokes a modular CMake/Ninja toolchain via build_system to build C++ third‑party deps and the pybind11 module; uses ccache when available
    • bdist_wheel: supports cross‑compilation tags via SCREAMROUTER_PLAT_NAME or parsed from CC
  • Generated stubs: pybind11-stubgen emits screamrouter_audio_engine.pyi

Docker

  • See docker/Dockerfile and docker/docker-compose.yml. For multicast (Scream, mDNS) use --network host on Linux.
  • Mount persistent volumes for /app/config, /app/logs, /app/cert. TLS is auto‑generated on first run if absent.

Systemd (example)

  • Adapt service/screamrouter.service to your install path. Prefer screamrouter console entry (python -m screamrouter), not legacy paths.

Quick Starts by Persona

Home integrator (whole‑home audio)

  • Deploy container with --network host (Linux). Add Scream/RTP senders (PCs, ESP32). Configure sinks per room, group them, and set time_sync=true for multi‑room playback. Use the UI to route sources to groups; store favorite EQ presets.

Streamer/Podcaster (monitor mixes)

  • Add a system capture source or per‑process tag for your DAW/VOIP. Create a "Monitor" WebRTC sink and open /site/listen/sink/Monitor in a browser; keep latency low via WHEP while adding route‑level delay for lip‑sync.

Lab/AV engineer (test matrices)

  • Use a synthetic plugin or URL playback to feed pink noise per channel. Define speaker layout matrices to exercise downmix/upmix paths and validate receiver channel wiring via isolated routes.

Developer (extend behavior)

  • Scaffold a plugin in screamrouter/plugins/, register in PluginManager, and expose a REST route that injects PCM into the engine (see play_url). Iterate with live UI updates and watch logs over /ws/logs/all.log/500.

Configuration Files

Primary config (YAML)

  • Default path: CONFIG_PATH from constants. Managed by the backend; also editable via APIs.
  • Models are SourceDescription, SinkDescription, RouteDescription. Example snippets:
sources:
  - name: "Office PC"
    ip: 192.168.1.50
    enabled: true
    vnc_ip: 192.168.1.50
    vnc_port: 5900
    equalizer: { b1: 1.0, b2: 1.0, ..., normalization_enabled: true }

sinks:
  - name: "Bedroom"
    ip: 192.168.1.60
    port: 4010
    protocol: scream
    sample_rate: 48000
    channels: 2
    channel_layout: stereo
    time_sync: false

routes:
  - name: "Office to Bedroom"
    source: "Office PC"
    sink: "Bedroom"
    enabled: true
    volume: 0.8

Equalizers library

  • EQUALIZER_CONFIG_PATH stores named EQ presets. Managed by /equalizers/ API.

Preferences

  • JSON, path from PREFERENCES_PATH, managed via /preferences with deep merge + validation.

Environment Variables and Defaults

Defined in screamrouter/constants/constants.py:1

  • Networking: API_HOST, API_PORT, SCREAM_RECEIVER_PORT, SCREAM_PER_PROCESS_RECEIVER_PORT, RTP_RECEIVER_PORT, SINK_PORT
  • Paths: LOGS_DIR, CONFIG_PATH, EQUALIZER_CONFIG_PATH, CERTIFICATE, CERTIFICATE_KEY
  • Logging: CONSOLE_LOG_LEVEL (DEBUG/INFO/WARNING/ERROR), LOG_TO_FILE, LOG_ENTRIES_TO_RETAIN, SHOW_FFMPEG_OUTPUT
  • Frontend: NPM_REACT_DEBUG_SITE (proxy assets to webpack dev server)
  • Audio: TIMESHIFT_DURATION, CONFIGURATION_RELOAD_TIMEOUT

Platform‑specific defaults

  • Linux root: config under /etc/screamrouter, logs under /var/log/screamrouter/logs, certs under /etc/screamrouter/cert, default HTTPS 443
  • Linux non‑root/macOS: config under ~/.config/screamrouter, default HTTPS 8443
  • Windows: %APPDATA%\screamrouter, default HTTPS 8443

Security Notes

  • TLS: self‑signed cert created unless provided; browsers will warn until trusted. SANs include hostnames and loopback for local dev.
  • CORS: the site mounts with permissive CORS to support dev tooling. Restrict as needed for production.
  • WebRTC: WHEP endpoints accept offers over HTTPS, with ICE trickle via PATCH/GET; consider TURN for NAT traversal.

Troubleshooting

  • Engine import/build issues: ensure CMake ≥3.14, a C++ compiler, and pybind11 are installed. python -m pip install -e . to force a clean build.
  • No audio in browser:
    • For MP3, check GET /stream/{sink_ip}/ returns data and enable_mp3 is true on the sink.
    • For WebRTC, verify /api/whep/{sink_id} returns 201 + Location and ICE candidates flow; TURN/STUN reachable.
  • Discovery not working: ensure host networking for Docker and that mDNS traffic is permitted.
  • VNC: verify vnc_ip/vnc_port on the Source and the TCP port is reachable from the host.
  • Logs: use GET /api/logs and WS /ws/logs/... to watch live. C++ messages appear under screamrouter.cpp_audio_engine.<file>.log.

Hot reload & lockups

  • If config changes seem stuck, check the configuration semaphore is not held by long operations (look for warnings in logs). Try a controlled restart.
  • Verify LOGS_DIR is writable; many operations log errors there.

Multicast issues (Docker/Windows)

  • Use host networking on Linux; Windows Docker lacks host networking — map ports and expect multicast‑based discovery not to function.

Development Guide

  • React: cd screamrouter-react && npm install && npm start (serves on http://localhost:8080). Set NPM_REACT_DEBUG_SITE=true to proxy from the backend.
  • Packaging build: python -m pip install -e . runs React build and C++ build, then installs the Python package in editable mode.
  • Code style: Python uses pydantic models and FastAPI; keep changes targeted and consistent with existing patterns.
  • Extending: add plugins under screamrouter/plugins/ and register in PluginManager. Expose routes in plugin’s start_plugin.

Recipes & Use‑Cases

Multi‑room playback with time alignment

  • Configure sinks with time_sync=true and tune synchronization_tuning to minimize rate drift.
  • Route a single source to multiple sinks; use route‑level delay to fine‑trim positions.

Per‑process audio routing from a desktop

  • Use a per‑process discovery method (tag) to group processes into a friendly SourceDescription and route them to zones.

Emergency TTS override

  • Create a plugin or use Play URL to enqueue alert TTS MP3; temporarily raise route/sink volume normalization target to ensure clarity, then restore.

TV lip‑sync fix

  • Introduce a sink delay (e.g., 50–150ms) or route‑level delay if only one path needs correction.

5.1 to stereo downmix for mobile listeners

  • Define a manual 8x8 SpeakerLayout for input channel key 6 that maps channels to L/R appropriately; assign to the sink used by mobile/WebRTC listeners.

RTP multi‑device stereo pairs

  • Enable multi_device_mode on an RTP sink; add rtp_receiver_mappings for each hardware receiver and map left/right channels accordingly.

Low‑latency browser monitoring (WebRTC)

  • Use Listen page or call POST /api/listen/source/{id}/setup to create a temp sink from a busy source; then start a WHEP session against the returned sink_id.

URL playback queue into a group

  • With PluginPlayURLMultiple, post multiple URLs for a group sink; use equalizer presets per URL category (podcasts vs music) with normalization enabled.

Live log triage

  • Open /site, use the Logs viewer to stream all.log and specific module logs; filter for C++ engine warnings during spikes.

Tuning Guide

Low‑latency monitoring (browser)

  • Prefer WHEP over MP3; ensure TURN/STUN are reachable; reduce target_buffer_level_ms carefully while monitoring underruns in /api/stats.
  • Keep normalization disabled on monitor routes to avoid extra dynamics processing.

Unstable Wi‑Fi paths

  • Increase target_buffer_level_ms and lower max_catchup_lag_ms when recovering from jitter bursts.

Burst‑y senders (variable CPU)

  • Give more headroom: raise timeshift_tuning.late_packet_threshold_ms and extend underrun_hold_timeout_ms to keep sources attached.

Multi‑sink sync

  • Start conservative: lower max_rate_adjustment, increase sync_smoothing_factor; incrementally reduce barrier_timeout_ms once stable.

Configuration Examples

5.1 to stereo downmix matrix (manual)

sinks:
  - name: "Mobile Monitor"
    protocol: web_receiver
    enable_mp3: true
    speaker_layouts:
      6:  # input channels: 6 (5.1)
        auto_mode: false
        matrix:
          # 8x8 matrix (use zeros beyond channels); simple downmix L/R + 0.5 center, 0.5 surrounds
          - [1.0, 0.0, 0.5, 0.0, 0.35, 0.35, 0,0,0]  # output L row from [L, R, C, LFE, Ls, Rs, ...]
          - [0.0, 1.0, 0.5, 0.0, 0.35, 0.35, 0,0,0]  # output R
          - [0,0,0,0,0,0,0,0]  # remaining rows 0
          - [0,0,0,0,0,0,0,0]
          - [0,0,0,0,0,0,0,0]
          - [0,0,0,0,0,0,0,0]
          - [0,0,0,0,0,0,0,0]
          - [0,0,0,0,0,0,0,0]

RTP/RTP Opus multi‑device mapping

sinks:
  - name: "Patio Stereo Mesh"
    protocol: rtp  # use rtp_opus to fan out encoded Opus packets
    ip: 239.10.0.1
    port: 5004
    multi_device_mode: true
    rtp_receiver_mappings:
      - receiver_sink_name: "Patio Left"
        left_channel: 0
        right_channel: 0
      - receiver_sink_name: "Patio Right"
        left_channel: 1
        right_channel: 1

For rtp_opus, keep channel indices 0/1 — each receiver runs its own Opus encoder but shares the same RTP timestamp so playback stays aligned.

Temporary listener for a route (WebRTC)

curl -k -X POST https://localhost/api/listen/route/Music%20to%20Kitchen/setup
# → { "sink_id": "<config_id>", "sink_name": "_tmp_whep_...", "route_name": "_tmp_route_..." }

Security & Deployment Hardening

  • Provide proper certificates via CERTIFICATE/CERTIFICATE_KEY (e.g., from your PKI/ACME) to avoid browser warnings and enable secure origins for WebRTC.
  • Restrict CORS in APIWebsite if exposing on public networks; lock allow_origins to known hosts.
  • Network isolation: when running on multi‑tenant hosts, ensure only intended UDP ports are reachable; disable MP3/WebRTC if not needed.
  • Logging: adjust LOG_ENTRIES_TO_RETAIN and ensure log rotation fits storage policies.
  • Docker: run as non‑root (map non‑privileged API_PORT), bind only needed interfaces via API_HOST.

API Usage Examples

Create a sink

curl -k -X POST https://localhost/sinks \
  -H 'Content-Type: application/json' \
  -d '{"name":"Bedroom","ip":"192.168.1.60","port":4010,"protocol":"scream","channels":2,"sample_rate":48000}'

Enable a route

curl -k https://localhost/routes/Office%20to%20Bedroom/enable

Stream MP3 from a sink (in browser)

https://localhost/stream/192.168.1.60/

Start WebRTC (WHEP)

# Create offer (pseudo) and POST; expect 201 and Location with listener_id
curl -k -D - https://localhost/api/whep/<sink_id> \
     -H 'Content-Type: application/sdp' \
     --data-binary @offer.sdp

FAQ

  • What latency should I expect?
    • MP3 over HTTP/WS is seconds‑level and great for compatibility. WHEP (WebRTC) is sub‑second and best for monitoring.
  • Do I need authentication?
    • ScreamRouter does not ship an auth system. Run it on trusted networks, or place it behind a reverse proxy (TLS + auth/OIDC).
  • Which platforms are supported?
    • Linux and Windows senders/receivers (incl. ESP32 variants), browsers for listening, and ALSA for local capture/playback.
  • Can I extend it?
    • Yes. Add Python plugins to register endpoints and inject PCM; use the ALSA plugin to integrate desktop apps.
  • How do I keep rooms in sync?
    • Use routes to multiple sinks, enable time_sync where supported, and tune synchronization parameters in /api/settings while watching /api/stats.

License

See COPYING. Unless otherwise noted, all rights reserved by the project author(s).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

screamrouter-0.3.73-cp314-cp314-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.14Windows x86-64

screamrouter-0.3.73-cp314-cp314-win32.whl (6.0 MB view details)

Uploaded CPython 3.14Windows x86

screamrouter-0.3.73-cp314-cp314-musllinux_1_2_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

screamrouter-0.3.73-cp314-cp314-musllinux_1_2_aarch64.whl (10.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

screamrouter-0.3.73-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

screamrouter-0.3.73-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (9.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

screamrouter-0.3.73-cp313-cp313-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.13Windows x86-64

screamrouter-0.3.73-cp313-cp313-win32.whl (6.0 MB view details)

Uploaded CPython 3.13Windows x86

screamrouter-0.3.73-cp313-cp313-musllinux_1_2_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

screamrouter-0.3.73-cp313-cp313-musllinux_1_2_aarch64.whl (10.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

screamrouter-0.3.73-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

screamrouter-0.3.73-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (9.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

screamrouter-0.3.73-cp312-cp312-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.12Windows x86-64

screamrouter-0.3.73-cp312-cp312-win32.whl (6.0 MB view details)

Uploaded CPython 3.12Windows x86

screamrouter-0.3.73-cp312-cp312-musllinux_1_2_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

screamrouter-0.3.73-cp312-cp312-musllinux_1_2_aarch64.whl (10.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

screamrouter-0.3.73-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

screamrouter-0.3.73-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (9.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

screamrouter-0.3.73-cp311-cp311-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.11Windows x86-64

screamrouter-0.3.73-cp311-cp311-win32.whl (6.0 MB view details)

Uploaded CPython 3.11Windows x86

screamrouter-0.3.73-cp311-cp311-musllinux_1_2_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

screamrouter-0.3.73-cp311-cp311-musllinux_1_2_aarch64.whl (10.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

screamrouter-0.3.73-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

screamrouter-0.3.73-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (9.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

screamrouter-0.3.73-cp310-cp310-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.10Windows x86-64

screamrouter-0.3.73-cp310-cp310-win32.whl (5.9 MB view details)

Uploaded CPython 3.10Windows x86

screamrouter-0.3.73-cp310-cp310-musllinux_1_2_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

screamrouter-0.3.73-cp310-cp310-musllinux_1_2_aarch64.whl (10.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

screamrouter-0.3.73-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

screamrouter-0.3.73-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (9.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

File details

Details for the file screamrouter-0.3.73-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 acef06bf208816862935789d5fd596b2cc257269ff4c6a24d8026f05d95ce247
MD5 7d1a20431fc8ad87798110ec32a879a1
BLAKE2b-256 53fce6bb20341db7cbbfd03648c3020455006b8daf435010235438b3741c57f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp314-cp314-win_amd64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp314-cp314-win32.whl.

File metadata

  • Download URL: screamrouter-0.3.73-cp314-cp314-win32.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screamrouter-0.3.73-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 ee5e32bae40954a3d7a8fa0047431b48618f76ddec22a35b7214a2a93f0025be
MD5 f1c2e4b753dc4e1ac297491147a83814
BLAKE2b-256 f94f23a4b698b27d622d46e2252dd8a9088bab2888b8cd33b5d42ab328799060

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp314-cp314-win32.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49a194becdb40736c46c781d462dcca52acf00e4a2fc10c340084e6f773a1282
MD5 cd82994298ae9fcd856945ceebe11c4e
BLAKE2b-256 10a5f7f8815df57f6a8a1346f3c3d9dd25529b8791eba186afaa08a71a3d553f

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b41e83cbdc0369bb7e6547331b4c13aca2f6182119e9337b5b3be63d239c89cc
MD5 1f34b8012b8e83aa4ffd54da6fce41e3
BLAKE2b-256 fca065cc2ef4df88c93c01629426e8891fe611585767070b74a2f1d20f27f88c

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bf59f7e2a85dfff3db94dd5421c386b77317b9601ecac95fec1d8a4bc61b7a8c
MD5 51ea6d05838d794ceea66e98179a0068
BLAKE2b-256 c79a3a4a157e1f8ff7043747af86724089c262d8b9e4c2913cbca36d047c771f

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 90aa14a31332e517a61057cec951c608aee99f11d48a92fea95b1883d208c616
MD5 817dd8bee64680d74a0a24d06a42958b
BLAKE2b-256 6c90e9be5652fcccdae24a20fc70d40427cc8aa71207675fe758aadef04653a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e63783dc8288f18a13dd2f074f75e9306bedb9ee6494754bc5a3fe9f2bf5f48c
MD5 1b4e0589d7fbd3be658ab530e07d40cd
BLAKE2b-256 a5ebd5e7155122e2d82445a1dbf316ac9723750715a09f181095ff4a91d10d63

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp313-cp313-win_amd64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp313-cp313-win32.whl.

File metadata

  • Download URL: screamrouter-0.3.73-cp313-cp313-win32.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screamrouter-0.3.73-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 73dd0163376dc2698d2ed5b1ace1f5abb57d2744777ac125d91d2b9b3e78ac60
MD5 c94808b8ff7fe32787d88509174607db
BLAKE2b-256 f9ea714047703a7c18efed31e31d8cb22754f6425568bf6887737eeebfd6ee55

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp313-cp313-win32.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b2d4b8d1ab66b9761e36a6950cfb68c61d4a5d24d072ae22985442c4176d1aa3
MD5 78ee7eba5f34c44cf80df4a98e84a64e
BLAKE2b-256 b40f7803829062b6dbe751c6d62adc9ce965e32d7b0dddf226779ee0d126f18d

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4d9ded8ed015a8d507464eb207024fabc1aa3998c0041b73ffd6d1d12138550f
MD5 c41dad7bde5e1325ef241b409d83ed5c
BLAKE2b-256 a86060323d508845404cfd34c9d6c7ad35c85b594ef75db88ad1fe91055b1e9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e63c8e6284dcf63ac7081b2df87b6b2d93c189025bf5b1101b41d9a4f2de4ca0
MD5 5d69db275e8378625f5ddef7ac02e45a
BLAKE2b-256 16a34bcc516e523c0f24c0bc3d5280bc27b2403efe5141b84dd031ae1ce283e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c86a5cbf9c67e22131bbb3646875e70ff06963bc1cfb2f07f47f2758c232bd68
MD5 cae1c542705fe18b2d2105aa632f2bde
BLAKE2b-256 54df4e6f7a2d9dbae337619979671d6cfdf8d1bd32c7971e509b4ce7eb016296

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aecfe42be1d11133d5cc3ee651aaac89d9470664f3b6806f3a5adc85d4e84c8e
MD5 8d6d32bb2d725c183c966915fc9ea44f
BLAKE2b-256 a2852843f65d840db5fa9582bb14bb82f5e80593440a7ae75452aba916225abb

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp312-cp312-win32.whl.

File metadata

  • Download URL: screamrouter-0.3.73-cp312-cp312-win32.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screamrouter-0.3.73-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 30bdd9c14fe71c331032e72d4f99c143e81a2dba956bc727f213bbd141ec3e8c
MD5 e1032b58d56a5be93fc3ac7e681bdc7a
BLAKE2b-256 cdb43370a4f796120e37052a58a8a3998ddc6ac60e76a8b0a32bb95a70c7095f

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp312-cp312-win32.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c2cc9851f78e15d6fc24f9cde13a0d54b3b35b063b0e7df0e25b3c80df0974a6
MD5 c3ce1371bb05abe559bb75cf71a5b8df
BLAKE2b-256 a35d066a98ef1e9aac8c63fc2cd9f895aa122e14e196a2786f2e0870a43ffcba

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 17a55c278e80ffe24fa3e069f0ed5aa70b7b827a67be5411279433b138dcebc2
MD5 c9cfe014e69c0c805bfdffd906a62c3f
BLAKE2b-256 4d33b1039c1e2a38641c1ce12b58a1f56b96baa49373b633437b4ebfc398a19f

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 34bf24bd7a2f6cf3ba4220268a251ca49009d0ae2b7c29708dde1d7c3e6e1cbb
MD5 7bc19d7b2c5f80658da57b135bcf41bc
BLAKE2b-256 07f9b708aac47d09b60c8de32fbdefee1ee03447320c9b0657076b2c637ab76c

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 10429821c2990c0ddb9bc5ffbe911eaa6c0d508ea43fd3e192d0a2c491a19e58
MD5 e6e9f401f3474bb799156537cb0d41c2
BLAKE2b-256 2b057157dd0f5a66040f604c0f1d3759f0abf07c72578298dd76dabfd308f26d

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f19178067ea41313006fc7728b2bba5f1f5f4242d86f22382a3c519e0aeb99f3
MD5 a3f5a3523d3dd529b8743800fe0c5222
BLAKE2b-256 543dd12d04ef113ff645f5eb4955a713f4400a7b79595822a87fcd8180f5cc80

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp311-cp311-win_amd64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp311-cp311-win32.whl.

File metadata

  • Download URL: screamrouter-0.3.73-cp311-cp311-win32.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screamrouter-0.3.73-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 cf6dc391f6d2a53f517b0c891354cd5d73a49b108e53acf600ee5f05b1a2b189
MD5 511ae7dddc834de571796219e62952b7
BLAKE2b-256 048866d2f3d3c106d9ff1b1cb6b55489a7e96a5c5fb8e6c1698e395149359282

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp311-cp311-win32.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3f61a1ef3016b283570ed81202f7aeacd50da6269c2089b5c57bb296fcf7ff7c
MD5 a578f02e76774beda4d6e378fdb3ba47
BLAKE2b-256 f1fd9b3080a8cd7fa34b5510d61ea9f0ebbf6d68e933cde440bd1e784680d0fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9d973e88521af57ecefd7ac427caaa97e61b4bdec9679a7d436e98a223ef3df2
MD5 f47f129b3d9d45eed8359b7c5a3c01c0
BLAKE2b-256 df4b9c52451da9639d272f8cdce5430b0da54e9b9426582a0a91e5f7a8ab6285

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b239e7076f728cb91f5c7e60f846c6b948c5aaac4b7d43bd7409296d00508aad
MD5 6480e2c77db447c9864a03dbd5212f5f
BLAKE2b-256 dd2475bef2003a85f699e1ca94457f207544d6e1ec7f655aafca44d63b880a0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 022df76feab95a0af697c9475a5202f82794a8b57914c23a6147c5624d6d6925
MD5 7e98820b893b8b52acf1113720bf7211
BLAKE2b-256 e186201c13b3309732defaa4fe5ce6d3da4ca96be0a120547fbcb4bbe92720c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 46695f1147770ec0be234ba0b46e4f3a00a9da2af7e2fda6b4d4b1bfc2afdcdd
MD5 b5538fcf2c6f34dbf5291d4a18e3aa10
BLAKE2b-256 dfc42094725485d848931be41fbe126e5e4fc06a9339fc16e5347150702fb4d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp310-cp310-win_amd64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp310-cp310-win32.whl.

File metadata

  • Download URL: screamrouter-0.3.73-cp310-cp310-win32.whl
  • Upload date:
  • Size: 5.9 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screamrouter-0.3.73-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 4a5b41fff8a6c3c50c259c046e6bc13cad67c6923dd81b2de67de7d4dd3295f1
MD5 50edc8cb030254dade539b626adc4027
BLAKE2b-256 18da37400ab539dbd5e3eeb20bcd3789bea70b1b3940ddcb645d2d5a2102d84d

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp310-cp310-win32.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d55fc1c14f71d6f30a5597bbeadf4163a64301ffa7c6fb72a81ad95286c2bb97
MD5 822226f7f378dc0cc8b21338a9edf0f6
BLAKE2b-256 25f76b0bf07be89cdc1cbcdd9f5bb25f9a7348fcebc20457e0300c6713c5abce

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bc8961fd76989d511b463f7f08d46555845f102d76cbd8d4a8a78236abe09f9c
MD5 5f42a061f022d4bf1cb844e705f1332d
BLAKE2b-256 b46d331d62df991573f2199e38437e25d427e5b0bc16e194274ffc58f113dade

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2dc5ee22eaeaa2208895b58560afe20f2015123fdc11b20366c1fc1b2d995d72
MD5 c60cddcacb1c9f5c07ec0a79cabf36c4
BLAKE2b-256 7c5435e471405eb5618673e186f521cdfbbb7886641437cac4aad5343afbfe77

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamrouter-0.3.73-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for screamrouter-0.3.73-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cc47de5ad0c683785d8362d848e4ce6874dc5a30f5c1d5675ec8009f6c2a3817
MD5 a154c3f6264e900a3222e5ca2a0182bd
BLAKE2b-256 cdb2146a2e17ca8ddd8fa568607d6d7d8ea37e1e9980af4754d9b468973be142

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamrouter-0.3.73-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on netham45/screamrouter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page