diff --git a/apps/electron/build/icon.icns b/apps/electron/build/icon.icns
index 33c060439..9237768c5 100644
Binary files a/apps/electron/build/icon.icns and b/apps/electron/build/icon.icns differ
diff --git a/apps/electron/build/icon.ico b/apps/electron/build/icon.ico
index 5695d57e2..b3edf7296 100644
Binary files a/apps/electron/build/icon.ico and b/apps/electron/build/icon.ico differ
diff --git a/apps/electron/build/icon.png b/apps/electron/build/icon.png
index 98ad38252..7b8f2649d 100644
Binary files a/apps/electron/build/icon.png and b/apps/electron/build/icon.png differ
diff --git a/apps/expo/assets/adaptive-icon.png b/apps/expo/assets/adaptive-icon.png
index 6451e8480..e145faa52 100644
Binary files a/apps/expo/assets/adaptive-icon.png and b/apps/expo/assets/adaptive-icon.png differ
diff --git a/apps/expo/assets/icon.png b/apps/expo/assets/icon.png
index 98ad38252..aca582759 100644
Binary files a/apps/expo/assets/icon.png and b/apps/expo/assets/icon.png differ
diff --git a/apps/web/index.html b/apps/web/index.html
index 069fc0d45..6f07c4a21 100644
--- a/apps/web/index.html
+++ b/apps/web/index.html
@@ -24,8 +24,8 @@
content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'self' ws://localhost:* http://localhost:* ws://127.0.0.1:* http://127.0.0.1:* wss://* https://* https://hub.xnet.fyi https://cloud.xnet.fyi https://*.xnet.fyi https://demo-bucket.protomaps.com https://tiles.openfreemap.org https://www.youtube.com https://publish.twitter.com https://huggingface.co https://*.huggingface.co https://*.hf.co https://raw.githubusercontent.com; font-src 'self' data:; worker-src 'self' blob:; frame-src https://www.youtube.com https://www.youtube-nocookie.com https://player.vimeo.com https://open.spotify.com https://w.soundcloud.com https://platform.twitter.com https://www.instagram.com https://instagram.com https://www.tiktok.com https://codepen.io https://codesandbox.io https://stackblitz.com https://figma.com https://www.figma.com"
/>
-
+
xNet
diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png
index 407466bc9..2e4d34f04 100644
Binary files a/apps/web/public/apple-touch-icon.png and b/apps/web/public/apple-touch-icon.png differ
diff --git a/apps/web/public/favicon.ico b/apps/web/public/favicon.ico
index 5695d57e2..30c59faf2 100644
Binary files a/apps/web/public/favicon.ico and b/apps/web/public/favicon.ico differ
diff --git a/apps/web/public/favicon.svg b/apps/web/public/favicon.svg
index 038f0d788..172a9baec 100644
--- a/apps/web/public/favicon.svg
+++ b/apps/web/public/favicon.svg
@@ -1 +1,2 @@
-
\ No newline at end of file
+
+
diff --git a/apps/web/public/icons/icon-192.png b/apps/web/public/icons/icon-192.png
index bb5a8c846..212b3ed43 100644
Binary files a/apps/web/public/icons/icon-192.png and b/apps/web/public/icons/icon-192.png differ
diff --git a/apps/web/public/icons/icon-512.png b/apps/web/public/icons/icon-512.png
index f2d96ef78..5e8469e7b 100644
Binary files a/apps/web/public/icons/icon-512.png and b/apps/web/public/icons/icon-512.png differ
diff --git a/scripts/generate-brand-icons.mjs b/scripts/generate-brand-icons.mjs
new file mode 100644
index 000000000..d98b397b2
--- /dev/null
+++ b/scripts/generate-brand-icons.mjs
@@ -0,0 +1,148 @@
+#!/usr/bin/env node
+/**
+ * Regenerate xNet icons and PNG exports: node scripts/generate-brand-icons.mjs
+ * Source artwork lives in site/public/mark.svg and site/public/wordmark.svg.
+ * Uses the site's existing sharp dependency (pnpm --dir site install --ignore-workspace).
+ */
+import { mkdir, readFile, writeFile } from 'node:fs/promises'
+import { createRequire } from 'node:module'
+
+const require = createRequire(new URL('../site/package.json', import.meta.url))
+const sharp = require('sharp')
+const file = (path) => new URL(`../${path}`, import.meta.url)
+const source = await readFile(file('site/public/mark.svg'), 'utf8')
+const body = source.match(/