Japanese Subtitles API
Captions that obey kinsoku, not character counts
Render styled Japanese captions into video through one API. ZapCap handles the parts generic subtitle tools get wrong on Japanese — line breaks that strand 、 and 。 at the start of a line, small kana like っ and ゃ ripped from the character they modify, and brand names split across a kana/kanji/latin boundary.
Why generic subtitle APIs break on Japanese
Japanese mixes three native scripts plus latin and numerals in a single line, and it carries kinsoku shori — a formal set of line-break suppression rules. Ignore them and the captions read like a machine cut them, even with a flawless translation.
Forbidden line-start characters
Sentence punctuation (。 、), closing brackets (」 )), and small kana (ぁ ゃ っ ー) must never start a line. Kinsoku shori pulls them onto the previous line.
Three scripts, no spaces
Hiragana, katakana, and kanji run together with no whitespace. Naive splitters break inside a word — or worse, between a kanji and the okurigana that completes it.
Mixed-script and latin runs
A line can switch from kanji to katakana to a latin product name mid-phrase. Breaking inside a latin token, or between a number and its counter, looks broken to a native reader.
The same translation, two different renderers
Translation: identical. Layout: not. Annotations call out the kinsoku violations that break Japanese captions in practice.
source transcript · すぐに終わります。本当に。
ます。本当
に。
本当に。
How ZapCap renders Japanese captions
Kinsoku shori
Forbidden line-start characters (。 、 」 ) and small kana ぁ ゃ っ ー) are pulled onto the previous line; forbidden line-end characters (「 () attach to the next.
Mixed-script segmentation
Breaks land at phrase boundaries across hiragana, katakana, and kanji — never inside a verb stem and its okurigana, and never between a number and its counter.
Latin and katakana runs kept whole
Latin product names and katakana loanwords are treated as single tokens, so a line never breaks mid-word on a brand term.
Max two lines, phrase-aligned
When wrapping is needed, the break lands at a phrase joint. Three-line cues are split into two cues instead.
Brand-term dictionary
Add product names and approved katakana spellings to the dictionary — transcription hints that bias recognition toward your brand terms. Carry an approved transcript through and the text renders verbatim.
Font fallback chain
Renders with Hiragino Kaku Gothic / Yu Gothic / Noto Sans JP stacks server-side. No client-side font availability — what you see in the MP4 is what every viewer sees.
Built on published references — not magic
Kinsoku shori isn’t bespoke. It’s formalized by Unicode line breaking, the W3C’s Japanese layout requirements, and Netflix’s professional subtitling guidelines. ZapCap implements them; this page cites them.
If you’re evaluating us against another captioning vendor, ask whether they implement kinsoku shori. The answers tell you a lot.
- Unicode Line Breaking Algorithm (UAX #14) — the basis for language-aware line breaks, including CJK kinsoku classes. unicode.org/reports/tr14
- W3C · Requirements for Japanese Text Layout (JLREQ) — kinsoku shori, line-start/line-end prohibition rules. w3.org/TR/jlreq
- Netflix · Japanese timed text style guide — character-per-line limits, two-line max, line-break placement. partnerhelp.netflixstudios.com
- MDN · CSS line-break — language-aware line-breaking property. developer.mozilla.org
Render Japanese captions in one task call
Set language on the render task. Optional: send an approved translation (skip retranscription) and a brand-term dictionary to bias recognition toward your product names and katakana spellings.
- Set language "ja" on the render task
- Bring your own translation via the SRT-to-burned-in workflow
- Mix with caption style templates — Japanese with a Beast preset works
- One source video → multiple language renders, consistent style
// Japanese caption render — auto-translate path
// No SDK — call the REST API with fetch.
// fetch IDs from GET /templates
const task = await fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: 'POST',
headers: { 'x-api-key': process.env.ZAPCAP_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
templateId: '<TEMPLATE_UUID>',
language: 'ja',
renderOptions: {
subsOptions: { emphasizeKeywords: true },
},
// Transcription hints — biases recognition toward your brand terms.
dictionary: ['ACME', 'ターボマックス'],
notification: {
type: 'webhook',
notificationsFor: ['render'],
recipient: 'https://acme.com/hooks/zapcap',
},
}),
}).then(r => r.json());
// Bring-your-own translation
const task2 = await fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: 'POST',
headers: { 'x-api-key': process.env.ZAPCAP_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
templateId: '<TEMPLATE_UUID>',
language: 'ja',
transcript: jaApprovedTranscript,
notification: {
type: 'webhook',
notificationsFor: ['render'],
recipient: 'https://acme.com/hooks/zapcap',
},
}),
}).then(r => r.json());Before you ship Japanese captions
Six checks the rendering pipeline can’t do for you.
- Confirm kinsoku at the breaks. No 。 、 」 or small kana stranded at the start of a line in the rendered MP4.
- Define a brand-term dictionary. Product names and approved katakana spellings bias transcription; bring an approved transcript for copy that must not be re-translated.
- Cap at two lines, phrase-aligned. Split into multiple cues if a single one exceeds the per-line character count.
- Check reading speed. Aim for the Netflix Japanese guide’s per-second character count.
- Safe-zone check on 9:16. Mixed-script lines can run wide; overrun shows up faster than on English.
- Native-speaker pass on the rendered MP4, not the source transcript. Kinsoku problems only show up at render time.
Use cases that need Japanese rendering
Japanese subtitle API questions
Yes. Forbidden line-start characters such as 。 、 」 ) and small kana such as ぁ ゃ っ ー are pulled onto the previous line, while opening brackets attach to the next line, following Unicode UAX #14 and W3C JLREQ rules.
Render Japanese subtitles through the API
Kinsoku shori, mixed-script line breaks, a brand-term dictionary, and bring-your-own translation — all in one task call. Pricing is $0.10/min of rendered video.