⚡ One-Click Chrome Profile Import Auto-Detected
Import existing Google Gemini sessions from your local Google Chrome without typing passwords or doing 2FA.
Live Traffic Flow
Network TopologyReal-time connection status streaming directly from active account pool.
Gemini Router
Ready for requests
Configured Account Profiles 0
🔑 Client API Keys & Token Billing
លក់ Token & គ្រប់គ្រងអតិថិជនគ្រប់គ្រង API Key អតិថិជន, កាត់កងសមតុល្យ Token ស្វ័យប្រវត្តិ, និងបញ្ចូល Token (Top-up) សម្រាប់ MatlyDubber និង OpenAI Client នានា
| អតិថិជន (Client) | API Key | សមតុល្យ Token (Balance) | ប្រើប្រាស់សរុប | ស្ថានភាព | សកម្មភាព (Actions) |
|---|---|---|---|---|---|
|
Loading API Keys & Billing Data...
|
|||||
Live Request Logs
Real-time Telemetry 💾 SQLite DB (Persistent) 0 in DBAudit trace of all calls routed through OpenAI /v1/chat/completions and internal test routes saved permanently in database.
| # | Time | Req ID | Endpoint | Pool |
Routed Account
👁️
|
Model | Status |
Tokens
(in / out)
|
Latency | Action |
|---|---|---|---|---|---|---|---|---|---|---|
| No request activity recorded yet. Send a test chat or API request to stream telemetry. | ||||||||||
Interactive Analytics & Pool Telemetry
● Live Telemetry 📅 Today's Report 💾 SQLite DBReal-time throughput • Model & Account Matrix • Diagnostics • Daily, Weekly, Monthly & Custom Reports saved permanently in SQLite.
24-Hour Throughput Flow (Hourly Buckets)
Hourly BucketsAverage Response Latency by Model (Seconds)
Model SpeedsAccount Quota & Workload Balance (%)
Weekly Limit %Request Outcome & Error Diagnostics
Status CodesInteractive Studio
Round-Robin LiveMulti-Account Gemini Gateway with Realtime Subtitles Studio & Audio Processing
Developer Guide & API Reference
OpenAI v1 Spec 🎙️ Whisper AudioComplete API reference for Chat Completions, Whisper-Compatible Transcriptions, Audio Attachments, and Subtitles Dubbing
from openai import OpenAI
client = OpenAI(base_url="http://localhost:5550/v1", api_key="local")
with open("第001集.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="gemini-3.5-flash-lite",
file=audio_file,
prompt="Transcribe verbatim with timestamps and speaker tags into strict JSON."
)
print(transcription)
curl -X POST http://localhost:5550/v1/audio/transcriptions \
-F "file=@第001集.mp3" \
-F "model=gemini-3.5-flash-lite" \
-F "prompt=Transcribe and translate into Khmer subtitles JSON" \
-F "response_format=json"
from openai import OpenAI
client = OpenAI(base_url="http://localhost:5550/v1", api_key="local")
response = client.chat.completions.create(
model="gemini-4-hydrogen",
messages=[{"role": "user", "content": "Explain quantum computing in 2 sentences."}]
)
print(response.choices[0].message.content)
curl -X POST http://localhost:5550/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-4-hydrogen",
"messages": [{"role": "user", "content": "Hello Gemini!"}]
}'
| Method & Route | Type | Content-Type | Description |
|---|---|---|---|
| POST /v1/audio/transcriptions | OpenAI Spec | multipart/form-data | OpenAI Whisper compatible endpoint. Accepts audio file binary + prompt + model. |
| POST /accounts/test-transcribe | Direct Router | application/json | Server audio path transcribe testing with optional target account and auto-delete. |
| POST /accounts/upload-audio | Storage API | multipart/form-data | Uploads an audio file into gateway storage (./uploads/) and returns file path. |
| GET /accounts/sample-audios | Discovery API | application/json | Scans workspace root and uploads folder for available MP3/WAV audio files. |
| GET /accounts/audio-file?path=... | Stream API | audio/mpeg, audio/wav | Streams local audio file directly to browser for HTML5 audio player preview. |
| GET /sample-response?type=transcribe | Fast Mock | application/json | Returns pre-calculated 30s drama Khmer subtitle segments for UI testing. |
file(required): Binary file data (MP3, WAV, M4A, FLAC, OGG, AAC, WEBM).model(optional): Model ID (defaults togemini-3.5-flash-lite).prompt(optional): Custom instructions (e.g. verbatim, Khmer dubbing schema).response_format(optional):json,verbose_json, ortext.temperature(optional): Float between 0.0 and 1.0.
{
"account_id": "", // Specific account or "" for round-robin
"model": "gemini-3.5-flash-lite",
"audio_path": "第001集.mp3", // Server filename or absolute path
"prompt": "Transcribe with timestamps...",
"auto_delete": true // Automatically delete chat from Gemini
}
const formData = new FormData();
formData.append('file', audioBlob, 'audio.mp3');
formData.append('model', 'gemini-3.5-flash-lite');
formData.append('prompt', 'Transcribe to Khmer drama subtitles JSON');
const res = await fetch('http://localhost:5550/v1/audio/transcriptions', {
method: 'POST',
body: formData
});
const data = await res.json();
console.log(data);
import requests
payload = {
"account_id": "", # Auto round-robin
"model": "gemini-3.5-flash-lite",
"audio_path": "第001集.mp3",
"prompt": "Transcribe verbatim with timestamps into strict JSON",
"auto_delete": True
}
res = requests.post("http://localhost:5550/accounts/test-transcribe", json=payload)
data = res.json()
print("Latency:", data["latency_seconds"], "s")
print(data["response"])
{
"summary": "Short scene dialogue summary",
"segments": [
{
"speaker": "Speaker 1",
"gender": "female",
"emotion": "excited",
"start_seconds": 1.76,
"end_seconds": 4.18,
"content": "轻点姐 疼",
"khmer": "ថ្នមៗផងឈឺណាស់",
"echo": 0
},
{
"speaker": "Speaker 2",
"gender": "male",
"emotion": "serious",
"start_seconds": 4.18,
"end_seconds": 6.20,
"content": "忍着点 牙都烂了",
"khmer": "ទ្រាំបន្តិចទៅធ្មេញពុកអស់ហើយ",
"echo": 0
}
]
}
Requests send dialogue segments with timing (
targetSec), length limits (maxChars), and speaker personas. Gemini Web generates natural spoken Khmer (km-KH) formatted specifically for voiceover dubbing.
import json
from openai import OpenAI
client = OpenAI(base_url="http://localhost:5550/v1", api_key="local")
response = client.chat.completions.create(
model="gemini-3.5-flash-lite",
messages=[{"role": "user", "content": "Translate segments JSON into Khmer..."}]
)
raw_content = response.choices[0].message.content
data = json.loads(raw_content)
for seg in data["segments"]:
print(f"Segment #{seg['id']} [{seg['targetSec']}s] ({seg['speaker']}): {seg['khmer']}")
# Output: #0 [2.5s] (男主角): ថ្ងៃនេះម៉េចក៏អូនមកយឺតម្ល៉េះ
GET /sample-response?type=transcribe
GET /sample-response?type=subtitles
GET /sample-response?type=chat
{
"id": "chatcmpl-9f8a2b...",
"object": "chat.completion",
"created": 1730040800,
"model": "gemini-3.5-flash-lite",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 120,
"completion_tokens": 340,
"total_tokens": 460
}
}
- Client Request: Your script sends standard OpenAI POST to
/v1/chat/completionsor/v1/audio/transcriptions. - Round-Robin Selector: The gateway locks an available ready Google Account session via async queue.
- Playwright Web Automation: Enters prompt or attaches audio into Google Gemini Web UI within an isolated Chromium profile (
./profiles/{acc}). - Streaming & Completion Extraction: Waits for generation to finalize, extracts response text cleanly, and releases the profile concurrency lock.
- OpenAI Response: Returns compliant JSON or chunks via SSE stream.
| # | Code | Status | Meaning & Cause |
|---|---|---|---|
| 1 | 200 | OK | Request succeeded. Returns standard JSON completion or SSE event stream. |
| 2 | 400 | Bad Request | Empty messages list or missing user prompt. |
| 3 | 404 | Not Found | Target profile ID or local avatar PNG not found. |
| 4 | 422 | Unprocessable | Pydantic validation failure (malformed JSON payload). |
| 5 | 500 | Server Error | Playwright execution crash or browser automation failure. |
| 6 | 503 | Unavailable | No active/authenticated Google accounts ready in pool. |
| 7 | 504 | Timeout | Gemini Web UI took longer than max_wait (180s) to finish responding. |