How languages work in an Open Screenshot Generator project: adding store languages, writing translations with setlocalizedtexts, per-language font and size overrides, and exporting a language.

MITAuto-check passedWriting & Content

Install Osg Languages

skills CLI
$ npx skills add dotnetdreamer/open-screenshot-generator --skill osg-languages -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install dotnetdreamer/open-screenshot-generator osg-languages --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src-tauri/claude-agent/skills/osg-languages .claude/skills/osg-languages && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
osg-languages
GitHub stars
125
Token cost
~1.7k tokens
SKILL.md length
976 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

How languages work in an Open Screenshot Generator project: adding store languages, writing translations with setlocalizedtexts, per-language font and size overrides, and exporting a language.

  • Works in 3 steps: list_translations with filter… → Cell origins: inherited means nothing is… → One set_localized_texts call carries…
  • Asks to translate
  • SKILL.md covers The model, Setting up, Writing translations and Fixing one language, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Osg Languages is an agent skill from dotnetdreamer/open-screenshot-generator. How languages work in an Open Screenshot Generator project: adding store languages, writing translations with setlocalizedtexts, per-language font and size overrides, and exporting a language. Load it when the user asks to translate, localize, add or remove a language, or fix text that does not fit in one language.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Translation and App store release. It works with Tauri. The repository describes itself as: Open source Canva with CLI/GUI, AI Agent, MCP for App Store and Play Store screenshots. Free alternative to AppScreens, AppLaunchpad and Previewed. The licence is MIT.

When your agent uses it

  • Asks to translate
  • Remove a language
  • Fix text that does not fit in one language

Example prompts

  • “/osg-languages”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. list_translations with filter "untranslated" (or all, translated, stale, machine), limit up to
  2. Cell origins: inherited means nothing is written and the base copy shows, so write it. manual
  3. One set_localized_texts call carries every write: elementId, locale and text, plus artboardId

What it can do on your machine

Read from SKILL.md and the folder at commit 556578e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Osg Languages loads about 1.7k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 976 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from dotnetdreamer/open-screenshot-generator at commit 556578e, republished under its MIT licence (© dotnetdreamer). 976 words, ~1,676 tokens.

