{"id":2654,"date":"2026-08-03T17:44:14","date_gmt":"2026-08-03T15:44:14","guid":{"rendered":"https:\/\/extendsclass.com\/blog\/?p=2654"},"modified":"2026-08-03T17:39:00","modified_gmt":"2026-08-03T15:39:00","slug":"treat-nanobanana-maker-prompts-like-regression-fixtures","status":"publish","type":"post","link":"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures","title":{"rendered":"Treat Nanobanana maker Prompts Like Regression Fixtures"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Changelog screenshots drift for a boring reason. The prompt that looked fine last sprint returns a melted icon edge or a fake empty state nobody shipped. A <a href=\"https:\/\/nanomaker.im\">Nanobanana maker<\/a> lane only helps a docs desk when each accepted frame can be re-run like a failing test \u2014 not when someone scrolls for inspiration and hopes the next Generate lands.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"686\" height=\"386\" src=\"https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/1.jpg\" alt=\"\" class=\"wp-image-2656\" srcset=\"https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/1.jpg 686w, https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/1-300x169.jpg 300w\" sizes=\"(max-width: 686px) 100vw, 686px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">This walkthrough builds that harness on NanoMaker AI\u2019s public Image path: model pick, prompt paste, optional JPEG\/PNG\/WebP upload under 5MB, then Generate. Keep the goal narrow. Fixture-green help-center art. Pretty style waits until the pass rule is green.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_47_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"ez-toc-toggle-icon-1\"><label for=\"item-6a72946d342d6\" aria-label=\"Table of Content\"><span style=\"display: flex;align-items: center;width: 35px;height: 30px;justify-content: center;direction:ltr;\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/label><input  type=\"checkbox\" id=\"item-6a72946d342d6\"><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Goal_Fixture-green_docs_art_not_mood_boards\" title=\"Goal: Fixture-green docs art, not mood boards\">Goal: Fixture-green docs art, not mood boards<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Prerequisites_sit_in_the_repo_not_in_chat\" title=\"Prerequisites sit in the repo, not in chat\">Prerequisites sit in the repo, not in chat<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Step_one_Lock_aspect_and_controls_before_adjectives\" title=\"Step one: Lock aspect and controls before adjectives\">Step one: Lock aspect and controls before adjectives<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Step_two_Run_the_dirty_prompt_battery\" title=\"Step two: Run the dirty prompt battery\">Step two: Run the dirty prompt battery<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Clean_control_case_with_locked_aspect_ratio\" title=\"Clean control case with locked aspect ratio\">Clean control case with locked aspect ratio<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Compressed_upload_still_under_five_megabytes\" title=\"Compressed upload still under five megabytes\">Compressed upload still under five megabytes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Hostile_adjective_append_that_begs_drift\" title=\"Hostile adjective append that begs drift\">Hostile adjective append that begs drift<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Gallery_seed_edited_before_fixture_use\" title=\"Gallery seed edited before fixture use\">Gallery seed edited before fixture use<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/extendsclass.com\/blog\/treat-nanobanana-maker-prompts-like-regression-fixtures\/#Acceptance_check_and_common_fixture_errors\" title=\"Acceptance check and common fixture errors\">Acceptance check and common fixture errors<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Goal_Fixture-green_docs_art_not_mood_boards\"><\/span><strong>Goal: Fixture-green docs a<\/strong><strong>rt<\/strong><strong>, not mood boards<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Success means a second person can open the live page beside the image at published width and name the three locked controls without squinting. Failure means invented CTAs, rewritten button copy, or a crop that hides the evidence. Soft fail: prettier gradients that still keep the controls. Hard fail: missing settings row. Write those signals down before the first credit burns.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If that bar feels too strict for \u201cmarketing art,\u201d you are in the wrong article. Marketing can chase vibes. Docs cannot. On a sprint desk, designers usually discover the difference after support already answered tickets with a screenshot that invents a toggle. The fixture rule exists to stop that ticket before it opens \u2014 not to win a taste debate in design critique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Write the pass rule in the same pull request as the docs change. Reviewers should be able to reject an image for a failed control list the way they reject a broken unit test. When image review stays subjective, Generate clicks multiply without teaching the next sprint anything.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Prerequisites_sit_in_the_repo_not_in_chat\"><\/span><strong>Prerequisites sit in the r<\/strong><strong>epo<\/strong><strong>, not in chat<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before the editor opens, drop three files next to the docs PR: a live UI reference crop, a one-paragraph prompt that names exact controls, and an acceptance note in plain language. Name them like tests \u2014 settings-strip.prompt.txt, settings-strip.accept.md, settings-strip.pass.png. If you cannot score a draft against the note in under a minute, you are still asking for vibes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skipping the pack is how re-work eats the afternoon after the PR merged. Chat threads full of \u201cfinal-final.png\u201d are not fixtures. The pack is the whole point of treating prompts as regression inputs. NanoMaker AI can iterate quickly; only the folder decides whether speed helped.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Keep the acceptance note shorter than a paragraph if you can. Long notes become unread essays. Short notes force concrete signals: three control names, one forbidden invention, one width at which labels must stay readable. That brevity is what makes the battery runnable under release pressure. If the note needs a meeting to explain, it will not survive the next hotfix night.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_one_Lock_aspect_and_controls_before_adjectives\"><\/span><strong>Step one: Lock aspect and controls before adjectives<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open AI Image. Choose the cheap draft model you budgeted \u2014 Nano Banana at 5 credits for thrash, or Nano Banana 2 at 6 credits for a 1K everyday run. Set aspect to the docs slot (16:9 or 1:1) before any fashion-magazine language enters the prompt. Name the screen and the exact three controls that must appear. Only then click Generate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The public Generate control often shows a 6-credit default for Nano Banana 2 at 1K. Treat that number as the cost of one fixture attempt. Do not \u201cimprove\u201d composition afterward by switching aspect and pretending it is still the same test. Aspect changes start a new experiment with a new name.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"821\" height=\"456\" src=\"https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/2.jpg\" alt=\"\" class=\"wp-image-2657\" srcset=\"https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/2.jpg 821w, https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/2-300x167.jpg 300w, https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/2-768x427.jpg 768w, https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/2-816x453.jpg 816w\" sizes=\"(max-width: 821px) 100vw, 821px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"> \u200b\u200b\u200b\u200b\u200b\u200b\u200b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the first clean case fails because the prompt never named the empty-state sentence, stop. Fix the text. Do not add adjectives to cover the miss. Adjectives hide broken fixtures; they do not repair them. Teams that skip this pause usually spend the rest of the battery documenting the same failure four times.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_two_Run_the_dirty_prompt_battery\"><\/span><strong>Step two: Run the dirty prompt battery<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Keep destination crop and pass rules fixed. Change only the stress you intend to measure. Three to four runs are enough for a release week; more without a new hypothesis is just burning the pool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Clean_control_case_with_locked_aspect_ratio\"><\/span><strong>Clean control case with locked aspect ratio<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plain prompt, real controls, matching background. Download only if labels stay readable at docs width. This file becomes the golden pass others must beat or match. If it fails the width check, fix the prompt before adding stress cases \u2014 otherwise every later run inherits the same miss.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Compressed_upload_still_under_five_megabytes\"><\/span><strong>Compressed upload still under five megabytes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Upload a slightly crushed PNG of the real UI still under the 5MB ceiling. Ask for cleanup without redesign. If the cleaned panel invents a fourth tab, discard it even when the preview looks sharper on a large monitor. Image-to-image only helps when the upload is production truth. A stock mock \u201cfor vibes\u201d teaches the wrong chrome and wastes the credit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hostile_adjective_append_that_begs_drift\"><\/span><strong>Hostile adjective append that begs drift<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Reuse the clean prompt, then append lifestyle adjectives. Pass only if the UI stays boring and correct. Soft fail: prettier gradients. Hard fail: rewritten button copy. Stamp both outcomes with the prompt file name so the next person does not repeat the burn during the next release train.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Gallery_seed_edited_before_fixture_use\"><\/span><strong>Gallery seed edited before fixture use<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you need a disciplined starting text \u2014 line drawing, product isolation, headshot framing \u2014 open the public Banana prompts gallery, hit Copy or Use Prompt, then strip anything that fights UI truth. NanoMaker AI makes one-click paste easy; ownership of the edited descendant is still a human job. Put the edited prompt back in the repo the same day, or delete the download so nobody mistakes it for a golden file.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Acceptance_check_and_common_fixture_errors\"><\/span><strong>Acceptance check and common fixture errors<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before merge, open the candidate beside the live page at published width. Reject smeared microcopy, changed empty-state sentences, and any control order that does not match production left-to-right. A second reviewer who cannot name the three locked controls means the fixture failed, no matter how the Slack thread reacted. Full-bleed previews lie; inset docs width is the only court that counts for help-center art.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Error: regenerating from memory after the PR merged \u2014 rebuild the pack first.<\/li>\n\n\n\n<li>Error: jumping to Pro\u2019s 25\u201350 credit band for the hostile adjective test \u2014 keep Pro for print one-pagers.<\/li>\n\n\n\n<li>Error: leaving keepers only in the browser \u2014 download accepted frames; public storage is not a long archive.<\/li>\n\n\n\n<li>Error: unowned gallery clicks with no accept note \u2014 delete those downloads before they enter the help center.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"739\" height=\"478\" src=\"https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/3.jpg\" alt=\"\" class=\"wp-image-2658\" srcset=\"https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/3.jpg 739w, https:\/\/extendsclass.com\/blog\/wp-content\/uploads\/2026\/08\/3-300x194.jpg 300w\" sizes=\"(max-width: 739px) 100vw, 739px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">New accounts get 6 credits on first sign-in \u2014 enough to prove the harness once, not to staff a release week. Yearly unused-credit rollover does not excuse unnamed experiments. When the battery is boring and repeatable, NanoMaker AI stops inventing features the build never shipped, and changelog art finally behaves like the rest of the test suite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ship the pack with the docs PR even when the image \u201clooks obvious.\u201d Future you will regenerate under different model defaults and different fatigue. The fixture is how the desk stays honest after the person who wrote the first prompt has moved to another squad. Boring packs beat clever prompts that nobody can re-run next month.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Changelog screenshots drift for a boring reason. The prompt that looked fine last sprint returns a melted icon edge or a fake empty state nobody shipped. A Nanobanana maker lane only helps a docs desk when each accepted frame can be re-run like a failing test \u2014 not when someone scrolls for inspiration and hopes [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2656,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[4],"tags":[],"class_list":["post-2654","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/posts\/2654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/comments?post=2654"}],"version-history":[{"count":3,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/posts\/2654\/revisions"}],"predecessor-version":[{"id":2659,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/posts\/2654\/revisions\/2659"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/media\/2656"}],"wp:attachment":[{"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/media?parent=2654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/categories?post=2654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/extendsclass.com\/blog\/wp-json\/wp\/v2\/tags?post=2654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}