mcpField
L
layer-localization

layer-localization

github.com/layeraiOther70 installsUpdated today
Repository

About layer-localization

layer-localization is a Layer skill for teams producing multilingual versions of video and image assets. It covers dubbing, burned-in captions, and image text, with each language derived from an approved master.

Key features

  1. 01Video dubbing and text-to-speech
  2. 02Burn captions into video
  3. 03Replace text in images
  4. 04Set type per language on clean art
  5. 05Plan language and asset output matrix

Use cases

  1. 01Create multilingual dubs for a trailer
  2. 02Burn captions for each language version
  3. 03Localize poster or end-card text

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/layerai/skills --skill layer-localization

After installing, type/layer-localizationin Claude Code to confirm it loaded.

Details

From the project README

Layer Localization

Overview

Localisation is one master multiplied by a list of languages. Every language version comes from the approved master, never from another language's version: a German cut made from the French cut carries the French cut's defects into German.

Layer covers three layers of an asset:

  • Voice: dub an existing video, or speak a translated script with text to speech.
  • Captions: burn subtitles into a video.
  • Text in images: replace words in the art, or letter a clean plate per language.

Generation mechanics, the estimate gate and polling are in the layer skill. Setting exact type is layer-typography, and cutting finished videos is layer-video-timeline.

If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add layerai/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

Quick reference

JobRoute
Dub a voiced videouse_case: "dub_video", target_language from the model's dub_languages
New voice-over from a translated lineuse_case: "text_to_speech", speech_language from speech_languages
Burn in captionsuse_case: "video_subtitle", subtitle_preset from subtitle_presets
Change words baked into an imageuse_case: "edit_text"
Exact text per language on clean artrender_text, then compose_image (layer-typography)

Every route is a list_base_models filter except the last, which is two deterministic tools that spend no Creative Units. Read get_base_model on the chosen model before the first run: the language lists, presets and behaviour below live in its capabilities.

Plan the matrix first

Before any run, write down assets by languages: each master file_id, each language's code, and an empty cell for each output file_id. Languages are ISO 639-1 codes (de, ja, pt), which name a language, not a market. If the user needs Brazilian rather than European Portuguese, say that a code alone may not distinguish them and check the model's list.

Get approved translations from the user or their localisation vendor. If you translate copy yourself, label it a draft for review: store copy, legal lines and character names are the user's call.

Price the whole matrix before the first run, and apply the 20 CU gate to the total. Pricing reads the files, so pass each source to the estimate. Text to speech is priced per character, so each language's script is its own estimate. When in doubt whether two languages price apart, estimate one call per language.

Voice

Dubbing keeps the original performance and changes its language. target_language is required on dub models and must be one of the codes in dub_languages. Dub models differ in one decision that matters more than voice quality:

  • Some leave the picture and its length exactly as they are. Choose these when the dub goes back over an existing edit, a timeline, or a fixed-length ad slot.
  • Others re-sync the lips and may lengthen or shorten the clip to the new language's pace. Choose these for an on-screen presenter, never for a clip that must keep its length.

The tool schema currently names ElevenLabs Dubbing for the first behaviour and HeyGen models for the second; confirm with get_base_model, since the catalogue changes.

Text to speech suits a fresh voice-over from a translated script. Leave speech_language unset and the model guesses from the text; set it when lines are short or full of names and loanwords, which are exactly what a model reads in the wrong language. text_normalization controls how numbers and dates are read, which differs by language. Reuse the same voice choices across a language's lines so the character does not change voice mid-campaign.

Translated speech runs longer. German and French lines often outgrow the English, and a 15-second slot does not stretch. Shorten the line, not the pacing: a small speed nudge is fine, a crammed read is not.

Captions

Filter for use_case: "video_subtitle". Spell subtitle_preset exactly as one of the model's subtitle_presets: any other name is quoted at the default style and then refused at launch. Presets listed under subtitle_dynamic_presets animate word by word and bill at a higher rate, so pass the same preset to the estimate. subtitle_alignment, subtitle_color and subtitle_secondary_color apply only where the capabilities report them. The schema takes no caption text, so caption each language's dub rather than the master, and confirm in get_base_model that the model captions that language. For a dub or caption run, attach the source video in the guidance slot get_base_model lists for the model; do not assume one.

Burned-in captions make one file per language, so keep the master without captions. Move captions to the top when the lower third carries a CTA, gameplay UI or a lower-third title.

Text in images

The cheapest localisation is art with no words baked in. Generate the master clean and letter each language with render_text and compose_image.

Copy burned into a video frame, such as an end card, is out of reach of image tools. Ask for the text-free end card first. Failing that, cover the end-card span on a render_video_timeline edit (layer-video-timeline): an image or solid item over the old copy, and a text item set in the language's font with font_file_id.

  • Script coverage. A Latin brand font usually has no CJK, Cyrillic, Thai or Arabic glyphs, and missing glyphs render as empty boxes. Pick a family that covers the script (a Google Fonts family name in font_family works) and look at every render.
  • Direction and shaping. For right-to-left and joined scripts, check visually that letters join and run in the right direction. If they do not, report it rather than ship it.
  • Expansion. Size the text box for the longest language and render every language into the same box. When render_text refuses copy with the size it needs, shorten the copy or lower font_size consistently across the set, so one market's title is not visibly smaller.

When the words are already baked in, run an edit_text model on the master with the exact replacement string quoted. Check it letter by letter. If it fails, remove the text once to a clean plate (an erase_object or inpainting model) and letter the plate per language.

Worked example

"Localise our 15-second 9:16 trailer and its end card into German, Japanese and Portuguese."

  1. Matrix: trailer and end card masters by de, ja, pt. Ask whether Portuguese means Brazil, and for approved translations of the end card's two lines.
  2. list_base_models with use_case: "dub_video"; get_base_model on candidates. The trailer must stay 15 seconds, so pick one that keeps picture and length, and confirm all three codes are in its dub_languages.
  3. Estimate all three dubs with the trailer attached. The end cards need no estimate: they are deterministic. Present the total; above 20 CUs wait for an explicit yes.
  4. execute_forge per language with target_language; poll each with get_forge_run at poll_interval_seconds. Watch each dub against the picture.
  5. End card: the master has no text, so render_text each language into one shared box, the Japanese with a family that covers kana and kanji, then compose_image onto the master.
  6. Fill the matrix with every output file_id and hand it over.

Common mistakes

  • Localising from another language's version instead of the master.
  • A lip-resyncing dub dropped into a fixed-length edit, which then runs long or short.
  • Estimating one language and assuming the rest cost the same.
  • A brand font that lacks the script, shipped with empty boxes.
  • Letting each language shrink its own font size until its copy fits.
  • Translating store or legal copy and presenting it as final.
  • Burning captions into the only copy of the master.

Comments

Markdown supported