Translate manga pages on your Cascadia node
Drop page files below. Each page goes to the deployed model running on this machine; results stream back page by page with the Japanese and English side by side. Nothing leaves the node.
scene_id, bubbles[id, kind, text_ja]), prompt rows (system, user, bubble_ids), or plain text with one bubble per line.
Loaded files are shown below before anything is sent. Each page streams back as the model writes it — bubbles fill in line by line — and a full 8–10 bubble page takes seconds to a couple of minutes on the iGPU. Bubble tags are read tolerantly ([b5], [bb5], b5:).
Input formats and output — what to upload, what comes back
Files are detected per document, in this order: one JSON object or array, then JSONL (one JSON object per line), then plain text. Mixed formats inside one file are not supported. Download the sample file to start from.
1 · Page items (JSON or JSONL) — the simplest format
One object per page with the bubbles in reading order. The console builds the production system prompt for you.
{"scene_id": "vol01-p016", "bubbles": [
{"id": "b1", "kind": "speech", "text_ja": "ここの広場は人が多いのですね"},
{"id": "b2", "kind": "thought", "text_ja": "護衛から離れてしまった…"},
{"id": "b3", "kind": "sfx", "text_ja": "ドキッ"}
]}
| field | required | meaning |
|---|---|---|
| scene_id | no | label shown on the result card; defaults to file-001, file-002, … |
| bubbles[].id | no | b1, b2, … (a bare number is accepted); defaults to position |
| bubbles[].kind | no | speech · thought · narration · sfx · sign (free text is passed through); defaults to speech |
| bubbles[].text_ja | yes | the Japanese; ja or text are accepted as aliases |
2 · Prompt rows (JSONL) — the honyaku-bench evaluation format
Exactly what the ft*/*.jsonl prompt files contain: the finished system and user messages. Use this to reproduce an evaluation run bubble for bubble, or to try your own system prompt. Each user line is [bN] (kind) text.
{"scene_id": "minioboe-16-001",
"system": "You translate Japanese manga into natural English…",
"user": "[b1] (speech) ここの広場は人が多いのですね\n[b2] (speech) こちらでの出し物は祭りの目玉の一つなのです",
"bubble_ids": ["b1", "b2"]}
| field | required | meaning |
|---|---|---|
| system | yes | system prompt, sent verbatim |
| user | yes | user message, sent verbatim; bubbles are read back from its [bN] lines for the results table |
| bubble_ids | no | which ids to expect in the answer; defaults to the [bN] tags found in user |
3 · Plain text (.txt)
One bubble per line, treated as a single page of speech bubbles with ids b1…bN.
おい、待てよ! もう遅いって言ったでしょ。
What comes back
The model answers one [bN] English line per bubble. The table shows each bubble's Japanese and English side by side; a red no line returned means the model skipped that id or ran out of tokens. “Raw model output” under each card shows the untouched answer. “Download results” saves JSON:
{"model": "gemma-4-31b-honyaku", "pages": [
{"scene_id": "vol01-p016", "elapsed_s": 6.5, "error": null,
"usage": {"prompt_tokens": 53, "completion_tokens": 37, "total_tokens": 90},
"bubbles": [{"id": "b1", "kind": "speech", "ja": "ここの広場は人が多いのですね", "en": "This square is so crowded."}],
"raw": "[b1] This square is so crowded.\n…"}]}