TOOL · DEFENSE GENERATOR

Defense generator

Create an extended manifest from a DASH MPD, offline in your browser.

This tool turns a plain DASH MPD into an extended manifest (.exmfst.json): an MPD paired with per-representation defense plans that the Dodge player applies at fetch time. See choosing a defense for what each built-in defense does and which one to use.

Everything below runs locally in your browser. The page reads the MPD you give it, fetched from a URL or opened from a local file, and probes segment sizes directly from your browser; nothing is uploaded to dodge.video or to any other server. Only necessary traffic.

Measurement (step 03) sends one request per segment, per selected representation, from your browser to whichever host serves the stream, sometimes thousands of requests in quick succession. That host sees your IP address and a request pattern that looks nothing like playback. Each probe is padded to a random size, so the sequence of request lengths doesn't correspond to the segments being fetched; the number of probes reflects how many segments the stream has, unless you add trailing padding probes in step 03. Use a VPN or a separate network if the server should not be able to link your probes to you.

Most public DASH streams work here, but not all: DRM-protected streams, segment URLs that require a login cookie or signed token, and live streams will not yield a usable manifest. If a load fails outright, the most likely cause is that the host doesn't send CORS headers permitting cross-origin browser requests, rather than an issue with the tool.

01 · Load MPD

02 · Representations

Unselected representations are removed from the embedded MPD, so the player cannot switch to an undefended one mid-playback and stall (with strict mode on) or undermine the defense.

03 · Measure segment sizes

Required for most defenses (those that use partial cycles: currently constant size and random padding). Only the baseline defense can skip this step.

Probes every selected representation's segments over the network; on long streams this can take a while, and you can cancel at any point. Probe requests are padded to a random size so their lengths don't reveal which segments are being fetched.

Padding hides how large each probe is, but not how many there are, and one probe per segment means the probe count reveals the stream's duration. This many extra padding probes are appended for every representation, so an observer counting requests sees a longer stream than you measured. The same count is used for each representation. Only representations probed segment-by-segment are padded; SegmentBase and byte-range SegmentList streams issue at most one request regardless of length.

04 · Generate

Unsure which to pick? See choosing a defense.