Files
wz-phone/vault/PRDs/PRD-studio-quality.md
Siavash Sameni ed8a7ae5aa docs: protocol audit 2026-05-25, update architecture + Obsidian vault
Audit:
- docs/AUDIT-2026-05-25.md: full protocol audit covering 8 findings
  (4 critical, 2 high, 5 medium, 4 low) with code references and fix
  effort estimates
- vault/Audit/Tasks.md: Obsidian Tasks plugin file tracking all audit
  items with priorities, due dates, and per-step checklists

Architecture docs updated for Wire format v2 and Wave 5/6 features:
- ARCHITECTURE.md: adds wzp-video to dependency graph and project
  structure; wire format updated to v2 (16B header, 5B MiniHeader);
  relay concurrency section corrected (DashMap+RwLock is current, not
  a future optimization); test count 571→702; Android note
- PROGRESS.md: Wave 5 and Wave 6 sections appended; test count 372→702;
  current status and open blockers as of 2026-05-25
- ROAD-TO-VIDEO.md: implementation status table inserted (/🟡/🔴/🔲
  per phase); 6-step critical path to first video call
- WZP-SPEC.md: MediaHeader updated to v2 (16B byte-aligned); MiniHeader
  updated to 5B with seq_delta; codec IDs 9-12 added (H.264/H.265/AV1);
  version negotiation section added

Obsidian vault (vault/):
- 114 files across Architecture/, PRDs/, Reports/, Android/,
  Reference/, Audit/ with YAML frontmatter
- 00 - Home.md index note with wiki links
- .obsidian/app.json config

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 06:00:17 +04:00

2.5 KiB

tags, type
tags type
prd
wzp
prd

PRD: Studio Quality Tiers (Opus 32k/48k/64k)

Status: Implemented

Studio quality tiers have been added to the wire protocol and all clients.

What Was Added

Wire Protocol (codec_id.rs)

Three new CodecId variants using the 4-bit header space (values 6-8):

CodecId Wire Value Bitrate Frame Use Case
Opus32k 6 32 kbps 20ms Studio low — noticeable improvement over 24k for voice
Opus48k 7 48 kbps 20ms Studio — excellent voice, captures nuance
Opus64k 8 64 kbps 20ms Studio high — near-transparent quality

Quality Profiles

Profile Codec FEC Bandwidth (with FEC)
STUDIO_32K Opus 32k 10% ~35 kbps
STUDIO_48K Opus 48k 10% ~53 kbps
STUDIO_64K Opus 64k 10% ~70 kbps

FEC is set to 10% (vs 20% for GOOD) — studio assumes a good network.

Client Support

Client Selection Status
Desktop (Tauri) Quality slider in Settings (8 levels) Done
CLI --profile studio-64k / studio-48k / studio-32k Done
Android Needs codec picker update in SettingsScreen.kt TODO
Web Needs UI TODO

Cross-Codec Interop

All decoder auto-switch paths (call.rs, desktop engine.rs) handle the new codec IDs. A studio-64k client can talk to a codec2-1200 client — the receiver auto-switches.

When to Use Studio Tiers

  • Podcast recording sessions: Use studio-64k for best quality (combined with local WAV recording for pristine output)
  • Music collaboration: Opus at 48-64k captures instrument harmonics much better than 24k
  • Good network conditions: Only useful when bandwidth isn't constrained; the extra bits are wasted on lossy networks

When NOT to Use

  • Mobile data: Stick with Auto/GOOD — studio tiers use 2-3x the bandwidth
  • High packet loss: Studio profiles use minimal FEC (10%); degraded networks need DEGRADED or CATASTROPHIC profiles with 50-100% FEC
  • Large group calls: Each participant's stream multiplies bandwidth; 64k * 10 participants = 640 kbps incoming

Backward Compatibility

Old clients (before this change) will receive packets with CodecId 6/7/8 which they don't recognize. The from_wire() returns None for unknown values, causing the packet to be dropped. Old clients can still send to new clients fine (they use CodecId 0-5). This is acceptable for a pre-release protocol.