diff --git a/bin/inject-middle-theme.py b/bin/inject-middle-theme.py
new file mode 100755
index 0000000..1b70243
--- /dev/null
+++ b/bin/inject-middle-theme.py
@@ -0,0 +1,140 @@
+#!/usr/bin/env python3
+"""Inject the ARRFLIX middle-theme v6 (logo center, Movies/Series left, search right)
+into a Jellyfin web overlay's index.html. Idempotent — run repeatedly without drift.
+
+Markers:
+ /* ARRFLIX-MIDDLE-THEME-BEGIN */ ... /* ARRFLIX-MIDDLE-THEME-END */ inside "), "", src, flags=re.DOTALL)
+src = re.sub(re.escape(""), "", src, flags=re.DOTALL)
+src = re.sub(r".*?", "", src, flags=re.DOTALL)
+
+PATCH = "" + "" + FAVICON_LINKS
+if "" not in src:
+ sys.exit("no in target")
+src2 = src.replace("", PATCH + "", 1)
+
+backup = target.with_suffix(target.suffix + f".bak.pre-middle-v6.{int(time.time())}")
+backup.write_text(target.read_text(encoding="utf-8"), encoding="utf-8")
+target.write_text(src2, encoding="utf-8")
+print(f"OK v6 wrote {len(src2)} bytes to {target}; backup at {backup}")
diff --git a/docs/29-middle-theme-v6-2026-05-09.md b/docs/29-middle-theme-v6-2026-05-09.md
new file mode 100644
index 0000000..141d7c3
--- /dev/null
+++ b/docs/29-middle-theme-v6-2026-05-09.md
@@ -0,0 +1,174 @@
+# 29 — Middle-Theme v6 + Prod Stream Restore (2026-05-09)
+
+> Outcome: ARRFLIX wordmark logo dead-center, Movies/Series nav left, search right; auth-gated so login page is untouched; header hidden during video playback. Same patch shipped to prod simultaneously with the **branding.xml `