CLAUDE LABJP
PRICING — September 1 was the scheduled date for the Sonnet 5 price increase, and it did not happen. The introductory $2/$10 per MTok now stands as the regular pricePARTNER — Salesforce and Anthropic announced Claudeforce, an expanded partnership. The Salesforce in Claude plugin ships with 37 prebuilt sales skills, from meeting prep to pipeline managementTRUST — Claudeforce serves Claude through Amazon Bedrock inside the Salesforce Trust Boundary, so data and inference never leave the security perimeter — an answer aimed squarely at regulated industriesBETA — Salesforce in Claude is with select pilot customers for now, with an open beta expected during SeptemberLIMITS — The 50% weekly-limit boost runs through September 13. From September 14 the permanent level is 25% above the pre-promotion baseline, roughly a 17% cut from todayRELEASE — Claude Code has shipped nothing since v2.1.251 on August 28. Against a pace of one release every 0.8 days, a four-day gap is among the longest yetPRICING — September 1 was the scheduled date for the Sonnet 5 price increase, and it did not happen. The introductory $2/$10 per MTok now stands as the regular pricePARTNER — Salesforce and Anthropic announced Claudeforce, an expanded partnership. The Salesforce in Claude plugin ships with 37 prebuilt sales skills, from meeting prep to pipeline managementTRUST — Claudeforce serves Claude through Amazon Bedrock inside the Salesforce Trust Boundary, so data and inference never leave the security perimeter — an answer aimed squarely at regulated industriesBETA — Salesforce in Claude is with select pilot customers for now, with an open beta expected during SeptemberLIMITS — The 50% weekly-limit boost runs through September 13. From September 14 the permanent level is 25% above the pre-promotion baseline, roughly a 17% cut from todayRELEASE — Claude Code has shipped nothing since v2.1.251 on August 28. Against a pace of one release every 0.8 days, a four-day gap is among the longest yet
Articles/Cowork
Cowork/2026-05-30Advanced

Localizing an App Store Screenshot PSD into 15 Languages Overnight with Cowork

A work log of localizing the store screenshots for the Android wallpaper app 'Beautiful Wallpapers' into many languages with Cowork: extracting text with psd-tools, pouring translations into layer names, and the real walls I hit with Thai and Korean glyphs.

Cowork36psd-toolsLocalizationApp Store8Google Play2PhotoshopMultilingualASO2

Premium Article

The moment I opened the PSD from my designer, I froze. 1440x13333px, 220MB. It held the store screenshots for my Android wallpaper app "Beautiful Wallpapers," with Japanese headline copy scattered across five artboards. I wanted to expand it into at least ten, ideally fifteen languages — and I wanted to start swapping the store assets the next morning.

Translating and replacing the Photoshop text layers by hand would mean 5 boards x 15 languages, or 75 screens of copy-paste, where mix-ups are guaranteed. So I handed the PSD itself to Cowork and let it process the file mechanically.

Doing so, I ran straight into an obvious truth: fonts and glyphs are far more stubborn than translation. This is the log of that one night.

Why screenshot localization can be cleanly separated from making art

The first thing I settled in my own mind was where to draw the line on letting AI help. I make contemporary art alongside indie development, and I have consistently kept AI out of the artwork itself. Making things by hand carries meaning of its own, and I want to preserve that.

But putting a work or an app "out into the world" is a different job from making it. A store screenshot is not the substance of the wallpaper product; it is closer to the price tag or the point-of-sale display that puts it on the shelf. So screenshot layout and localization fall, without hesitation, into the designer work I am happy to delegate to AI.

Keeping creation and promotion consciously separate lets me make this call in an instant. When that line stays blurry, you end up relitigating "how far should I automate this?" on every single task.

Count what the PSD is made of, first

Before localizing, I need to know exactly what the PSD is built from. The Cowork environment can install the Python edition of psd-tools, so I opened the file and dumped its structure.

One caveat: pip in that environment is protected by PEP 668, so a plain install stops with externally-managed-environment. I covered that in When pip install stops with externally-managed-environment in Cowork's Bash, and reading it first will save you a detour.

from psd_tools import PSDImage
 
psd = PSDImage.open("screenshot.psd")
print(f"canvas: {psd.width} x {psd.height}")
 
for layer in psd.descendants():
    kind = layer.kind  # 'type' / 'pixel' / 'group', etc.
    if kind == "type":
        print(f"[text] {layer.name!r} @ {layer.bbox} -> {layer.text!r}")
    elif kind == "group":
        print(f"[group] {layer.name!r} children={len(list(layer))}")

The output showed that each of the five artboards was a group, with roughly 40 layers per board (two text streams: headline and description).

One thing mattered here: the PSD that had been sitting in my workspace and the uploaded one had different resolutions. The canonical file was the uploaded 1440x13333px, 220MB version, so I pinned the script to extract and render from that file. When you receive several copies, deciding which one is canonical exactly once, up front, saves you from rebuilds later.

If the PSD arrives through a cloud-synced folder, you can hit a stranger problem: bash claims the file does not exist while Finder shows it plainly. I wrote about that in Why Cowork's bash says "no such file" when Finder can see it. With a 220MB file, materialize it before you touch it.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Follow the full hands-on flow of taking a 1440x13333px, 220MB store PSD, counting its artboards and text layers mechanically with psd-tools, and pouring 15 languages into it
See working code for the mac_roman trap, where psd-tools fails to save non-ASCII layer names, and how writing the luni block directly resolves it
Take away an auto-shrink implementation for translations that overflow the canvas, plus a clear line for where automation should stop and hand back to a human
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

Cowork2026-08-29
The lock I left in a shared folder shut out every run after the first
A cloud-synced connected folder allows create, append, and rename, but refuses delete. Putting a single-instance lock there quietly disabled every unattended run after the first. Measurements for three lock styles, plus an implementation that picks a safe location.
Cowork2026-08-24
I counted the keys in my connected folder: filenames found 5 of the 18
A record of counting what lives inside a connected folder, once by filename and once by file contents. Filenames returned 24 hits of which only 5 were real, while a content scan returned 18 of which 13 left no trace in their names. Includes a scanner that never prints a secret, its real output, and the rules I adopted afterwards.
Cowork2026-07-11
Make Your Nightly MCP Connectors' Health Visible — A Lightweight Ledger for Solo Operators
You don't need Enterprise connector observability to see your MCP connectors' error rate and latency. Append one line per tool call, roll it up weekly, and let regressions ring a bell. A working health ledger for anyone running scheduled tasks solo.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →