🤖 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.
0Reviews
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.