diff --git a/README.md b/README.md index 7c54e3e..1306209 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -tcdweb — Transcode Detector (Web Version) +tcdweb - Transcode Detector (Web Version) ========================================= ![Screenshot](tcdwebshot.png) @@ -11,7 +11,7 @@ bitrate by the same lossy codec, e.g. 128 → 320 kbps MP3). This is the **web version** of [tcd](https://codeberg.org/armin/tcd), the original CLI tool. At this point **tcdweb is a complete, independent fork** with its own codebase, its own analysis engine, and its own UI. It runs entirely in -the browser via the **Web Audio API** — no server-side processing, no file +the browser via the **Web Audio API** - no server-side processing, no file uploads, no FFmpeg dependency, and no command line needed. --- @@ -21,12 +21,10 @@ Live-Demo There is a live demo of tcdweb available at: [bsd.pm/tcdweb](https://bsd.pm/tcdweb). -Obligatory AI-slop disclaimer ------------------------------ +Obligatory AI notice +-------------------- -tcdweb is 98% vibe-coded (a.k.a. "ai slop"). If that's a problem for you, please -kindly just use a different tool. There is also absolutely *NO* guarantee this -will work reliably, be useful in any way, or even make any sense whatsoever. +tcdweb was developed with the assistance of AI. --- @@ -52,7 +50,7 @@ Key metrics ----------- - **Cutoff**: highest frequency with measurable energy (as Hz and % of Nyquist). - Lossy codecs chop off high frequencies — the lower the cutoff, the more + Lossy codecs chop off high frequencies - the lower the cutoff, the more aggressive the compression. - **Steepness (Transition Bandwidth)**: how abruptly the spectrum drops at the cutoff point. Lossy encoders produce sharp brick-wall filters (low steepness). @@ -89,7 +87,7 @@ Verdicts | Verdict | Input codec | Meaning | |---|---|---| -| **NATIVE** | lossy | Single encode at the stated bitrate — genuine | +| **NATIVE** | lossy | Single encode at the stated bitrate - genuine | | **UPSCALED** | lossy | Re-encoded from a lower bitrate (e.g. 128 → 320 kbps) | | **GENUINE** | lossless | No evidence of lossy origin | | **TRANSCODE** | lossless | Originated from a lossy source, decoded to lossless | @@ -102,10 +100,10 @@ Detection logic The verdict is determined in two layers: -**Layer 1 (Primary)** — Cutoff + Steepness. A low cutoff combined with a sharp +**Layer 1 (Primary)** - Cutoff + Steepness. A low cutoff combined with a sharp drop (low steepness) is a definitive sign of a lossy encoder's lowpass filter. -**Layer 2 (Secondary)** — Roughness + Band Ratio. Applied when the cutoff is +**Layer 2 (Secondary)** - Roughness + Band Ratio. Applied when the cutoff is high enough to pass Layer 1. Catches transcodes where the cutoff is near Nyquist but the spectrum still shows quantization artifacts. @@ -154,12 +152,12 @@ Limitations References ---------- -- Nyquist–Shannon sampling theorem — Wikipedia +- Nyquist–Shannon sampling theorem - Wikipedia https://en.wikipedia.org/wiki/Nyquist–Shannon_sampling_theorem -- Equal-loudness contour (Fletcher–Munson curves) — Wikipedia +- Equal-loudness contour (Fletcher–Munson curves) - Wikipedia https://en.wikipedia.org/wiki/Equal-loudness_contour -- LAME MP3 encoder psychoacoustic model — Hydrogenaudio Knowledge Base +- LAME MP3 encoder psychoacoustic model - Hydrogenaudio Knowledge Base https://wiki.hydrogenaudio.org/index.php?title=LAME -- "Audio Authentication Using Spectral Analysis" — University of Michigan +- "Audio Authentication Using Spectral Analysis" - University of Michigan open-access thesis, 2025 https://doi.org/10.7302/28306