Screenshots & graphics
metactl uploads your store-listing screenshots as part of metadata.yaml,
with the same plan/apply/drift model as the rest of your metadata.
Configure
Section titled “Configure”Add a base directory and a per-locale screenshots map (device key → ordered
file list). Paths are resolved against screenshotsDir.
screenshotsDir: ./screenshots # base dir for the relative paths below
locales: - locale: ja name: "Sonir" # …text fields… screenshots: iphone69: [iphone69/ja/01-record.png, iphone69/ja/02-measure.png] ipad13: [ipad13/ja/01-measure.png] play_phone: [play_phone/ja/01-record.png, play_phone/ja/02-measure.png] play_tablet: [play_tablet/ja/01-measure.png]The list order is the display order in the store.
Device keys
Section titled “Device keys”Each key maps to one store’s screenshot slot:
| Device key | Store | Slot |
|---|---|---|
iphone69 |
App Store | 6.9″ / 6.7″ iPhone (APP_IPHONE_67) |
ipad13 |
App Store | 13″ / 12.9″ iPad (APP_IPAD_PRO_3GEN_129) |
play_phone |
Google Play | phoneScreenshots |
play_tablet |
Google Play | 10″ tablet (tenInchScreenshots) |
Apple shares one slot across 6.9″/6.7″ (and 13″/12.9″ iPad): upload the largest size and it covers both. Limits: App Store ≤10 per type, Google Play ≤8.
Drift detection
Section titled “Drift detection”Idempotency is content-addressed — metactl hashes each local file and
compares it to what the store holds (App Store sourceFileChecksum/MD5, Google
Play sha256). So plan tells you exactly what changed:
+ screenshots ja/iphone69 → 3 shots # not set yet~ screenshots ja/play_phone 2 shots → 3 shots # swapped/added in the console= screenshots ja/ipad13 1 shots # matches — no uploadapply uploads only when the files differ (and re-applies your declared
order). Re-running is a no-op once the store matches — the same exit codes and
GitOps / cron wiring apply, so you can catch “someone replaced a
screenshot in the console” continuously. See Drift detection.
Feature graphic & icon (Google Play)
Section titled “Feature graphic & icon (Google Play)”Google Play’s store-listing feature graphic and icon go through the same
image API, so metactl places them too — one of each, per locale, under
playGraphics:
locales: - locale: ja playGraphics: featureGraphic: feature/ja/feature.png # 1024×500, JPEG or 24-bit PNG (no alpha) icon: icon/ja/icon.png # 512×512, 32-bit PNG (with alpha)Same plan/apply/drift behavior as screenshots: metactl uploads only when the file’s hash differs from what Play holds.
Notes & limits
Section titled “Notes & limits”- App Store screenshots are editable only while the version is in an editable
state (e.g.
PREPARE_FOR_SUBMISSION) — same as text metadata. A locale needs its version localization to exist first (it’s created from your text fields). - App preview videos are out of scope.
- metactl uploads the PNG as-is — it does not resize, crop, or rotate. Make sure each file already meets the store’s pixel-size requirements.
- Apple revises its display-size enum roughly yearly as new devices ship; new
sizes are added in a new
metactlrelease.
Full field list and the rest of metadata.yaml are on the
metactl page.