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…

MITAuto-check passedMobile

Install Store Compliance

skills CLI
$ npx skills add dotnetdreamer/open-screenshot-generator --skill store-compliance -a claude-code

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

GitHub CLI
$ gh skill install dotnetdreamer/open-screenshot-generator store-compliance --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/skills/store-compliance .claude/skills/store-compliance && 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
store-compliance
GitHub stars
126
Token cost
~3k tokens
SKILL.md length
1,692 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

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…

  • Works in 5 steps: Never put a key in osg/osg.config.ts.… → Never paste a key into a command line.… → Point at a file, and gitignore the file.… → …
  • Tasks that involve App store release
  • SKILL.md covers The exit codes are the contract, What verify checks, and what…, App Store: required tiers and… and Google Play: slots and limits, plus 3 more sections
  • Calls npx; needs OSG_ASC_KEY_ID

What it does

Store Compliance is an agent skill from 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 Play rules (required size tiers, accepted alternatives, per locale caps, transparency, file size, aspect ratio, preview duration) and exits 3 on a failure, and osg upload pushes the set to App Store Connect or Google Play with the user's own developer credentials. Use this whenever someone asks whether their screenshots…

Its SKILL.md is about 3k 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 Mobile, covering App store release. It works with App Store Connect and 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

  • Tasks that involve App store release

Example prompts

  • “check these are valid”
  • “upload to App Store Connect”
  • “push to Play”
  • “/store-compliance”

Requirements

  • Node.js

Workflow steps

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

  1. Never put a key in osg/osg.config.ts. That file is committed. There is no credential field in
  2. Never paste a key into a command line. It lands in shell history and in your transcript.
  3. Point at a file, and gitignore the file. Apple's key is a .p8, Google's is a service account
  4. Never echo, cat or print a key file, and never read one into your own context to "check it".
  5. If the user pastes a key into the conversation anyway, tell them to rotate it.

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

    Shell commands in SKILL.md call:

    • npx

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

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OSG_ASC_KEY_ID

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

Context cost

Store Compliance loads about 3k tokens when it runs. Until then it costs about 206 tokens; SKILL.md has 1,692 words of instructions outside code blocks.

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

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). 1,692 words, ~3,025 tokens.

