Spaceless-language API · kana + kanji + latin

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.

Kinsoku shori · mixed-script breaks · brand-term dictionary
The layout problem

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.

Bad vs good

The same translation, two different renderers

Translation: identical. Layout: not. Annotations call out the kinsoku violations that break Japanese captions in practice.

source transcript · すぐに終わります。本当に。

Generic subtitle API
123
すぐに終わり
ます。本当
に。
1Okurigana split. 終わります is cut between 終わり and ます — the verb is torn apart.
2Punctuation orphaned. A 。 starts the third line — a kinsoku-start violation.
3Three lines, no rhythm. Convention is max two lines that break at phrase joints.
Result: readable, but feels machine-cut. Loses the sentence shape.
ZapCap rendering
すぐに終わります。
本当に。
Verb stays whole. 終わります keeps its okurigana on one line.
Punctuation hugs the previous line. 。 never starts a line — kinsoku-compliant.
Two lines, phrase-aligned. The break lands at the sentence joint.
Result: reads like a hand-set subtitle. Keyword emphasis preserved through the API.
Under the hood

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.

Standards we work to

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.

REFERENCES
  • 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
Use it

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());
QA checklist

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.

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.