{
  "count": 11,
  "posts": [
    {
      "slug": "dante-whole-venue-one-fabric",
      "title": "The whole venue, one fabric",
      "summary": "A venue is audio, video, captions, and a dozen operators each on a different system. WAVE puts the Dante audio bridge next to its own video and captions path as one addressable fabric.",
      "author": "WAVE",
      "date": "2026-07-20",
      "dateModified": "2026-07-20",
      "readingTime": "5 min read",
      "tags": [
        "dante",
        "audio",
        "ndi",
        "transports",
        "media-engine",
        "live-audio"
      ],
      "url": "https://blog.wave.online/blog/dante-whole-venue-one-fabric",
      "transcript": "https://blog.wave.online/blog/dante-whole-venue-one-fabric.txt",
      "tldr": null,
      "chapters": null,
      "audio": null
    },
    {
      "slug": "dante-one-link-anywhere",
      "title": "One link, anywhere",
      "summary": "Getting Dante audio off the LAN used to mean stacking licenses — a controller here, a virtual soundcard there, a hardware bridge on top. WAVE replaces the stack with discovery, bridge, play.",
      "author": "WAVE",
      "date": "2026-07-20",
      "dateModified": "2026-07-20",
      "readingTime": "5 min read",
      "tags": [
        "dante",
        "audio",
        "transports",
        "media-engine",
        "live-audio"
      ],
      "url": "https://blog.wave.online/blog/dante-one-link-anywhere",
      "transcript": "https://blog.wave.online/blog/dante-one-link-anywhere.txt",
      "tldr": null,
      "chapters": null,
      "audio": null
    },
    {
      "slug": "dante-escape-the-lan",
      "title": "Your Dante network just left the building",
      "summary": "Dante audio has been jailed to the LAN for twenty years. WAVE bridges a live Dante or AES67 source to a URL — any browser, anywhere, nothing to install.",
      "author": "WAVE",
      "date": "2026-07-20",
      "dateModified": "2026-07-20",
      "readingTime": "4 min read",
      "tags": [
        "dante",
        "audio",
        "transports",
        "media-engine",
        "live-audio"
      ],
      "url": "https://blog.wave.online/blog/dante-escape-the-lan",
      "transcript": "https://blog.wave.online/blog/dante-escape-the-lan.txt",
      "tldr": null,
      "chapters": null,
      "audio": null
    },
    {
      "slug": "wave-mesh-is-live",
      "title": "WAVE Mesh is live",
      "summary": "WAVE Mesh — the WAVE-native overlay for reachability — is commercially available. Every WAVE device joins one flat, NAT-regardless mesh under a single identity, routed direct when the net allows and relayed when it doesn't, metered end to end. Here's what's live today, what it costs, and the one honest caveat.",
      "author": "WAVE",
      "date": "2026-06-23",
      "dateModified": "2026-06-23",
      "readingTime": "6 min read",
      "tags": [
        "mesh",
        "platform",
        "reachability",
        "networking",
        "billing"
      ],
      "url": "https://blog.wave.online/blog/wave-mesh-is-live",
      "transcript": "https://blog.wave.online/blog/wave-mesh-is-live.txt",
      "tldr": "WAVE Mesh — the WAVE-native overlay for reachability — is commercially available: every WAVE device joins one flat, NAT-regardless mesh under a single identity, routed direct or relayed and metered end to end, billing $0 until you route. The control plane and M-A → M-G spine are live; only the two-uplink physical braid is still roadmap.",
      "chapters": [
        "Reachability is the unspoken problem",
        "What's live",
        "One overlay, one identity",
        "What the mesh carries",
        "What it costs",
        "The one honest caveat",
        "Start routing"
      ],
      "audio": null
    },
    {
      "slug": "wave-is-generally-available",
      "title": "WAVE is generally available",
      "summary": "WAVE's platform is generally available — one API at the gateway, open-core SDKs, and x402 payments that work for people and agents alike. The product surfaces ride on that same API, rolling out in preview. Here's exactly what's live today, and what's next.",
      "author": "WAVE",
      "date": "2026-06-14",
      "dateModified": "2026-06-14",
      "readingTime": "7 min read",
      "tags": [
        "ga",
        "platform",
        "media-engine",
        "money-engine",
        "dispatch"
      ],
      "url": "https://blog.wave.online/blog/wave-is-generally-available",
      "transcript": "https://blog.wave.online/blog/wave-is-generally-available.txt",
      "tldr": "WAVE's platform spine is generally available — gateway, docs, open-core SDKs, and x402 payments — and the product surfaces roll out in preview behind the same API, so the integration you write today doesn't change on GA day.",
      "chapters": [
        "Video infra was a pile of separate decisions",
        "What GA means here",
        "What's generally available today",
        "The two engines",
        "In preview, behind the same API",
        "Built for agents",
        "What's live, what's in preview"
      ],
      "audio": null
    },
    {
      "slug": "render-code-defined-video",
      "title": "Render — code-defined video",
      "summary": "Render turns a declarative Scene — HTML, CSS, audio, and captions — into a voiced, captioned, alpha-capable video. The open reference renderer runs locally today; the hosted, agent-callable pipeline is in preview behind the same gateway that meters everything else on WAVE.",
      "author": "WAVE",
      "date": "2026-06-14",
      "dateModified": "2026-06-14",
      "readingTime": "6 min read",
      "tags": [
        "render",
        "scene-ir",
        "video",
        "agents",
        "media-engine"
      ],
      "url": "https://blog.wave.online/blog/render-code-defined-video",
      "transcript": "https://blog.wave.online/blog/render-code-defined-video.txt",
      "tldr": "Render turns a declarative Scene — HTML, CSS, audio, captions — into a deterministic, voiced, alpha-capable video; the open reference renderer runs locally today and the hosted, agent-callable pipeline is in preview behind the same metered gateway.",
      "chapters": [
        "Operating a renderer is the wrong job",
        "A Scene is the input",
        "What a renderer-library doesn't do",
        "Run it today",
        "Where it fits",
        "Callable by an agent"
      ],
      "audio": null
    },
    {
      "slug": "how-this-blog-is-powered",
      "title": "How this blog is powered",
      "summary": "This blog is the dogfood — every WAVE primitive running on itself. Voice that narrates the words you're reading, an edge that serves them, and a pipeline that keeps the two in sync. Here's the whole stack, end to end.",
      "author": "WAVE",
      "date": "2026-06-09",
      "dateModified": "2026-06-10",
      "readingTime": "5 min read",
      "tags": [
        "dogfood",
        "wave-voice",
        "edge",
        "cloudflare",
        "how-it-works"
      ],
      "url": "https://blog.wave.online/blog/how-this-blog-is-powered",
      "transcript": "https://blog.wave.online/blog/how-this-blog-is-powered.txt",
      "tldr": "The blog is the dogfood: WAVE Voice narrates it, a freshness pipeline keeps the audio in sync with the text, and one Cloudflare Worker serves the whole thing — every primitive running on itself.",
      "chapters": [
        "The blog as a product demo",
        "WAVE Voice narration",
        "The freshness pipeline keeps it honest",
        "Captions + karaoke",
        "Auto-linking ties it together",
        "One Worker at the edge"
      ],
      "audio": {
        "engine": "WAVE Voice",
        "default": "matilda",
        "mp3": "https://blog.wave.online/blog/how-this-blog-is-powered.mp3",
        "voices": [
          {
            "voice": "matilda",
            "name": "Matilda",
            "mp3": "https://blog.wave.online/blog/how-this-blog-is-powered.matilda.mp3",
            "words": "https://blog.wave.online/blog/how-this-blog-is-powered.matilda.json",
            "captions": "https://blog.wave.online/blog/how-this-blog-is-powered.matilda.vtt"
          },
          {
            "voice": "cassidy",
            "name": "Cassidy",
            "mp3": "https://blog.wave.online/blog/how-this-blog-is-powered.cassidy.mp3",
            "words": "https://blog.wave.online/blog/how-this-blog-is-powered.cassidy.json",
            "captions": "https://blog.wave.online/blog/how-this-blog-is-powered.cassidy.vtt"
          },
          {
            "voice": "alice",
            "name": "Alice",
            "mp3": "https://blog.wave.online/blog/how-this-blog-is-powered.alice.mp3",
            "words": "https://blog.wave.online/blog/how-this-blog-is-powered.alice.json",
            "captions": "https://blog.wave.online/blog/how-this-blog-is-powered.alice.vtt"
          },
          {
            "voice": "jarnathan",
            "name": "Jarnathan",
            "mp3": "https://blog.wave.online/blog/how-this-blog-is-powered.jarnathan.mp3",
            "words": "https://blog.wave.online/blog/how-this-blog-is-powered.jarnathan.json",
            "captions": "https://blog.wave.online/blog/how-this-blog-is-powered.jarnathan.vtt"
          }
        ]
      }
    },
    {
      "slug": "webrtc-sub-second-latency",
      "title": "WebRTC and sub-second latency",
      "summary": "WebRTC is the transport when latency has to be conversational. WAVE runs its own edge WebRTC SFU on Cloudflare — WHIP in, WHEP out — and exposes it through the same open API as every other transport.",
      "author": "WAVE",
      "date": "2026-06-08",
      "dateModified": "2026-06-09",
      "readingTime": "6 min read",
      "tags": [
        "webrtc",
        "cloudflare",
        "sfu",
        "real-time",
        "transports"
      ],
      "url": "https://blog.wave.online/blog/webrtc-sub-second-latency",
      "transcript": "https://blog.wave.online/blog/webrtc-sub-second-latency.txt",
      "tldr": "WebRTC is the conversational link — WAVE runs it on its own edge SFU on Cloudflare, behind the same open API as every other transport.",
      "chapters": [
        "When a second of delay breaks it",
        "WHIP in, WHEP out — on Cloudflare",
        "When to reach for WebRTC",
        "The latency chain",
        "Edge-native, short path"
      ],
      "audio": {
        "engine": "WAVE Voice",
        "default": "matilda",
        "mp3": "https://blog.wave.online/blog/webrtc-sub-second-latency.mp3",
        "voices": [
          {
            "voice": "matilda",
            "name": "Matilda",
            "mp3": "https://blog.wave.online/blog/webrtc-sub-second-latency.matilda.mp3",
            "words": "https://blog.wave.online/blog/webrtc-sub-second-latency.matilda.json",
            "captions": "https://blog.wave.online/blog/webrtc-sub-second-latency.matilda.vtt"
          },
          {
            "voice": "cassidy",
            "name": "Cassidy",
            "mp3": "https://blog.wave.online/blog/webrtc-sub-second-latency.cassidy.mp3",
            "words": "https://blog.wave.online/blog/webrtc-sub-second-latency.cassidy.json",
            "captions": "https://blog.wave.online/blog/webrtc-sub-second-latency.cassidy.vtt"
          },
          {
            "voice": "alice",
            "name": "Alice",
            "mp3": "https://blog.wave.online/blog/webrtc-sub-second-latency.alice.mp3",
            "words": "https://blog.wave.online/blog/webrtc-sub-second-latency.alice.json",
            "captions": "https://blog.wave.online/blog/webrtc-sub-second-latency.alice.vtt"
          },
          {
            "voice": "jarnathan",
            "name": "Jarnathan",
            "mp3": "https://blog.wave.online/blog/webrtc-sub-second-latency.jarnathan.mp3",
            "words": "https://blog.wave.online/blog/webrtc-sub-second-latency.jarnathan.json",
            "captions": "https://blog.wave.online/blog/webrtc-sub-second-latency.jarnathan.vtt"
          }
        ]
      }
    },
    {
      "slug": "one-api-every-transport",
      "title": "One API, every transport",
      "summary": "Most video stacks pick a transport and build around it. WAVE puts one API in front of all of them and makes each transport a thin adapter, so the protocol is a parameter, not a rewrite.",
      "author": "WAVE",
      "date": "2026-06-08",
      "dateModified": "2026-06-09",
      "readingTime": "5 min read",
      "tags": [
        "media-engine",
        "transports",
        "srt",
        "rtmp",
        "ndi",
        "webrtc",
        "moq"
      ],
      "url": "https://blog.wave.online/blog/one-api-every-transport",
      "transcript": "https://blog.wave.online/blog/one-api-every-transport.txt",
      "tldr": "One Media Engine, one API, and every transport a thin adapter — so the protocol is a parameter of the call, not the shape of your codebase.",
      "chapters": [
        "One core API, thin adapters",
        "A consistent surface for every transport",
        "Thinness as discipline"
      ],
      "audio": {
        "engine": "WAVE Voice",
        "default": "matilda",
        "mp3": "https://blog.wave.online/blog/one-api-every-transport.mp3",
        "voices": [
          {
            "voice": "matilda",
            "name": "Matilda",
            "mp3": "https://blog.wave.online/blog/one-api-every-transport.matilda.mp3",
            "words": "https://blog.wave.online/blog/one-api-every-transport.matilda.json",
            "captions": "https://blog.wave.online/blog/one-api-every-transport.matilda.vtt"
          },
          {
            "voice": "cassidy",
            "name": "Cassidy",
            "mp3": "https://blog.wave.online/blog/one-api-every-transport.cassidy.mp3",
            "words": "https://blog.wave.online/blog/one-api-every-transport.cassidy.json",
            "captions": "https://blog.wave.online/blog/one-api-every-transport.cassidy.vtt"
          },
          {
            "voice": "alice",
            "name": "Alice",
            "mp3": "https://blog.wave.online/blog/one-api-every-transport.alice.mp3",
            "words": "https://blog.wave.online/blog/one-api-every-transport.alice.json",
            "captions": "https://blog.wave.online/blog/one-api-every-transport.alice.vtt"
          },
          {
            "voice": "jarnathan",
            "name": "Jarnathan",
            "mp3": "https://blog.wave.online/blog/one-api-every-transport.jarnathan.mp3",
            "words": "https://blog.wave.online/blog/one-api-every-transport.jarnathan.json",
            "captions": "https://blog.wave.online/blog/one-api-every-transport.jarnathan.vtt"
          }
        ]
      }
    },
    {
      "slug": "ndi-at-the-edge",
      "title": "NDI at the edge",
      "summary": "NDI carries broadcast-grade video over standard IP networks. WAVE treats it as one transport adapter over the Media Engine — ingest NDI on the LAN, deliver anywhere.",
      "author": "WAVE",
      "date": "2026-06-08",
      "dateModified": "2026-06-09",
      "readingTime": "7 min read",
      "tags": [
        "ndi",
        "transports",
        "media-engine",
        "broadcast",
        "ip-video"
      ],
      "url": "https://blog.wave.online/blog/ndi-at-the-edge",
      "transcript": "https://blog.wave.online/blog/ndi-at-the-edge.txt",
      "tldr": "WAVE treats NDI as a thin adapter over one Media Engine — ingest on the LAN, deliver anywhere through one API.",
      "chapters": [
        "What NDI is",
        "WAVE's approach to NDI",
        "Off the LAN, cleanly"
      ],
      "audio": {
        "engine": "WAVE Voice",
        "default": "matilda",
        "mp3": "https://blog.wave.online/blog/ndi-at-the-edge.mp3",
        "voices": [
          {
            "voice": "matilda",
            "name": "Matilda",
            "mp3": "https://blog.wave.online/blog/ndi-at-the-edge.matilda.mp3",
            "words": "https://blog.wave.online/blog/ndi-at-the-edge.matilda.json",
            "captions": "https://blog.wave.online/blog/ndi-at-the-edge.matilda.vtt"
          },
          {
            "voice": "cassidy",
            "name": "Cassidy",
            "mp3": "https://blog.wave.online/blog/ndi-at-the-edge.cassidy.mp3",
            "words": "https://blog.wave.online/blog/ndi-at-the-edge.cassidy.json",
            "captions": "https://blog.wave.online/blog/ndi-at-the-edge.cassidy.vtt"
          },
          {
            "voice": "alice",
            "name": "Alice",
            "mp3": "https://blog.wave.online/blog/ndi-at-the-edge.alice.mp3",
            "words": "https://blog.wave.online/blog/ndi-at-the-edge.alice.json",
            "captions": "https://blog.wave.online/blog/ndi-at-the-edge.alice.vtt"
          },
          {
            "voice": "jarnathan",
            "name": "Jarnathan",
            "mp3": "https://blog.wave.online/blog/ndi-at-the-edge.jarnathan.mp3",
            "words": "https://blog.wave.online/blog/ndi-at-the-edge.jarnathan.json",
            "captions": "https://blog.wave.online/blog/ndi-at-the-edge.jarnathan.vtt"
          }
        ]
      }
    },
    {
      "slug": "how-an-agent-pays-for-video",
      "title": "How an agent pays for video",
      "summary": "An agent can call WAVE for video and settle the bill itself — per use, over x402, with no account. Here is the exact path the request and the payment take.",
      "author": "WAVE",
      "date": "2026-06-08",
      "dateModified": "2026-06-09",
      "readingTime": "6 min read",
      "tags": [
        "agentic-payments",
        "x402",
        "media-engine",
        "money-engine",
        "did-wave"
      ],
      "url": "https://blog.wave.online/blog/how-an-agent-pays-for-video",
      "transcript": "https://blog.wave.online/blog/how-an-agent-pays-for-video.txt",
      "tldr": "An agent can call WAVE for video and settle the bill itself — per use, over x402, with no account and no human in the loop.",
      "chapters": [
        "Two paths: people and agents",
        "The two engines",
        "x402, in one paragraph",
        "did:wave identity",
        "Same routes, settled by the agent"
      ],
      "audio": {
        "engine": "WAVE Voice",
        "default": "matilda",
        "mp3": "https://blog.wave.online/blog/how-an-agent-pays-for-video.mp3",
        "voices": [
          {
            "voice": "matilda",
            "name": "Matilda",
            "mp3": "https://blog.wave.online/blog/how-an-agent-pays-for-video.matilda.mp3",
            "words": "https://blog.wave.online/blog/how-an-agent-pays-for-video.matilda.json",
            "captions": "https://blog.wave.online/blog/how-an-agent-pays-for-video.matilda.vtt"
          },
          {
            "voice": "cassidy",
            "name": "Cassidy",
            "mp3": "https://blog.wave.online/blog/how-an-agent-pays-for-video.cassidy.mp3",
            "words": "https://blog.wave.online/blog/how-an-agent-pays-for-video.cassidy.json",
            "captions": "https://blog.wave.online/blog/how-an-agent-pays-for-video.cassidy.vtt"
          },
          {
            "voice": "alice",
            "name": "Alice",
            "mp3": "https://blog.wave.online/blog/how-an-agent-pays-for-video.alice.mp3",
            "words": "https://blog.wave.online/blog/how-an-agent-pays-for-video.alice.json",
            "captions": "https://blog.wave.online/blog/how-an-agent-pays-for-video.alice.vtt"
          },
          {
            "voice": "jarnathan",
            "name": "Jarnathan",
            "mp3": "https://blog.wave.online/blog/how-an-agent-pays-for-video.jarnathan.mp3",
            "words": "https://blog.wave.online/blog/how-an-agent-pays-for-video.jarnathan.json",
            "captions": "https://blog.wave.online/blog/how-an-agent-pays-for-video.jarnathan.vtt"
          }
        ]
      }
    }
  ]
}