{"id":3165,"date":"2026-11-11T07:16:30","date_gmt":"2026-11-11T07:16:30","guid":{"rendered":"https:\/\/appsgeyser.io\/blog\/?p=3165"},"modified":"2026-11-11T07:18:03","modified_gmt":"2026-11-11T07:18:03","slug":"planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages","status":"publish","type":"post","link":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/","title":{"rendered":"Planning a Google Play Listing Around Seedream 5.5: Play&#8217;s Specs, Transparent Assets and Four Languages"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Our team is two people. Maren writes the Kotlin; I do the rest, which this month means the Google Play store listing for Larder Lane, a pantry app that tells you what is about to expire. The app and the two of us are made up for this article, but the listing problem is real: one icon, a feature graphic, and four phone screenshots in English, Spanish, German and Polish. That is 21 image files, and every one of them has to pass Play&#8217;s rules and read correctly on a small screen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ByteDance released Seedream 5.5 on 9 November 2026, and two of its headline changes, native transparency and better small text, land right on top of that job. I have not run 5.5 on our listing yet. What follows is the plan I would hand Maren: what Play actually requires, what the model page documents, what early testers have posted, and the checks every file goes through before upload.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What ByteDance says changed<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example-1024x576.webp\" alt=\"Seedream 5.5 portrait with green sunglasses and a red tomato, shown beside the editing prompts.\" class=\"wp-image-3167\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example-1024x576.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example-300x169.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example-768x432.webp 768w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Seedream 5.5 uses text prompts to edit details such as clothing, accessories, and props.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A frame from the launch video @ByteDanceSeed_ posted on X: the edited image on the left, the chain of edit instructions on the right. The post claims pixel-level preservation of unedited regions across 100 edit rounds, transparent and semi-transparent output with native RGBA, and better small-text rendering, and says the model is coming to Dreamina, CapCut and BytePlus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Seed team&#8217;s launch post on ByteDance&#8217;s research blog gives the details. These are ByteDance&#8217;s own evaluation numbers, not mine. In tests covering Chinese and English text, including densely set small text, the severe text corruption rate was 0.4% and the minor rate 1.7%, both lower than the previous version. Unedited regions are kept at the pixel level, without colour shifts, across up to 100 rounds of edits. The model also generates images with an alpha channel, with full and partial transparency. The post adds that a Pro version of the 5.5 series will follow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a store listing, text and transparency are what count; realism matters less when most of what we ship is flat illustration and interface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What Play actually asks for<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I checked the current rules in Google&#8217;s Play Console Help page on preview assets and the Play icon design specifications before planning anything. The table below maps each asset to the request I would make and the clean-up it needs afterwards.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"614\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-listing-asset-sizes-1024x614.webp\" alt=\"Table comparing Google Play requirements and Seedream 5.5 settings for app icons, feature graphics, screenshots, and taglines.\" class=\"wp-image-3168\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-listing-asset-sizes-1024x614.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-listing-asset-sizes-300x180.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-listing-asset-sizes-767x460.webp 767w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-listing-asset-sizes.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Google Play listing asset requirements, with suggested Seedream 5.5 output sizes and export steps.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Play&#8217;s requirements, the request I would send for each asset, and the post-processing before upload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three rules shape the whole plan. The feature graphic and screenshots must be JPEG or 24-bit PNG with no alpha channel. The icon must be a 32-bit PNG, 512 by 512, no larger than 1024 KB, drawn as a full square because Play applies the rounded mask and shadow itself. And screenshots must show the actual in-app experience, with taglines taking up no more than 20% of the image. That last rule decides what the model is allowed to draw.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sizes: why the icon can&#8217;t be requested at 512 px<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The model page sets a floor and a ceiling on custom sizes: 921,600 to 4,624,220 total pixels, with a width-to-height ratio between 1:16 and 16:1. Play&#8217;s icon (262,144 pixels) and feature graphic (512,000 pixels) both fall below the floor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-google-play-pixel-limits-1024x401.webp\" alt=\"Bar chart comparing Google Play asset sizes with Seedream 5.5\u2019s allowed pixel range.\" class=\"wp-image-3169\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-google-play-pixel-limits-1024x401.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-google-play-pixel-limits-300x118.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-google-play-pixel-limits-766x300.webp 766w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-google-play-pixel-limits.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Generate the app icon and feature graphic at twice their final size to meet Seedream 5.5\u2019s minimum pixel count.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The two small Play sizes sit below the page&#8217;s floor. Requesting at exactly twice the size and halving afterwards keeps the proportions exact.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the icon goes in as 1024&#215;1024 and the feature graphic as 2048&#215;1000, which is exactly 2x of 1024&#215;500, and both are halved afterwards. Screenshots are easier: 1080&#215;1920 is inside the allowed band and is also Play&#8217;s minimum for the large recommendation formats, so no resizing is needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One trap has nothing to do with the model. Our phones capture at tall ratios, and Play caps a screenshot&#8217;s long side at twice the short side. A raw 1080&#215;2340 capture is 2.17:1 and fails. Our captures get cropped to 1080&#215;2160 before they go anywhere near a template.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Screenshots: the model gets the caption band, not the interface<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Since Play asks for the real app experience, I don&#8217;t want an image model redrawing our interface. Even a careful redraw can change a number on a list item, and then the screenshot is no longer our app. My template gives the model the caption and the background only. The real capture is pasted on top in code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"751\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-phone-screenshot-template-1024x751.webp\" alt=\"Pantry app screenshot mockup with \u201cSee what expires this week\u201d above a list of expiring groceries.\" class=\"wp-image-3170\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-phone-screenshot-template-1024x751.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-phone-screenshot-template-300x220.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-phone-screenshot-template-768x563.webp 768w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-phone-screenshot-template.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">A 1080 \u00d7 1920 Google Play screenshot template with the top 384 pixels reserved for the caption.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The caption band is 384 px, exactly 20% of the height. The UI here is our HTML mock-up of the app, not a generated image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The caption is where the new text rendering gets tested, and four languages make the test harder. Polish runs half again as long as English on both captions, and the set uses six accented letters. ByteDance&#8217;s corruption rates are measured on Chinese and English, so I treat the other three languages as unverified until we read every output ourselves.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"499\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-screenshot-caption-localization-1024x499.webp\" alt=\"Table comparing two screenshot captions in English, Spanish, German, and Polish, with character counts for each.\" class=\"wp-image-3171\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-screenshot-caption-localization-1024x499.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-screenshot-caption-localization-300x146.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-screenshot-caption-localization-767x374.webp 767w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-screenshot-caption-localization.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">google-play-screenshot-caption-localization.webpBoth Polish captions are 50% longer than their English versions, so the layout needs room for two lines.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Our captions and what they add up to: 16 caption layers to proofread, with Polish needing two lines in the band.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Play also asks you to leave words like &#8220;Best&#8221;, &#8220;#1&#8221;, &#8220;Top&#8221; and &#8220;New&#8221; out of screenshots, along with calls to action such as &#8220;Download now&#8221;. I keep those out of the prompt entirely rather than hoping the model won&#8217;t add them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The request, as the model page documents it<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I am working from the documentation on the <a href=\"https:\/\/apimart.ai\/model\/seedream-5-5\">Seedream 5.5 API<\/a> page, not from calls I have made. It describes an asynchronous task: you post a job, read a task ID from data[0].task_id, then poll GET \/v1\/tasks\/{task_id} until the status is completed and read the image from data.result.images[0].url[0]. The model value is seedream-5.5. A caption band for the Polish version of screen one would look like this:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">POST {API_BASE}\/v1\/images\/generations<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Authorization: Bearer {YOUR_KEY}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Content-Type: application\/json<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8220;model&#8221;: &#8220;seedream-5.5&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8220;prompt&#8221;: &#8220;Background for a Google Play phone screenshot. At the top, centred, the caption \\&#8221;Zobacz, co traci wa\u017cno\u015b\u0107 w tym tygodniu\\&#8221; in a bold rounded sans-serif, deep green #2F6B4F, on two lines, within the top fifth. Below it, a plain saffron #F2B33D area with soft cream shapes near the edges. No phone, no interface, no other text.&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8220;size&#8221;: &#8220;1080&#215;1920&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8220;output_format&#8221;: &#8220;png&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per the page, resolution (1K, 1.5K or 2K) applies only when size is a ratio or auto, so it is left out for pixel sizes. Localising the feature graphic would be an edit instead: the English version goes into image_urls (up to 10 references are allowed), the prompt names the old tagline and the new one, and size is auto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Transparent assets, and where Play makes you drop them<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"885\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-transparent-background-settings-1024x885.webp\" alt=\"Annotated Jimeng screenshot highlighting the Seedream 5.5 model and the transparent background setting.\" class=\"wp-image-3172\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-transparent-background-settings-1024x885.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-transparent-background-settings-300x259.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-transparent-background-settings-767x663.webp 767w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-transparent-background-settings.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Where to find Seedream 5.5 and the transparent background option in the Jimeng web interface.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Screenshot from @DDJCXX&#8217;s post on X showing how to get transparent output in the Jimeng web app: pick Seedream 5.5 as the model and set the background to transparent. The annotations put the cost at 6 credits per image against 8 for 5.0 Pro. The author adds that the model is also selectable in Doubao&#8217;s web image generator and repeats the official figure that only 4 images in 1,000 had severely broken text.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The consumer apps offer transparency as a background setting. The API, per the model page, is stricter: background: &#8220;transparent&#8221; needs exactly one input image that already has an alpha channel, plus output_format: &#8220;png&#8221;. In practice that means I would start each sticker or empty-state illustration from an RGBA file, even a rough sketch on a transparent canvas, rather than from text alone.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"427\" src=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-image-transparency-requirements-1024x427.webp\" alt=\"Diagram showing alpha-channel rules for in-app artwork, Google Play app icons, feature graphics, and screenshots.\" class=\"wp-image-3173\" srcset=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-image-transparency-requirements-1024x427.webp 1024w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-image-transparency-requirements-300x125.webp 300w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-image-transparency-requirements-768x320.webp 768w, https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/google-play-image-transparency-requirements.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Keep transparency for in-app artwork and flatten Google Play feature graphics and screenshots before export.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Alpha is useful inside the app. On the Play listing it is only allowed on the icon, and even there the artwork should fill the square.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So our transparent jar illustration keeps its alpha only inside the app. For the icon it goes onto a solid saffron square; for the feature graphic and screenshots it is composited and flattened, because Play does not accept alpha in those files.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">File size<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One early comparison posted on X makes the weight concrete. @EEJ_OOXO generated the same character sheet with Seedream 5.5 and 5.0 Pro and reports that 5.5 downloaded as a 5,217 KB PNG against a 584 KB JPEG from 5.0 Pro, and that 5.5 kept the left and right panels more consistent by eye.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A full-size PNG of that weight would be five times over Play&#8217;s 1024 KB icon limit. At 512 by 512, an RGBA image is 1,048,576 bytes before any compression, exactly 1024 KB, so a compressed PNG almost always fits. &#8220;Almost always&#8221; is why the size check is automated. For the feature graphic and screenshots I export JPEG after flattening, which removes the alpha problem and the weight in one step.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A pre-upload check that runs in a second<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the script I wrote for our asset folder. It encodes the rules from Play&#8217;s help page and nothing else:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import os, sys<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">from PIL import Image<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RULES = {&nbsp; # Google Play Console Help, &#8220;Add preview assets&#8221;, checked Nov 2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;icon&#8221;: &nbsp; &nbsp; &nbsp; dict(size=(512, 512), alpha=&#8221;required&#8221;, max_kb=1024),<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;feature&#8221;:&nbsp; &nbsp; dict(size=(1024, 500), alpha=&#8221;forbidden&#8221;),<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;screenshot&#8221;: dict(min_side=320, max_side=3840, max_ratio=2.0, alpha=&#8221;forbidden&#8221;),<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">def check(path, kind):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;r, im, errs = RULES[kind], Image.open(path), []\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;w, h = im.size<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;has_alpha = im.mode in (&#8220;RGBA&#8221;, &#8220;LA&#8221;) or &#8220;transparency&#8221; in im.info<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;if &#8220;size&#8221; in r and (w, h) != r[&#8220;size&#8221;]:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(f&#8221;size {w}x{h}, needs {r[&#8216;size&#8217;][0]}x{r[&#8216;size&#8217;][1]}&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;if kind == &#8220;screenshot&#8221;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if min(w, h) &lt; r[&#8220;min_side&#8221;] or max(w, h) &gt; r[&#8220;max_side&#8221;]:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(f&#8221;side out of range: {w}x{h}&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if max(w, h) \/ min(w, h) &gt; r[&#8220;max_ratio&#8221;]:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(f&#8221;ratio {max(w, h) \/ min(w, h):.2f} &gt; 2&#8243;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;if r[&#8220;alpha&#8221;] == &#8220;forbidden&#8221; and has_alpha:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(&#8220;has an alpha channel; flatten to RGB&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;if r[&#8220;alpha&#8221;] == &#8220;required&#8221; and im.mode != &#8220;RGBA&#8221;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(f&#8221;mode {im.mode}; icon must be a 32-bit PNG&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;if im.format not in (&#8220;PNG&#8221;, &#8220;JPEG&#8221;):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(f&#8221;format {im.format}&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;kb = os.path.getsize(path) \/ 1024<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;if &#8220;max_kb&#8221; in r and kb &gt; r[&#8220;max_kb&#8221;]:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errs.append(f&#8221;{kb:.0f} KB &gt; {r[&#8216;max_kb&#8217;]} KB&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;return errs<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">if __name__ == &#8220;__main__&#8221;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;for path, kind in zip(sys.argv[1::2], sys.argv[2::2]):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e = check(path, kind)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f&#8221;{os.path.basename(path):28s} {kind:10s} {&#8216;OK&#8217; if not e else &#8216;FAIL: &#8216; + &#8216;; &#8216;.join(e)}&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I ran it on a set of test files built from our template. It caught exactly the mistakes I expect to make: an icon saved as plain RGB, a feature graphic still at its 2x size, a screenshot exported with an alpha channel, and the uncropped tall capture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">icon.png &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; icon &nbsp; &nbsp; &nbsp; OK<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">icon-rgb.png &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; icon &nbsp; &nbsp; &nbsp; FAIL: mode RGB; icon must be a 32-bit PNG<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">feature-en.jpg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; feature&nbsp; &nbsp; OK<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">feature-2x.jpg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; feature&nbsp; &nbsp; FAIL: size 2048&#215;1000, needs 1024&#215;500<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">shot-en-1.png&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; screenshot OK<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">shot-en-1-rgba.png &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; screenshot FAIL: has an alpha channel; flatten to RGB<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">shot-1080&#215;2340.png &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; screenshot FAIL: ratio 2.17 &gt; 2<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The checklist we will use<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Request the icon at 1024&#215;1024 and the feature graphic at 2048&#215;1000, then halve both.<\/li>\n\n\n\n<li>Never let the model draw the interface; paste the real capture into the template.<\/li>\n\n\n\n<li>Keep captions inside the top 384 px of a 1080&#215;1920 screenshot.<\/li>\n\n\n\n<li>No &#8220;Best&#8221;, &#8220;#1&#8221;, &#8220;Top&#8221;, &#8220;New&#8221;, sale words or calls to action in any prompt.<\/li>\n\n\n\n<li>Proofread every caption in every language at phone size, accents first.<\/li>\n\n\n\n<li>For transparent assets through the API, start from an RGBA input and request PNG.<\/li>\n\n\n\n<li>Flatten feature graphics and screenshots to RGB; keep the icon a full square.<\/li>\n\n\n\n<li>Run the validator on the whole folder before anything is uploaded.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">The bottom line<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If ByteDance&#8217;s numbers hold up on our captions, Seedream 5.5 could take over the parts of a Play listing that a two-person team usually does badly: localized caption art, transparent illustrations and a feature graphic that looks like the app. It does not change Play&#8217;s rules. The interface still has to be real, the files still have to be the right size and channel count, and four languages still need four careful readings. Those parts of the plan don&#8217;t depend on any model, which is why they come first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Our team is two people. Maren writes the Kotlin; I do the rest, which this month means the Google Play store listing for Larder Lane, a pantry app that tells you what is about to expire. The app and the two of us are made up for this article, but the listing problem is real: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3167,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[114],"tags":[],"class_list":["post-3165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Planning a Google Play Listing Around Seedream 5.5: Play&#039;s Specs, Transparent Assets and Four Languages - AppsGeyser<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Planning a Google Play Listing Around Seedream 5.5: Play&#039;s Specs, Transparent Assets and Four Languages - AppsGeyser\" \/>\n<meta property=\"og:description\" content=\"Our team is two people. Maren writes the Kotlin; I do the rest, which this month means the Google Play store listing for Larder Lane, a pantry app that tells you what is about to expire. The app and the two of us are made up for this article, but the listing problem is real: [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/\" \/>\n<meta property=\"og:site_name\" content=\"AppsGeyser\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Appsgeyser\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-11T07:16:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-11T07:18:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"appsgeyserio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"appsgeyserio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Planning a Google Play Listing Around Seedream 5.5: Play's Specs, Transparent Assets and Four Languages - AppsGeyser","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/","og_locale":"en_US","og_type":"article","og_title":"Planning a Google Play Listing Around Seedream 5.5: Play's Specs, Transparent Assets and Four Languages - AppsGeyser","og_description":"Our team is two people. Maren writes the Kotlin; I do the rest, which this month means the Google Play store listing for Larder Lane, a pantry app that tells you what is about to expire. The app and the two of us are made up for this article, but the listing problem is real: [&hellip;]","og_url":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/","og_site_name":"AppsGeyser","article_publisher":"https:\/\/www.facebook.com\/Appsgeyser\/","article_published_time":"2026-11-11T07:16:30+00:00","article_modified_time":"2026-11-11T07:18:03+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp","type":"image\/webp"}],"author":"appsgeyserio","twitter_card":"summary_large_image","twitter_misc":{"Written by":"appsgeyserio","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#article","isPartOf":{"@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/"},"author":{"name":"appsgeyserio","@id":"https:\/\/appsgeyser.io\/blog\/#\/schema\/person\/176098ad519532193330d3ff95ef150d"},"headline":"Planning a Google Play Listing Around Seedream 5.5: Play&#8217;s Specs, Transparent Assets and Four Languages","datePublished":"2026-11-11T07:16:30+00:00","dateModified":"2026-11-11T07:18:03+00:00","mainEntityOfPage":{"@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/"},"wordCount":2312,"publisher":{"@id":"https:\/\/appsgeyser.io\/blog\/#organization"},"image":{"@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp","articleSection":["General"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/","url":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/","name":"Planning a Google Play Listing Around Seedream 5.5: Play's Specs, Transparent Assets and Four Languages - AppsGeyser","isPartOf":{"@id":"https:\/\/appsgeyser.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#primaryimage"},"image":{"@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp","datePublished":"2026-11-11T07:16:30+00:00","dateModified":"2026-11-11T07:18:03+00:00","breadcrumb":{"@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#primaryimage","url":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp","contentUrl":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2026\/11\/seedream-5-5-image-editing-example.webp","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/appsgeyser.io\/blog\/2026\/11\/11\/planning-a-google-play-listing-around-seedream-5-5-plays-specs-transparent-assets-and-four-languages\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/appsgeyser.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Planning a Google Play Listing Around Seedream 5.5: Play&#8217;s Specs, Transparent Assets and Four Languages"}]},{"@type":"WebSite","@id":"https:\/\/appsgeyser.io\/blog\/#website","url":"https:\/\/appsgeyser.io\/blog\/","name":"AppsGeyser","description":"Free apps that earn you money","publisher":{"@id":"https:\/\/appsgeyser.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/appsgeyser.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/appsgeyser.io\/blog\/#organization","name":"AppsGeyser","url":"https:\/\/appsgeyser.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/appsgeyser.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2022\/08\/14.png","contentUrl":"https:\/\/appsgeyser.io\/blog\/wp-content\/uploads\/2022\/08\/14.png","width":1200,"height":1200,"caption":"AppsGeyser"},"image":{"@id":"https:\/\/appsgeyser.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Appsgeyser\/"]},{"@type":"Person","@id":"https:\/\/appsgeyser.io\/blog\/#\/schema\/person\/176098ad519532193330d3ff95ef150d","name":"appsgeyserio","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/appsgeyser.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1f6b2bede82faa2610b3b6ad91c63b8d8937e1b3185df7c10003e330a261ce83?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1f6b2bede82faa2610b3b6ad91c63b8d8937e1b3185df7c10003e330a261ce83?s=96&d=mm&r=g","caption":"appsgeyserio"},"sameAs":["https:\/\/appsgeyser.io\/blog"],"url":"https:\/\/appsgeyser.io\/blog\/author\/appsgeyserio\/"}]}},"_links":{"self":[{"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/posts\/3165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/comments?post=3165"}],"version-history":[{"count":1,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/posts\/3165\/revisions"}],"predecessor-version":[{"id":3174,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/posts\/3165\/revisions\/3174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/media\/3167"}],"wp:attachment":[{"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/media?parent=3165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/categories?post=3165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/appsgeyser.io\/blog\/wp-json\/wp\/v2\/tags?post=3165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}