Aeion Bridge Module Technical Specifications
Local image generation (txt2img / img2img / inpainting / upscaling), text-to-speech, video/music/3D generation, hardware capture, and code execution — 10 admin views, 3 device/audit/model data stores, 50+ MCP tools, outbound WebSocket only.
System Metrics
Image generation
txt2img, img2img, inpainting, upscaling
Text-to-speech
voice generation + voice listing
Video generation
local video synthesis
Music generation
local music/audio generation
Native capture
screen, camera, mic, system info
Code execution
local code execution + terminal
3D rendering
local 3D rendering pipeline
Data stores
3 (device registry, capability audit log, model installations)
Admin views
10 (dashboard, models, compute, terminal, docker, git, system, media, sync, tools)
Nav sections
4 (AI & Compute, DevOps, Hardware, Bridge Dashboard)
MCP tools
50+ (auto-registered whenever a Bridge client connects)
Architecture Overview
| Domain | What it handles |
|---|---|
| **Connection mgmt** | Connection manager, WebSocket session, MCP tool registry |
| **Image generation** | Stable Diffusion / ComfyUI integration |
| **TTS** | Local text-to-speech generation |
| **Video generation** | Local video synthesis |
| **Music generation** | Local audio synthesis |
| **Native capture** | Screen, camera, microphone capture |
| **Code execution** | Local code execution + terminal |
| **3D rendering** | Local 3D rendering pipeline |
| **MCP HTTP routes** | MCP tool HTTP endpoints + TTS streaming |
| **Data stores** | Device registry, capability audit log, model installs |
Connection Manager
A connection manager on the cloud side owns the Bridge WebSocket session for your tenant. It handles discovery (configured URL first, then mDNS/SSDP on the local network), the initial handshake, exponential-backoff reconnection (5s → 10s → 20s → up to 60s, 10 attempts before giving up), and dispatching MCP tool calls to whichever Bridge client is currently connected. If no Bridge client is connected, cloud-only operations continue unaffected and Bridge-dependent calls return a clear "not connected" response.
MCP tool registration:
```typescript // When a Bridge client connects, it registers its available tools: { "method": "tools/register", "params": { "tools": [ { "name": "compute.image.generate", "schema": { ... } }, { "name": "compute.tts.generate", "schema": { ... } }, { "name": "docker.logs", "schema": { ... } }, // ... 50+ tools total ] } }
// Cloud calls a tool the same way it calls any MCP tool: { "method": "tools/call", "params": { "name": "compute.image.generate", "arguments": { "prompt": "...", "model": "flux-schnell" } } } // → Forwarded to the Bridge client over WebSocket // → Executed locally, on your hardware // → Result returned to cloud ```
Image Generation — txt2img, img2img, Inpainting, Upscaling
All image generation is exposed as Bridge MCP tools — compute.image.generate (text-to-image and img2img), compute.image.edit (inpainting), compute.image.upscale, and compute.image.models for listing installed models.
Generation parameters: prompt, negativePrompt, model ("flux-schnell" / "sdxl-turbo" / "sd-3.5" / etc.), width / height (default 1024), steps (default 20), cfgScale (default 7.5), seed, batchSize (default 1), plus optional sourceImage + strength for img2img, controlNet (canny / depth / pose / scribble / tile guidance with guidanceStart / guidanceEnd), and lora (one or more LoRA models with a weight 0.0–2.0).
Result shape: a list of base64-encoded images, the model used, generation time, seed, steps, and cfgScale.
img2img example:
typescript
// Transform product photo to a different style
const result = await bridge.call("compute.image.generate", {
prompt: "professional studio photography, white background, soft lighting",
negativePrompt: "blurry, noise, distorted",
model: "flux-schnell",
width: 1024,
height: 1024,
steps: 25,
cfgScale: 7.5,
// img2img mode:
sourceImage: base64ProductPhoto,
strength: 0.7, // 70% influenced by prompt
// ControlNet for pose preservation:
controlNet: {
model: "canny",
image: base64EdgeMap,
guidanceStart: 0.0,
guidanceEnd: 0.8,
},
});
Inpainting example (parameters: image, mask — white = keep, black = regenerate — prompt, model, strength, default 0.75):
typescript
const inpainted = await bridge.call("compute.image.edit", {
image: base64ProductPhoto,
mask: base64MaskOfBackground, // White = keep product, Black = new background
prompt: "dreamy outdoor garden background, bokeh lights",
model: "flux-schnell",
strength: 0.8,
});
Upscaling (parameters: image, scaleFactor — 2 or 4 — model, default "real-esrgan"):
typescript
const upscaled = await bridge.call("compute.image.upscale", {
image: base64Generated1024,
scaleFactor: 4, // 1024 → 4096
model: "real-esrgan",
});
Model listing:
typescript
const models = await bridge.call("compute.image.models", {});
// → [{ id: "flux-schnell", name: "FLUX.1 [schnell]", type: "txt2img", vramRequired: 8, installed: true, ... }]
Text-to-Speech
TTS is exposed as Bridge MCP tools — compute.tts.generate (generate speech), compute.tts.stream (progressive streaming for real-time use), compute.tts.models (list voices/models), compute.tts.clone (voice cloning), and model management tools for installing/removing local voice models.
Request parameters: text (up to 10,000 characters), voice (voice ID), model ("kokoro" / "bark" / "f5-tts"), speed (0.5–2.0), format ("mp3" / "wav" / "ogg"), sampleRate (24000 / 44100 / 48000). Result: base64-encoded audio, duration, format, model, voice, and text length. Voices carry an id, display name, language, gender, and provider.
TTS streaming (for real-time):
```typescript // For applications that need progressive audio output const stream = await bridge.call("compute.tts.stream", { text: "Welcome to Acme Corp. Your call may be recorded for quality assurance.", model: "kokoro", format: "mp3", speed: 1.0, });
// stream is a ReadableStream<Uint8Array> // Can pipe directly to audio element or WebSocket
// Or use the TTS route directly: POST /bridge/tts/stream { "voice": "en-US-Neural2-F", "model": "kokoro" } // → Starts a streaming TTS session; response carries a session handle ```
Native Capture — System Capabilities
Native capture is exposed as Bridge MCP tools: screen capture (source: screen or a specific window/display, format png/jpg/webp, quality, cursor inclusion), camera capture, microphone recording, and system info (platform, architecture, CPU count, total/free memory, attached GPUs with VRAM and compute capability, OS version, hostname, uptime).
3 Data Stores — Device Registry, Audit Log, Model Installs
Behind the Bridge admin views, the platform keeps three records per tenant:
- Device registry — every Bridge client that has ever connected: name, type (computer / server / IoT / printer / scanner / camera), online/offline/error status, advertised capabilities, first/last seen, client version, network identity (IP, hostname, MAC where available), OS, and attached GPU (name, VRAM, compute capability).
- Audit log — every MCP tool call made through Bridge: which device, which user, which tool, a redacted copy of the arguments, success/error/timeout status, execution time, and a timestamp. This is what powers the compliance exports described below.
- Model installations — what's installed on each device: model type (image / TTS / video / audio / 3D / code), model id and name, install status, size, VRAM required, install/last-used timestamps, and version.
Security — Scope-Based Authorization
API key scopes:
typescript
{
"type": "bridge_client",
"tenantId": "tenant_acme",
"scopes": [
"bridge:read", // List devices, capabilities
"bridge:write", // Configure devices
"ai:generate", // Image generation, TTS, video
"docker:manage", // Docker operations
"terminal:execute", // Shell commands
"git:manage", // Git operations
"files:local", // Local file access
"media:capture", // Screen, camera, mic
],
"deviceId": "bridge_device_id",
"expiresAt": "2027-05-11",
}
Per-tool authorization: every Bridge tool is mapped to exactly one required scope — image/TTS/video generation tools require ai:generate, Docker tools require docker:manage, terminal execution requires terminal:execute, Git tools require git:manage, media capture requires media:capture, and read-only status tools require bridge:read. A tool call is rejected outright if it isn't in that map (unknown tool) or if the calling key's scopes don't include the required one.
Key Architecture Decisions
Connection
Outbound WebSocket only — No firewall/NAT traversal needed, works from any network
Discovery
mDNS + SSDP + config — Auto-finds Bridge on local network, manual config for remote
Authentication
Tenant-scoped API key — Each Bridge device gets scoped key, revokable
Authorization
Scope-based — Minimum privilege, per-capability access control
Transport
WebSocket over HTTPS — Bypasses most corporate firewalls
Offline mode
Cloud-only fallback — If Bridge disconnected, cloud-only operations continue
Reconnection
Exponential backoff — 5s → 10s → 20s → max 60s
Image generation
MCP tool passthrough — Stable Diffusion runs on Bridge, not cloud
WASM Plugin Host + Industrial Protocols
The Bridge desktop client (Tauri/Rust) isn't a fixed binary — it's an extensible local edge:
- Sandboxed WASM plugin host. Third-party plugins ship as WebAssembly modules that the Bridge compiles and runs in an isolated runtime, invoked through plugin hooks. Plugins extend the local agent — new device drivers, data transforms, compute — without host-system access. Autostart-on-login keeps the Bridge and its plugins running headless.
- Modbus — PLC / SCADA control. A native Modbus client lets the platform read and command industrial controllers and equipment on the local network — factory floors, building automation, energy systems — bridging the cloud OS to physical PLCs.
These compose with the Bridge's existing local-AI and hardware paths (image generation, TTS, native capture, local compute) so a customer's own machine becomes a secure execution edge. _(Note: OpenXR / haptics and OFX video-plugin hosting are roadmap, not shipped — the Bridge today covers USB / serial / Bluetooth / HID / camera / printer / Modbus + WASM compute.)_