Download SKILL.mdSave it as .claude/skills/osg-languages/SKILL.md (or your agent's skills folder).
name
osg-languages
description
How languages work in an Open Screenshot Generator project: adding store languages, writing translations with set_localized_texts, per-language font and size overrides, and exporting a language. Load it when the user asks to translate, localize, add or remove a language, or fix text that does not fit in one language.

Languages in depth

The model

A project holds one set of artboards and one layout, and a language is an overlay on it. Per language, an element can have its own text, screenshot, image or recording, and its own fontFamily, fontSize, lineHeight, letterSpacing, fontWeight, textAlign, color, outlineColor, outlineWidth, rotation, scale, position and size, or be hidden. Everything else is shared, so a layout fix lands in every language at once. There is never a per language artboard or a copied project.

Setting up

  • list_supported_locales (query "chinese", "portuguese") is the catalog: the code to add a language by, whether a machine engine can draft it, what App Store Connect and Google Play call it, and the font its script needs.
  • Codes are store locales. en-US and en-GB are different listings, so are zh-Hans and zh-Hant, and pt alone is refused: use pt-BR or pt-PT.
  • add_locales takes locales, plus baseLocale (only while the project has no languages yet), autoFont (default true, substitutes a family that can draw Japanese, Arabic, Thai and so on), autoFit (default true, shrinks a translation that overruns its box) and machineTranslate (default false; leave it off and write the strings yourself).
  • set_base_locale labels the language the design is written in. It is refused once the project has languages.
  • remove_locales deletes every translation stored under those languages. Confirm with the user first.
  • add_locales and set_base_locale look codes up in the catalog. Every other language tool looks them up in the project's own list, which list_locales returns.

Writing translations

  1. list_translations with filter "untranslated" (or all, translated, stale, machine), limit up to 500 (default 100) and offset for paging. Each row has the element id, the base string and a cell per language.
  2. Cell origins: inherited means nothing is written and the base copy shows, so write it. manual means a person or an agent wrote it, so ask before overwriting. auto means the machine engine drafted it, so improve it freely. stale-manual and stale-auto mean the base copy changed after it was translated, so rewrite it.
  3. One set_localized_texts call carries every write: elementId, locale and text, plus artboardId only when the same element id is on two boards. That is one round trip and one undo step. An empty string, or a string identical to the base copy, clears the translation. Everything written this way counts as manual, so a later engine run leaves it alone.

set_localized_text writes a single string.

Translation notes:

  • Translate the benefit, not the words. A literal German headline runs about 40 percent longer and says less.
  • Keep product names, feature names and units as the app shows them.
  • German, Finnish, Russian, Dutch and French run long. Japanese, Korean and Chinese run short and can take a larger size.
  • Arabic, Hebrew, Farsi and Urdu align to the right edge on their own, but nothing mirrors the composition. Move a badge for them with a position override.
  • The copy rules still apply: no em or en dashes, and no period at the end of a headline.

Fixing one language

set_locale_override takes elementId, locale and any of: content, screenshotSrc (a localized screenshot, as an asset ref), imageSrc, mediaId, fontFamily (this also turns off the automatic script substitution for that element), fontSize (this also turns off auto shrink, so the box can clip if the string grows), lineHeight, letterSpacing, fontWeight, textAlign, color, outlineColor, outlineWidth (an auto shrunk translation keeps the shared width, so a thinner one can suit it), rotation, scale, position {x, y}, size {width, height} and hidden (true drops the element in that language only). null hands one property back to the shared design.

reset_locale_overrides takes locale and a scope: element (needs elementId), artboard (needs artboardId) or project. With fields, for example ["fontSize"] or ["position", "size"], it drops only those properties and keeps the copy. Without fields it drops everything, translations included.

Show full SKILL.md (338 more words)Show less

Showing and exporting

  • set_locale switches the canvas to a language; with no locale it returns to the base.
  • export_png and export_all take locale: they switch, capture and switch back.
  • export_all with a locale names its files <locale>01<name>.png. Export only when the user asks.

The machine engine and spreadsheets

  • translate_locales takes locales, only ("empty" by default, "stale" or "all"), includeManual (off protects reviewed copy), guidance (a brief for the AI engine), artboardIds and elementIds. When no engine is configured it says so; write the strings yourself.
  • export_translations_csv returns CSV text: ids, the base language, then a column per language. import_translations_csv reads CSV text back. Run it with dryRun true first and report what would change. An empty cell never clears a translation. You can read a file only in the user's app folder, when they attached one, so this helps when the user pastes a sheet into the chat or the sheet is in that folder.
  • When the user's app folder is attached, the app's own localized strings (lproj, values-<lang>, .arb or locales files, or a String Catalog, an .xcstrings file holding every language) are the best source of real translations: use the app's own words for its features and screens in each language, and write the rest in the same voice. Grep a String Catalog for the keys you need instead of reading it whole; knownRegions in project.pbxproj lists the app's languages.

Troubleshooting

  • "This project has no language X": add it with add_locales first. list_locales is the project's list.
  • A tool refused the base language: the base language is the design itself. Use update_element.
  • Boxes of squares instead of Japanese, Arabic or Thai: the font cannot draw the script. Use list_fonts with script cjk, arabic, urdu, hebrew, thai, devanagari or bengali, and override fontFamily for that language.
  • Text clips although autoFit is on: a fontSize override turned auto shrink off for that element. Clear it with reset_locale_overrides and fields ["fontSize"].
  • A translation shows in list_translations but not on the canvas: the canvas is on another language. Use set_locale.

© dotnetdreamer, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in src-tauri/claude-agent/skills/osg-languages of dotnetdreamer/open-screenshot-generator.

Open the folder on GitHubat commit 556578e

Compare with similar skills

Osg Languages next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Osg Languages compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Osg Languages this skilldotnetdreamer/open-screenshot-generator125—~1.7kAutomated safety check: PassMIT
Update TranslationsRaicuparta/rai-pal734—~839Automated safety check: PassGPL-3.0
Add Tauri Commandopenfootmanager/openfootmanager1.1k—~1.6kAutomated safety check: PassGPL-3.0
Asc Localize MetadataCamilleScholtz/swmpc2395 repos~2.8kAutomated safety check: PassEUPL-1.2
Add UI Stringopenfootmanager/openfootmanager1.1k—~2.6kAutomated safety check: PassGPL-3.0
Asc Metadata Syncn0an/VivaDicta1311 repos~1kAutomated safety check: PassMIT

Similar skills

  • Update Translations

    Raicuparta/rai-pal

    A skill your agent uses when asked to update translations, localize strings, add new languages, fix missing translation keys, or sync language files in this project.

    734 GitHub stars~839 tokensUpdated 3 days ago
    Writing & ContentAuto-check passed
  • Add Tauri Command

    openfootmanager/openfootmanager

    Expose new backend behaviour to the frontend over Tauri IPC.

    1.1k GitHub stars~1.6k tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Asc Localize Metadata

    CamilleScholtz/swmpc

    Automatically translate and sync App Store metadata (description, keywords, what's new, subtitle) to multiple languages using LLM translation and asc CLI.

    239 GitHub starsUsed in 5 repos~2.8k tokens
    MobileAuto-check passed
  • Add UI String

    openfootmanager/openfootmanager

    Add or change any text a player can see, in every locale the game ships in.

    1.1k GitHub stars~2.6k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Asc Metadata Sync

    n0an/VivaDicta

    Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration.

    131 GitHub starsUsed in 1 repo~1k tokens
    Frontend & DesignAuto-check passed
  • Translation Diff Export

    Devolutions/UniGetUI

    Compares UniGetUI JSON locale files against English, identifies untranslated or source-changed keys, and generates patch, reference, and handoff files for a target language.

    26k GitHub stars~1.1k tokensUpdated yesterday
    Writing & ContentAuto-check passed

More from dotnetdreamer/open-screenshot-generator

All 13 skills in this repo
  • App Preview Video

    dotnetdreamer/open-screenshot-generator

    Builds an App Store App Preview video (and a Play Store or landing page promo cut) from a screen recording of the app, using the open-screenshot-generator CLI (osg video): it starts from one of 20…

    125 GitHub stars~3.3k tokensUpdated 2 days ago
    Auto-check passed
  • App Screenshots

    dotnetdreamer/open-screenshot-generator

    Drive Open Screenshot Generator headlessly (puppeteer-core + Edge) to take UI screenshots, add palette elements, upload device screenshots, export artboard PNGs, and regenerate the 3D device…

    125 GitHub stars~5.1k tokensUpdated 2 days ago
    Auto-check: notes
  • Editor Tools

    dotnetdreamer/open-screenshot-generator

    Drives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview…

    125 GitHub stars~3.8k tokensUpdated 2 days ago
    Auto-check passed
  • Gpt4free Provider Sync

    dotnetdreamer/open-screenshot-generator

    Check the latest xtekky/gpt4free releases for provider additions/changes and decide whether Open Screenshot Generator's AI providers need the same.

    125 GitHub stars~2.3k tokensUpdated 2 days ago
    Auto-check passed
  • Stock Image Assets

    dotnetdreamer/open-screenshot-generator

    Add properly licensed Adobe Stock photos to the Images palette library (e.g.

    125 GitHub stars~1.7k tokensUpdated 2 days ago
    Auto-check passed
  • Store Compliance

    dotnetdreamer/open-screenshot-generator

    Checks that rendered store assets will actually be accepted, and then ships them, using the open-screenshot-generator CLI: osg verify audits the produced PNGs and MP4s against App Store and Google…

    125 GitHub stars~3k tokensUpdated 2 days ago
    Auto-check passed

Works with

Questions about Osg Languages

What does Osg Languages do?

How languages work in an Open Screenshot Generator project: adding store languages, writing translations with setlocalizedtexts, per-language font and size overrides, and exporting a language. Osg Languages is an agent skill from dotnetdreamer/open-screenshot-generator. How languages work in an Open Screenshot Generator project: adding store languages, writing translations with setlocalizedtexts, per-language font and size overrides, and exporting a language.

When should I use Osg Languages?

Osg Languages fits situations like: asks to translate; remove a language; fix text that does not fit in one language.

How do I install Osg Languages in Claude Code?

Run `npx skills add dotnetdreamer/open-screenshot-generator --skill osg-languages -a claude-code`. Or copy the skill folder (src-tauri/claude-agent/skills/osg-languages in dotnetdreamer/open-screenshot-generator) into .claude/skills/osg-languages in your project. Claude Code loads it when a task matches its description.

How do I install Osg Languages in Codex?

Run `npx skills add dotnetdreamer/open-screenshot-generator --skill osg-languages -a codex`. Or copy the skill folder (src-tauri/claude-agent/skills/osg-languages in dotnetdreamer/open-screenshot-generator) into .agents/skills/osg-languages in your project. Codex loads it when a task matches its description.

Can I use Osg Languages in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dotnetdreamer/open-screenshot-generator --skill osg-languages -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/osg-languages, .gemini/skills/osg-languages, .github/skills/osg-languages and .opencode/skills/osg-languages in your project.

What does Osg Languages need to run?

SKILL.md names no scripts, command-line tools or credentials: Osg Languages is instructions for the agent only.

Does Osg Languages access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Osg Languages safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Osg Languages use?

Osg Languages is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Osg Languages use?

About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Osg Languages?

Skills that share tags, products or a category with Osg Languages: Update Translations (Raicuparta/rai-pal, 734 stars), Add Tauri Command (openfootmanager/openfootmanager, 1.1k stars), Asc Localize Metadata (CamilleScholtz/swmpc, 239 stars) and Add UI String (openfootmanager/openfootmanager, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Osg Languages?

dotnetdreamer (a GitHub user) maintains it in dotnetdreamer/open-screenshot-generator, which has 125 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.

Source: dotnetdreamer/open-screenshot-generator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.