Download SKILL.mdSave it as .claude/skills/store-compliance/SKILL.md (or your agent's skills folder).
name
store-compliance
description
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 Play rules (required size tiers, accepted alternatives, per locale caps, transparency, file size, aspect ratio, preview duration) and exits 3 on a failure, and `osg upload` pushes the set to App Store Connect or Google Play with the user's own developer credentials. Use this whenever someone asks whether their screenshots meet the store requirements, what sizes they need, why App Store Connect rejected an image, how many screenshots are allowed, or says things like "check these are valid", "upload to App Store Connect", "push to Play", "is this ready to submit" or "the store rejected my screenshots".
license
MIT
metadata.package
open-screenshot-generator
metadata.homepage
https://openscrgen.app

Ship readiness: verify, then upload

The end state: osg verify exits 0, osg/osg.manifest.json describes every file that exists, and either the set is uploaded to the right listing or the user has an exact list of what to fix.

Run verify before every upload, without exception. Both stores accept an upload and then fail it asynchronously, App Store Connect hours later during asset processing, and a failure at that point gives you a state code rather than an explanation.

The exit codes are the contract

CodeMeaningWhat to do
0everything passedship it
1usage, config or environmentfix the config or the machine, nothing was produced
2the browser, the page or a tool call faileda render problem, re-run with --verbose
3the files exist and a store rule rejects themfix the named rule and re-render
bash
npx -y open-screenshot-generator@0 verify
npx -y open-screenshot-generator@0 verify --json

--json prints one machine readable object with a row per finding, which is what to use in CI and what to parse when reporting back.

What verify checks, and what each failure means

FindingWhat it meansFix
Missing tiera format in formats produced no filere-run render, or drop the tier from the config
Wrong pixel sizethe board size is not an accepted size for that tierset the artboard to the preset, or change formats
Too many imagesmore than the store's cap for that slot and localedrop boards, the first two are what people see anyway
Too few imagesunder the store's floor (Play needs 2 phone shots)add a board
Transparencythe PNG carries an alpha channelgive the board an opaque background, then re-render
File too largeover the store's per image limitreduce visual complexity, or render the smaller accepted size
Aspect ratioPlay's long side is more than twice the short siderender the Play tier, not the iPhone tier, see below
Locale gapone language has fewer boards than the basethe missing boards did not render, check the locale list
Placeholder copya headline still says the template's text, or a board is still named "Blank Artboard"rename the board and write the copy, the board name becomes the file name
Empty device framea device slot still holds shipped placeholder artplace the app's real screenshot in it
Video durationoutside 15 to 30 secondsset_preview_duration, or video.duration
Video dimensionsnot 886x1920 or 1920x886re-render, the size is forced by the mode
Video codecnot H.264the browser has no H.264, see app-preview-video

Placeholder copy and an empty device frame are not store rules. They are the two failures that actually get shipped, so verify treats them as failures too.

App Store: required tiers and accepted alternatives

You do not need every size. Apple scales the required tier down to the smaller ones.

SlotDefault sizeAlso acceptedStatus
iPhone with Dynamic Island (medium display)1206x26221179x2556, or the rotated sizesrequired for every iPhone app
iPhone with Dynamic Island (large display)1290x27961260x2736, 1320x2868, or the rotated sizesoptional separate slot
iPad 13 inch2064x27522048x2732required if the app runs on iPad
Apple Watch422x514410x502, 416x496, 396x484, 368x448, 312x390required for a watch app
Mac2560x16002880x1800, 1440x900, 1280x800, always 16:10required for a Mac app
Apple TV1920x10803840x2160required for a tvOS app
Apple Vision Pro3840x2160required for a visionOS app

Older iPhone and iPad slots (6.5 inch, 5.5 inch, 4.7 inch, iPad 11 inch, 10.5 inch, 9.7 inch) still exist and are optional. Fill them only if the user asks. Every iPhone and iPad slot also accepts the rotated size, so a landscape app renders the same tier sideways. Watch, Mac, TV and Vision are one orientation only.

The default CLI format is ios-6-3 (1206x2622), and ios and iphone mean the same. ios-6-9 and ios-large convert to the optional large slot at 1290x2796. The bundled templates are built at 1206x2622, so a project built from one already fits the required slot. Other canvas presets require creating or resizing the artboards first, then rendering or uploading with --formats as-is to keep their dimensions.

Caps and formats:

  • 10 screenshots maximum per display type per localization, and at least one is required.
  • 3 App Previews maximum per localization per device family.
  • PNG or JPEG, RGB, flattened. No transparency.
  • The pixel size has to be exactly one of the sizes that display type accepts. Nothing is resized for you, and a size that is close is not accepted.

Google Play: slots and limits

SlotSize ruleCount
Phone screenshots320 to 3840 px per side, long side at most 2x the short side2 to 8, at least 2 required
7 inch tabletsame rule, 1200x1920 recommendedup to 8
10 inch tabletsame rule, 1600x2560 recommendedup to 8
Wear OS, Android TVsame ruleup to 8 each
Feature graphicexactly 1024x5001, required on every listing
App iconexactly 512x5121, required to publish
Android TV bannerexactly 1280x7201

PNG or JPEG, 8 MB maximum per image.

Play's aspect rule blocks the iPhone canvas. 1206x2622 is 2.17:1, and Play needs the long side to be at most twice the short side. Play rejects it. Use the play-phone preset (1080x1920) for the Play tier rather than re-uploading the App Store files. That rule is Google's, verified in their own docs, and it is not negotiable.

Play also wants a promo video as a YouTube URL, not an uploaded file. The styled video mode produces a good file for that, but you upload it to YouTube and paste the link into Play Console.

Uploading

bash
npx -y open-screenshot-generator@0 verify && npx -y open-screenshot-generator@0 upload

The upload uses the user's own developer credentials and talks to Apple and Google directly. No server belonging to this project is involved at any point.

Show full SKILL.md (733 more words)Show less
Credentials, handled safely

Rules, in priority order:

  1. Never put a key in osg/osg.config.ts. That file is committed. There is no credential field in it, on purpose.
  2. Never paste a key into a command line. It lands in shell history and in your transcript.
  3. Point at a file, and gitignore the file. Apple's key is a .p8, Google's is a service account JSON. Add both to .gitignore before you download them.
  4. Never echo, cat or print a key file, and never read one into your own context to "check it". You do not need to see it to use it.
  5. If the user pastes a key into the conversation anyway, tell them to rotate it.

Set the environment variables the CLI documents, then run the command. Confirm the exact names with osg upload --help for the release in use:

bash
export OSG_ASC_ISSUER_ID=...          # App Store Connect API issuer id, a UUID
export OSG_ASC_KEY_ID=...             # the key id
export OSG_ASC_KEY_FILE=./secrets/AuthKey_XXXX.p8
npx -y open-screenshot-generator@0 upload
powershell
$env:OSG_ASC_ISSUER_ID = '...'
$env:OSG_ASC_KEY_ID    = '...'
$env:OSG_ASC_KEY_FILE  = './secrets/AuthKey_XXXX.p8'
npx -y open-screenshot-generator@0 upload

PowerShell has no inline environment prefix, so VAR=x command does not work there. Set them on their own lines, as above.

For Google Play, one variable pointing at the service account JSON:

bash
export OSG_PLAY_KEY_FILE=./secrets/play-service-account.json
npx -y open-screenshot-generator@0 upload --store play

The Apple key needs the App Manager role. The Play service account has to be invited in Play Console and the Android Developer API has to be enabled on the project.

What each store actually does with the upload

App Store Connect reserves each asset, uploads it in chunks to pre signed URLs, then commits it with a checksum. Every one of those calls returns 2xx for a wrong sized image. Apple then processes the asset asynchronously and it fails minutes to hours later. The upload therefore polls the delivery state and reports what Apple actually concluded, which is the only reason it can be trusted when it says the upload worked. Do not treat a fast success message from any other tool as acceptance.

Screenshots hang off a set scoped to (version, localization, display type), so a mixed project is grouped by resolved display type and each group gets its own set.

Screenshots are frozen once a version is submitted. Only a version in an editable state accepts them, and writing to one in review comes back 409. The version has to leave review first. Nothing is preselected for you, because arming an upload against a frozen version is worse than asking.

Google Play opens a staged edit, uploads into listings/<language>/<imageType>, validates, then commits. Nothing is public until the commit, and a thrown error discards the whole edit, so a failed run cannot leave a half updated listing. Some accounts refuse automatic review submission and say so in the commit error; the client retries without sending for review and reports that it did.

Troubleshooting

Apple returns 401 or 403. Either the key is wrong or the key does not have the App Manager role. The two are indistinguishable in practice, so check both rather than guessing.

Play returns 403. Almost always setup, not code: the service account was never invited in Play Console, or the Android Developer API is not enabled.

Play returns 404. A package name typo, or an app that has never been published. Play refuses API edits before the first release.

Apple accepted it and then the screenshot disappeared. The asset delivery state went to FAILED. That is a size or a format problem, and osg verify catches every case of it before the upload.

"This version cannot be edited." It is in review or already released. Create the next version in App Store Connect first.

Verify passes and the store still complains about content. The mechanical rules are what verify covers. Review guidelines are not mechanical: do not show a device frame inside the screenshot of a different device, do not show competing platforms' branding, do not put an award or a rating in the image that the app did not earn, and do not show UI that is not in the shipped build. Those are human review calls and they are also the ones that cost a week.

A screenshot shows content that is not in the build. That is the most common human review rejection of all. If the design invented a stat, a chart or a testimonial, change it.

  • store-screenshots for producing the set in the first place
  • app-preview-video for the video rules, which are stricter than the image rules
  • store-localization for per locale caps and folders
  • editor-tools for fixing what verify flagged, one element at a time

© 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 skills/store-compliance of dotnetdreamer/open-screenshot-generator.

Open the folder on GitHubat commit 556578e

Compare with similar skills

Store Compliance 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.

Store Compliance compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Store Compliance this skilldotnetdreamer/open-screenshot-generator126—~3kAutomated safety check: PassMIT
Release Asc CLIrorkai/App-Store-Connect-CLI7.7k—~2.4kAutomated safety check: PassMIT
App Store Release Flowrorkai/app-store-connect-cli-skills1.1k2 repos~2kAutomated safety check: PassMIT
App Store Submission Healthrorkai/app-store-connect-cli-skills1.1k2 repos~2.2kAutomated safety check: PassMIT
App Store Preflight Skillstruongduy2611/app-store-preflight-skills1.4k—~1.4kAutomated safety check: PassMIT
Asc Localize MetadataCamilleScholtz/swmpc2395 repos~2.8kAutomated safety check: PassEUPL-1.2

Similar skills

  • Release Asc CLI

    rorkai/App-Store-Connect-CLI

    Publish and verify a new release of the App-Store-Connect-CLI repository.

    7.7k GitHub stars~2.4k tokensUpdated today
    MobileAuto-check passed
  • App Store Release Flow

    rorkai/app-store-connect-cli-skills

    Orchestrates App Store releases with the asc CLI: staging a version, uploading or building, publishing and submitting for review, with dry-run and confirmation gates.

    1.1k GitHub starsUsed in 2 repos~2k tokens
    MobileAuto-check passed
  • App Store Submission Health

    rorkai/app-store-connect-cli-skills

    Diagnoses why an App Store version cannot be submitted or is stuck in review, using the asc CLI for validation, repair routing, status checks and retry decisions.

    1.1k GitHub starsUsed in 2 repos~2.2k tokens
    MobileAuto-check passed
  • App Store Preflight Skills

    truongduy2611/app-store-preflight-skills

    Scan an iOS/macOS Xcode project for common App Store rejection patterns before submission.

    1.4k GitHub stars~1.4k tokensUpdated 4 mo ago
    MobileAuto-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
  • App Store Connect App Creator

    rorkai/app-store-connect-cli-skills

    Creates a new App Store Connect app record by driving the New App form through browser automation, for cases where no public API covers app creation.

    1.1k GitHub starsUsed in 3 repos~1.5k tokens
    MobileAuto-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…

    126 GitHub stars~3.3k tokensUpdated 3 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…

    126 GitHub stars~5.1k tokensUpdated 3 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…

    126 GitHub stars~3.8k tokensUpdated 3 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.

    126 GitHub stars~2.3k tokensUpdated 3 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.

    126 GitHub stars~1.7k tokensUpdated 3 days ago
    Auto-check passed
  • Store Localization

    dotnetdreamer/open-screenshot-generator

    Ships one screenshot design in many App Store and Play Store languages using the open-screenshot-generator CLI (osg localize): it adds store locales to an existing project, writes per language copy…

    126 GitHub stars~3.8k tokensUpdated 3 days ago
    Auto-check passed

Categories

Questions about Store Compliance

What does Store Compliance do?

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…. Store Compliance is an agent skill from 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 Play rules (required size tiers, accepted alternatives, per locale caps, transparency, file size, aspect ratio, preview duration) and exits 3 on a failure, and osg upload pushes the set to App Store Connect or Google Play with the user's own developer credentials.

When should I use Store Compliance?

Store Compliance fits situations like: tasks that involve App store release.

How do I install Store Compliance in Claude Code?

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

How do I install Store Compliance in Codex?

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

Can I use Store Compliance 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 store-compliance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/store-compliance, .gemini/skills/store-compliance, .github/skills/store-compliance and .opencode/skills/store-compliance in your project.

What does Store Compliance need to run?

Going by SKILL.md and its folder, Store Compliance needs the command-line tools its instructions call (npx) and credentials named OSG_ASC_KEY_ID. Our summary lists: Node.js.

Does Store Compliance access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Store Compliance 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 Store Compliance use?

Store Compliance is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Store Compliance use?

About 3k tokens (SKILL.md is roughly 12k 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 Store Compliance?

Skills that share tags, products or a category with Store Compliance: Release Asc CLI (rorkai/App-Store-Connect-CLI, 7.7k stars), App Store Release Flow (rorkai/app-store-connect-cli-skills, 1.1k stars), App Store Submission Health (rorkai/app-store-connect-cli-skills, 1.1k stars) and App Store Preflight Skills (truongduy2611/app-store-preflight-skills, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Store Compliance?

dotnetdreamer (a GitHub user) maintains it in dotnetdreamer/open-screenshot-generator, which has 126 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.