site: bergamot.x landing page — on-device translator provider

Registered bergamot.x on-chain with {s3: bns/bergamot/, u: silentmode.st/bergamot}.
The page explains what Bergamot (Mozilla's WASM translator) will add to Theseus:
an on-device translation provider that never sends the page to a server, as an
alternative to the hosted LibreTranslate backend. Models mirror from Sia on
first use, one direction per download.

Lives at:
  - https://silentmode.st/bergamot  (ICANN)
  - https://silentmode.st/bns/bergamot.x/  (gateway proxy)
  - bergamot.x  (BNS; Sia-backed through bns/bergamot/)

The provider stub comes in a follow-up Theseus commit.
This commit is contained in:
Silent Mode 2026-10-04 14:15:01 +02:00
parent 071760c544
commit c254582a23

194
bergamot/index.html Normal file
View file

@ -0,0 +1,194 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bergamot — on-device translation — Silent Mode</title>
<meta name="description" content="Bergamot: web page translation that runs entirely on your computer. No server sees the page you are reading. Marian NMT compiled to WebAssembly, Mozilla's language models mirrored on Sia. Comes to Theseus Navigator as a provider option alongside LibreTranslate.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Silent Mode">
<meta property="og:title" content="Bergamot — on-device translation — Silent Mode">
<meta property="og:description" content="Web page translation that runs entirely on your computer. No server sees the page you are reading.">
<meta property="og:url" content="https://silentmode.st/bergamot">
<meta property="og:image" content="https://silentmode.st/brand/og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<link rel="stylesheet" href="/shared.css?v=20260910">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<style>
.pair-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin-top:1rem}
.pair{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.pair .nm{font-weight:600;font-size:13.5px}
.pair .sub{color:var(--mut);font-size:12px;margin-top:3px}
.pair .st{color:var(--dim);font-size:11px;margin-top:5px;letter-spacing:.04em;text-transform:uppercase}
.vs{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:1rem}
@media (max-width:720px){.vs{grid-template-columns:1fr}}
.vs .col{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.vs .col h3{color:var(--ink);margin:0 0 .4rem}
.vs .col ul{margin:.3rem 0 0;padding-left:1.2rem;color:var(--mut);font-size:13.5px;line-height:1.7}
.vs .col .tag{font:600 11px/1 system-ui;letter-spacing:.22em;text-transform:uppercase;margin-bottom:.4rem;color:var(--acid)}
.vs .col.alt .tag{color:var(--sia)}
</style>
</head>
<body>
<nav class="topnav">
<a class="brand" href="/"><svg class="logo" viewBox="0 0 32 20" aria-hidden="true"><rect class="l1" x="1.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/><rect class="l2" x="13.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/></svg>Silent <span class="g">Mode</span></a>
<a href="/theseus">Theseus</a>
<a href="/prometheus">Prometheus</a>
<a href="/sirius">Sirius</a>
<a href="/hephaestus">Hephaestus</a>
<a href="/helios">Helios</a>
<a href="/hermes">Hermes</a>
<a href="/tools">Tools</a>
</nav>
<header class="hero">
<div class="mark">🌿</div>
<h1>Bergamot <span class="pill p-designed" style="vertical-align:middle;font-size:12px;margin-left:.6rem">designed · not yet built</span></h1>
<p class="tag">Web page translation that runs entirely on your computer.
The page's text never leaves the device — no cloud, no third party, nobody
building a profile of what you read.</p>
</header>
<div class="wrap narrow">
<section class="plain">
<h2>The one idea that makes this different</h2>
<p class="lede">Every hosted translator — Google, DeepL, LibreTranslate — reads
the page for you by taking a copy. The server sees the text, the user, the
page, the time, and often keeps it. Even an operator who promises not to log
is one subpoena, one breach, or one quiet policy change away from the opposite.</p>
<div class="note"><b>The Bergamot pitch.</b><br>
Mozilla's Bergamot project compiled a real neural translator (Marian NMT) to
WebAssembly, and trained a set of small language models that run on a laptop
CPU in milliseconds per sentence. Theseus will ship Bergamot as a built-in
translator provider: pick a language, download its ~17 MB model once, and
translation happens inside the tab. The server you'd otherwise send the page
to isn't in the loop.</div>
</section>
<section>
<h2>How it will work in Theseus</h2>
<ol class="steps">
<li><b>Pick on-device translation.</b>
<span>Settings › Language has a <code class="inline">Translator engine</code>
row with two options: <i>LibreTranslate (hosted — fast, uses our server)</i>
and <i>Bergamot (on-device — nothing leaves your computer)</i>. Default is
LibreTranslate; flip to Bergamot once a model is downloaded.</span></li>
<li><b>Download a language pack.</b>
<span>Click a language that isn't installed yet in the language picker.
Theseus fetches the Argos-equivalent Bergamot model from
<code class="inline">bergamot.x</code>'s Sia bucket (that's this page's
other half: the model distribution lives here), verifies the SHA-256,
installs it under your Theseus profile. One pack = one direction, ~17 MB.</span></li>
<li><b>Translate the page.</b>
<span>Same flow as today — the chip picks up a page in a language
different from yours, offers to translate, the WASM engine does the work
in a Web Worker so the UI stays smooth. No request goes to any server.</span></li>
<li><b>Keep the model, or delete it.</b>
<span>Each downloaded pack is a file in your profile. Delete it and the
language falls back to the hosted provider (if enabled) or disappears
from the "installed" list.</span></li>
</ol>
</section>
<section>
<h2>Hosted vs on-device</h2>
<p class="lede">Two providers, same chip, pick per preference. Many users will
want both — fast fallback on obscure languages, local for everyday reading.</p>
<div class="vs">
<div class="col">
<div class="tag">libretranslate — hosted</div>
<h3>Fast, no setup</h3>
<ul>
<li>Nothing to download; works the first time you pick a language</li>
<li>Larger model (Argos) → better translations on long sentences</li>
<li>The page's text is POSTed to <code class="inline">silentmode.st/libre</code></li>
<li>Only logs the request's existence, not its content (by policy, not by maths)</li>
</ul>
</div>
<div class="col alt">
<div class="tag">bergamot — on-device</div>
<h3>Private, no server in the loop</h3>
<ul>
<li>One-time download per language direction (~15–25 MB)</li>
<li>Smaller model → good on short sentences, loses nuance on long ones</li>
<li>Nothing leaves your computer; works on a plane</li>
<li>Mozilla-origin models (<a href="https://github.com/mozilla/firefox-translations">firefox-translations</a>)
mirrored to Sia so you don't need their CDN</li>
</ul>
</div>
</div>
</section>
<section>
<h2>Supported directions (planned)</h2>
<p class="lede">The first batch mirrors Theseus's current hosted set — the
languages the chip already handles — so flipping to Bergamot never loses a
language that was working before. Each pair is one direction; the client
pairs <code class="inline">src→en</code> + <code class="inline">en→dst</code>
automatically when there is no direct <code class="inline">src→dst</code>.</p>
<div class="pair-grid">
<div class="pair"><div class="nm">en → es / es → en</div><div class="sub">Spanish</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → fr / fr → en</div><div class="sub">French</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → de / de → en</div><div class="sub">German</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → el / el → en</div><div class="sub">Greek</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → ru / ru → en</div><div class="sub">Russian</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → it / it → en</div><div class="sub">Italian</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → pt / pt → en</div><div class="sub">Portuguese</div><div class="st">to mirror</div></div>
<div class="pair"><div class="nm">en → nl / nl → en</div><div class="sub">Dutch</div><div class="st">to mirror</div></div>
</div>
<p class="tag" style="margin-top:1rem">The index of what's actually on Sia will live at
<code class="inline">bergamot.x/index.json</code> and will drive the picker's
"Install" buttons. Empty today — the first upload lands when Theseus's
Bergamot provider is wired up.</p>
</section>
<section>
<h2>Honest boundaries</h2>
<div class="grid">
<div class="card">
<h3>Smaller model = different quality</h3>
<p>Bergamot models are tuned for size and speed, not scale. Short sentences
read great; long literary paragraphs will sound more rigid than a hosted
translator produces. Pick the engine by the page.</p>
</div>
<div class="card">
<h3>WebAssembly + a few modern APIs</h3>
<p>Needs SharedArrayBuffer, WASM SIMD, and cross-origin isolation to run
fast — all of which Theseus already enables for the right contexts.
Older sandboxed add-on hosts without these would get a slow path.</p>
</div>
<div class="card">
<h3>No automatic model updates</h3>
<p>Downloaded packs sit in your profile until you upgrade them. If the
upstream model improves, Theseus will offer the newer pack in Settings;
it does not swap it under you.</p>
</div>
</div>
</section>
<div class="note warn"><b>Status: name registered, provider stub landing in the next
Theseus. Model mirror empty.</b><br>
<code class="inline">bergamot.x</code> is reserved on-chain and the provider
radio ships in Theseus so the plumbing is in place; the Bergamot runtime and
model mirror follow in a later release. Until then, picking <i>Bergamot</i>
in Settings routes the chip back to LibreTranslate with a one-time notice.
This page exists to explain where it is going.</div>
</div>
<footer>
<div>Silent Mode — a Deviant project.</div>
<div class="fine">Bergamot is a Mozilla project under the Mozilla Public License;
the compiled WebAssembly runtime and the trained translation models are
distributed by Silent Mode under the same terms. See
<a href="https://github.com/mozilla/firefox-translations">github.com/mozilla/firefox-translations</a>
and <a href="https://browser.mt">browser.mt</a> for the upstream work.</div>
</footer>
</body>
</html>