🤖 AI Tools

Screenshot-to-App-Copy Extractor (Pasted UI Text Only)

Turn pasted UI text from a screenshot (OCR or typed) into a structured copy deck: labels, CTAs, errors, and missing states. Text only, no vision claims.

0.0
0Reviews
P
August 24, 2026

Prompt

Act as a product copywriter auditing an interface from text only. The user will paste OCR or typed text from a screenshot. You do not claim to see the image. You extract, structure, and improve copy. You do not invent screens that were not in the paste.

Inputs:
- Pasted UI text: [Paste]
- Product and surface: [Surface]
- Voice: [Voice]
- Audience: [Audience]
- Constraints: [Constraints]
- Known issues: [Issues]
- Locales: [Locales]
- What I want back: [Deck / rewrite / both]

Generate:
1. Caveat: One line: this is from pasted text, not pixels. List strings that look like OCR errors (l vs 1, missing buttons).
2. Inventory: Every distinct string, grouped: nav, headings, body, form labels, placeholders, primary CTA, secondary CTA, helper, error, legal, empty-state, toast. If a group is absent, write "not in paste."
3. Hierarchy guess (labeled guess): What is primary action vs chrome, based on verbs and repetition, not on color you cannot see.
4. Problems: Unclear labels, double CTAs, missing error, placeholder-as-label, shamey empty states, legal stuffed in a button. Tie to Issues when present.
5. Copy deck: Table: id | current | purpose | proposed (Voice) | notes. Proposed must keep Constraints (legal phrases, product names). Mark "unchanged" when the line is already fine.
6. Missing states to write (not in paste): default 5: empty, loading, success, fail, permission denied. Only draft them if Surface needs them. Label as new, not extracted.
7. If rewrite requested: paste-ready strings for the existing inventory only, grouped the same way. Character counts for buttons (aim <= 20 chars where English allows).
8. QA: 5 test strings (long German-style, emoji name, blank field) and what the UI copy should do. No fake screenshots.

Constraints:
- Never say "in the screenshot I see." You see [Paste] only.
- Do not invent brand-new features. Missing states are copy, not product scope.
- Do not claim WCAG from text alone beyond "this string is a placeholder used as a label."
- Honor Constraints (trademark, "don't say free if paid").
- No lorem. No "delightful."

Instructions

Replace every [bracket] with your details before running. Works on ChatGPT, Claude, and Gemini.

Examples

Example Input

Pasted UI text:
BatchNotes
Publish changelog
Title
Untitled changelog
Audience: Everyone with the link / Only members
When: Now / Friday 10:00 AM
[Publish]
Cancel
"Members can draft. Owners can publish."
Error: "Somethng went wrong"
"Don't forget to tell Twitter!"
Product and surface: BatchNotes web, publish modal
Voice: Direct, dry, product-led
Audience: ops leads at 20-200 person companies
Constraints: Auto-tweet was removed; do not tell people to post to Twitter/X unless they connected a Zap. Do not say "everyone on the internet" if the option is "everyone with the link." Product name is BatchNotes.
Known issues: OCR may have typos; Twitter line is stale; error is generic
Locales: English first
What I want back: both

Example Output

1. Caveat
From pasted text only, not pixels. OCR suspect: "Somethng" (Something). Possible missed strings: close X, timezone label, Zap mention. Not assumed.

2. Inventory
Nav/chrome: BatchNotes.
Heading: Publish changelog.
Body/helper: Members can draft. Owners can publish.
Form labels: Title; Audience; When.
Placeholders/values: Untitled changelog; Everyone with the link / Only members; Now / Friday 10:00 AM.
Primary CTA: Publish.
Secondary: Cancel.
Error: Somethng went wrong.
Stale helper: Don't forget to tell Twitter!
Empty/loading/toast/legal: not in paste.

3. Hierarchy guess
Guess: Publish is the primary action (verb + heading). Cancel is escape. Audience and When are the decisions. Twitter line is leftover chrome, not a control.

4. Problems
- Untitled changelog looks like a value pretending to be a title; may need placeholder vs actual title.
- Error is generic and misspelled; no next step.
- Twitter line violates Constraints (auto-tweet removed).
- "Everyone with the link" must not be rewritten as public internet.
- No timezone next to Friday 10:00 AM in the paste.

5. Copy deck
id1 Publish changelog | heading | unchanged (clear).
id2 Title | label | unchanged.
id3 Untitled changelog | empty title value | "Add a title" as placeholder, not a fake title.
id4 Audience | label | unchanged.
id5 Everyone with the link | option | unchanged (do not say internet).
id6 Only members | option | unchanged.
id7 When | label | "When (workspace timezone)" if we may add words.
id8 Now | option | unchanged.
id9 Friday 10:00 AM | option | "Friday 10:00 AM, workspace timezone"
id10 Publish | primary | unchanged.
id11 Cancel | secondary | unchanged.
id12 Members can draft... | helper | unchanged.
id13 Somethng went wrong | error | "Couldn't publish. Try again, or copy your draft first."
id14 Don't forget to tell Twitter! | stale | Remove. If Zap connected (not in paste): "Posts to X only if a Zap is connected." Otherwise omit.

6. Missing states (new, not extracted)
Empty title: "Add a title to publish."
Loading: "Publishing..."
Success: "Published. Here's the link."
Fail: use id13.
Permission: "Members can draft. Ask an owner to publish."

7. Rewrite (existing inventory)
Heading: Publish changelog
Title placeholder: Add a title
Audience: Everyone with the link | Only members
When: Now | Friday 10:00 AM, workspace timezone
Helper: Members can draft. Owners can publish.
Primary: Publish (8)
Secondary: Cancel (6)
Error: Couldn't publish. Try again, or copy your draft first.
Twitter line: omit.

8. QA
Long title 80 chars: field must not clip without expand.
Emoji in title: allowed unless Constraints say no.
Blank title: block Publish with empty-title string.
Locale DE: button "Publish" may grow; keep one verb.
OCR "Somethng": treat as error string, not a product word.

Reviews (0)

Please login to leave a review.
Loading reviews...