Photoshoot-Quality Food Photos from a Phone Pic
A tutorial on using OpenArt’s Nano Banana Pro with Omni Reference, Google Gemini and Google Pomelli to turn a mobile phone pictures into photoshoot-quality images.
The Starting Point
The original image is a decent but clearly phone-shot photo: flat overhead lighting, a slightly dull color cast, visible countertop clutter, and no intentional composition. It’s the plate of mango sticky rice loaded into the Omni Reference tile, which is the key to this whole workflow. Omni Reference locks in the actual dish (the exact mango slices, sticky rice mound, plate pattern, and mint garnish) as a visual anchor, so every regeneration stays true to the real food rather than inventing a new dish.
The Core Strategy
Rather than writing one generic make-this-look-professional prompt, I wrote three prompts that each apply a different real-world food photography discipline. Professional food photography isn’t one look. Stylists and photographers choose a setup based on the intended use such as a menu, a magazine, or an ad, and each setup relies on distinct, describable techniques: surface and backdrop, lighting direction and quality, camera angle and lens characteristics, and prop and styling choices. Naming these specific techniques in the prompt, rather than vague quality adjectives, is what actually steers the model’s output, because it gives it concrete physical and compositional instructions to follow.
Prompt 1: Clean Studio / Menu Shot
Prompt 2: Editorial Magazine Styling
Prompt 3: Macro Advertisement Close-Up
Google Pomelli
This section covers a second tool, Pomelli by Google Labs, used to generate a photoshoot series from the same mango sticky rice image.
How I Got There
Uploaded the image: On the Pomelli Photoshoot tab, I chose Create a product photoshoot, then clicked the Product Image slot and used Upload Images to add the mango sticky rice photo (the studio-style image generated earlier in OpenArt) into Pomelli’s asset library.
Selected the product image: Once uploaded, the photo appeared as a new tile in the Assets from Business DNA library. I selected it and confirmed with Looks Good, which set it as the active Product Image for the shoot.
Chose four templates: Pomelli automatically suggested a set of Consumables templates tailored to the product. I kept the four recommended options: Studio (clean isolated background), Ingredient (styled with props on marble), In Use (a person eating the dish), and Contextual (a lived-in cafe setting).
Generated the photoshoot: Clicking Generate Photoshoot produced all four images in parallel, each keeping the same plate, mango slices, and rice mound while changing the background, lighting, and human context to match its template.
Unlike the OpenArt workflow, which relied on detailed text prompts, Pomelli reaches a similar result through curated templates built for product marketing, making it faster to get varied, on-brand shots without writing prompts by hand.
Google Gemini
Generate a photoshoot quality picture of this delicious Thai Beef & Lamb Spicy Sausage Salad
Here is what Google Gemini generated in response
Price Competition Analysis
Knowing exactly where your menu sits against the restaurants down the street used to mean an afternoon of clicking through delivery apps and squinting at a legal pad. In this tutorial I'll show how I did the whole thing with two AI tools working back to back: the Claude Chrome extension to read competitor menus straight off their delivery pages and drop the prices into a spreadsheet, and then Claude Cowork to turn that spreadsheet into a full dish-by-dish competitive analysis with an interactive dashboard.
The workflow has two halves. First you collect the data (Chrome extension, one restaurant at a time). Then you analyze it (Cowork, once the sheet is complete). Nothing here requires code — every instruction is a plain-English prompt you can copy, tweak, and reuse.
What you'll need
A menu source that lists prices — a DoorDash, Uber Eats, or Grubhub store page works great, and so does a restaurant's own online-ordering page. A blank Google Sheet with four columns: Category, Dish Name, Price, Notes. The Claude Chrome extension installed and signed in. That's it.
Part 1 — Collecting prices with the Claude Chrome extension
The Chrome extension can see the page you're on and act on it, so instead of copy-pasting each dish by hand, you point it at a competitor's menu and let it read the whole thing. I did this one competitor at a time, pasting each result into its own tab of the same spreadsheet.
Step 1 — Open the competitor's menu page. Navigate to the restaurant's DoorDash (or Uber Eats, Grubhub, or direct ordering) page and let it fully load, scrolling once to the bottom so every category is rendered on the page.
Step 2 — Open the Claude side panel on that tab so Claude is looking at the same menu you are.
Step 3 — Ask it to extract the full menu. This is the core prompt. Be explicit that you want every item, the category it sits under, and the price:
Step 4 — Handle the protein add-ons. This is the detail that makes or breaks the comparison. Many Thai restaurants list a base price and charge extra for chicken, beef, or prawns — and every restaurant does it differently. Before moving on, capture each menu's protein rules with a follow-up prompt:
Step 5 — Paste into the spreadsheet. Copy Claude's table into a new tab of your Google Sheet named for that restaurant (e.g. Competitor A – Dishes and Competitor A – Modifiers). Give the tool a moment to verify:
Step 6 — Repeat for each competitor. I did this for four nearby restaurants plus my own menu, so I had five tabs of dishes and five tabs of protein rules in one workbook. Do your own restaurant too — you need it in the same format to compare against.
A few things that made the extraction cleaner: load the full page before prompting (lazy-loaded menus hide items until you scroll), keep one restaurant per tab so nothing gets mixed up, and always grab the Notes and protein rules — an "$18 base" that becomes "$23 with prawns" will otherwise quietly skew your whole analysis.
Part 2 — Analyzing the spreadsheet with Claude Cowork
Once the workbook had all five menus, I switched to Claude Cowork and handed it the entire spreadsheet. Cowork can open the Google Sheet, read every tab, do the math across hundreds of dishes, and build a shareable dashboard — the kind of analysis that would take a person a full day.
Step 1 — Share the spreadsheet. Paste the Google Sheets link into Cowork and describe your restaurant and what you want. This is the prompt that produced the whole analysis:
Step 2 — Answer its setup questions. Cowork asked two quick questions before starting — what format I wanted (I chose an interactive HTML dashboard) and how to handle the protein-pricing differences (I chose to normalize everything to a chicken baseline). Answering these upfront is what kept the output aimed at exactly what I needed.
Step 3 — Let it work, then read the summary. Cowork read all five menu tabs, matched dishes across restaurants by recipe rather than spelling (so "Lard nah," "Rad Nah," and "Emperor Noodle" all landed in one row), added my restaurant's chicken upcharge so the comparison was apples-to-apples, and computed how my prices stacked up against each competitor and against the market average.
Step 4 — Get the dashboard. The result was a single interactive web page: headline stats, a market-positioning chart, head-to-head cards for each competitor, a category-by-category breakdown, and a searchable table of every matched dish color-coded by whether I was cheaper or pricier. The dashboard below uses the real prices with the restaurant names changed to fictitious ones. (see dashboard below)
Step 5 — Ask follow-up questions. Because Cowork keeps the whole analysis in context, you can keep digging in plain English:
What the analysis told me
Normalizing the chicken option flipped the picture. My menu looked dramatically cheaper on paper, but that was partly because my listed prices are the tofu/veggie base while some competitors bake chicken into their listed price. Even after the fair adjustment, though, the story held: my restaurant came out as the value leader — cheapest on roughly three-quarters of shared dishes and about 13% under the market average — with the most underpriced categories being appetizers and stir-fry entrées, exactly the high-margin items where a modest increase wouldn't scare anyone off.
That's the payoff of chaining the two tools. The Chrome extension turns scattered menu pages into clean data in minutes, and Cowork turns that data into a decision you can actually act on — what to charge, and where you've been leaving money on the table.
Rewriting Menu Descriptions That Make People Order
Restaurant menu studies keep finding the same thing: a dish with a vivid, well-written description sells noticeably better than the same dish with a flat one — and diners rate the food itself as tastier. On a delivery app, where a customer is scrolling past dozens of pad thais, the description is doing the selling that a server would do in the dining room. It's the cheapest upgrade on the whole menu, and AI makes it a one-afternoon job.
For this tutorial I rebuilt my descriptions with Claude. The trick that made the results so much better than "make this sound tasty" was giving Claude three things per dish instead of one: my current description, a list of the actual ingredients visible in the dish's photo, and, when I wanted to be sure, the photo itself. The current text tells Claude what the dish is; the observed ingredients keep it honest and specific; the photo lets it verify. That combination is what turns generic copy into something accurate and mouth-watering.
What makes a description irresistible
Before writing a single prompt, it helps to know what "better" actually means, so you can tell Claude exactly what to aim for. Good menu copy does six things at once. It leads with the hero — the ingredient or technique that makes the dish special goes first, not the filler vegetables. It uses sensory, tactile language — words for texture, temperature, and cooking action ("blistered," "wok-tossed," "simmered until tender," "crispy-edged") do far more work than "delicious" or "flavorful," which say nothing. It earns trust with specific, real ingredients rather than vague ones — "kaffir lime and lemongrass" beats "Thai herbs." It tells a small story where there is one to tell — a regional origin or a street-food heritage — but sparingly, a phrase, not a paragraph. It stays short: one or two sentences, roughly 20 to 35 words, because walls of text get skipped. And above all it is honest — it matches the plate the customer will actually receive, and it keeps the practical signals they need, like spice level, "Vegan," or "GF."
That last point is where your photo-ingredient column becomes a superpower. It lets Claude write with real detail instead of guessing, and it surfaces mismatches — I found a dish whose menu text mentioned peanut sauce while the photo plainly showed red curry paste. Fixing those isn't just polish; a description that doesn't match the plate generates refund requests.
Part 1 — The master rewrite prompt (one dish at a time)
Start with a single dish so you can dial in the voice before running the whole menu. Open Claude, paste in the three inputs for one dish, and use a prompt that spells out the rules above. This is the core prompt I used:
When you like the result, lock the voice in so every future dish matches. I told Claude: "That's the voice I want — warm, specific, a little bit of Thai heritage where it fits. Remember that style for the rest of the menu."
Part 2 — Rewriting the whole menu at once with Claude Cowork
Once the style was set, I didn't do 90 dishes by hand. I handed the entire spreadsheet to Claude Cowork, which can open the sheet, read every row, and write a new description for each one against the same rules. This is the batch prompt:
Two things worth adding depending on where the copy will live. If it's going onto a delivery app with a character limit, add: "Keep every description under 200 characters so it isn't truncated on DoorDash and Uber Eats." And if you want to protect house information, add: "Move any operational notes — BOGO limits, 'don't order alone,' delivery-bag instructions — out of the description and into a separate 'Operational Notes' column; a description should only describe the food."
Part 3 — Using the photo for the dishes that matter most
For signature dishes and anything expensive, go one step further and let Claude see the plate. Drag the dish's image straight into the chat alongside the text:
Part 4 — Quality-control passes
Before publishing, I ran two cleanup prompts across the finished column. The first checks consistency: "Read all the new descriptions together. Are any drifting into a different voice, repeating the same opening word, or overusing a word like 'savory'? List the ones to tweak." The second checks honesty: "List any description that makes a claim — an ingredient, a cooking method, a health or origin claim — that isn't supported by the current description or the observed ingredients." Menus carry allergy and dietary weight, so this last pass matters: it's how you make sure "irresistible" never becomes "inaccurate."
Before and after, from my own menu
Here's what the workflow actually produced, so you can see the difference the three-input method makes.
That last one is the clearest argument for the whole exercise: three of my drink "descriptions" were actually delivery-bag instructions that had never been written as descriptions at all. Customers were being asked to buy a $6 tea described by a note about a straw. Twenty minutes with Claude turned every one of them into something worth ordering — and caught the mistakes I'd stopped seeing.