Project · 2026

Jimaku Catcher

In 2026, I built a tool that runs on my Mac and captures the unfamiliar words I see in subtitles (jimaku) while watching Japanese TV. This case study is about building that tool, using an AI-powered workflow including the Anthropic API, Airtable, Claude Code, and GitHub.

Human-in-the-loopAI pipeline designInteraction designClaude CodeLanguage learning
The Jimaku Catcher review page: a paused TV frame from a cooking segment (“木の芽煮,” kinome simmered with kombu) beside its extracted vocabulary cards — words like 山椒 (Japanese pepper), 若葉 (young leaves), and 佃煮 (tsukudani) as tappable cards, three already marked saved and highlighted green
The review page, mid-session: a captured frame next to its extracted word cards, three already tapped and saved.

Context

One does not simply learn Japanese

After a year of studying Japanese 5 days a week as a college freshman, I traveled to Japan for the first time to study the language in situ. I turned on the TV in my dorm in Tokyo and was completely overwhelmed. I could hardly understand what people were saying — and even though Japanese captions covered the screen, especially on variety shows, I still had no practical way to capture the words I didn’t know.

Over the years, my Japanese improved, but watching TV still meant encountering words I wanted to save: pausing the show, taking a photo of the screen, or hastily trying to copy down unfamiliar characters before they disappeared. There was never a low-friction way to turn those moments into something I could learn from.

How it works

Catch unknown words without pausing the show

The workflow shifts from stopping to look things up → capturing everything as it appears and reviewing it afterward.

Before Jimaku Catcher
Manual capture
  1. Notice an unfamiliar word
  2. Pause the show before it disappears
  3. Take a photo of the screen
  4. Run the image through Google Translate
  5. Look up/save the useful words manually
  6. Resume watching
After Jimaku Catcher
Capture without interrupting
  1. CapturePress a keyboard shortcut. The show keeps playing.
  2. ExtractClaude reads the screenshot and identifies vocabulary candidates.
  3. ReviewScreenshots and vocabulary cards appear frame-by-frame in my browser.
  4. DecideI choose what is worth saving.
  5. SaveSelected words are added to Airtable as my learning backlog.

A limitation of this tool is that it doesn’t work for Digital Rights Management (DRM) protected streaming platforms like Netflix, Amazon Prime, Hulu, or Crunchyroll, which block screen capture at the operating-system level (and yields an empty screenshot), so those still get a phone photo when an unfamiliar word comes up worth pausing my show for and looking up in the dictionary. The program that I use to watch Japanese TV doesn’t block screenshots.

Building the first version

Claude reads the screen; everything else is my call

Claude’s role was scoped narrowly from the start: read an image, identify vocabulary, and return words with readings and meanings.

Claude repeatedly suggested ways to make the system more autonomous. My job was deciding whether those changes actually supported the learning experience.

Capture pipeline — screenshot to saved vocabulary
Keyboard shortcutshow keeps playing
Screenshots folderwatcher picks up the screenshot
Claude · Anthropic APIwords + readings + meanings
Review pagescreenshot beside word cards
Airtableselected words saved as Learning
Decision 1
Who decides what is worth learning?
Claude suggested

Automatically filter vocabulary by estimated difficulty and only show words likely to be useful.

Why I changed it

Difficulty is personal. After 20 years of studying Japanese, the word that stops me is rarely predictable: I might already know a “hard” word I’ve seen hundreds of times, but miss a specific food term, name, or expression that changes the meaning of a scene.

Final design

Claude shows candidates. I decide what matters.

Decision 2
Should everything be saved?
Claude suggested

Send every extracted word to Airtable so I could organize them later.

Why I changed it

Saving everything just moves the cleanup work somewhere else. On a typical screenshot, most words are things I already know. The useful action is the moment of recognition: “this is the one I want to remember.”

Final design

Only intentional taps become saved vocabulary.

IPA Drill, an earlier project of mine, runs on the same principle: the system can assist, but I confirm what I know and don’t know — not AI.

Version 1.0 — two possible actions
Review pagescreenshot beside vocabulary cards
Two possible actions
Tap card
  • Learning
  • Saved to Airtable
Do nothing
  • Undecided
  • Can decide later

Iterating on the design

What changed once I started using it

A review frame from a karaoke episode showing two bugs at once: PRIDE and POINT — English on-screen scoring labels — extracted as vocabulary cards, and せつない’s long definition (“painful/heartbreaking/longing”) sitting alongside the compound card かまいたち軍
One screenshot, two issues: English text extracted as vocabulary, and a long definition extending past the card boundary.
A vocabulary card reading POINT / ぽいんと / point (key scoring section) — an English on-screen scoring label extracted as if it were a Japanese vocabulary word

Claude extracted every word it saw — including English text. I instructed Claude Code to adjust the prompt so only Japanese vocabulary became cards.

A vocabulary card reading せつない with its English definition “painful/heartbreaking/longing” wrapping onto a second line

I noticed longer words extended past the card boundaries. Increasing the card width preserved the layout while keeping vocabulary readable.

After using the first version, I noticed another problem: screenshots with lots of text generated long stacks of vocabulary cards. Many were words I already knew, but because the system had no concept of “known,” they kept appearing again and again, adding visual noise and pushing useful words farther down the page.

I needed a third state: not learning, not undecided, but already known. Instead of adding another button or cycling through states, I matched the interaction to the intent: if I already knew a word, I wanted to get it out of my way.

Dragging a card off screen marks the word as Known in Airtable, filtering it out of future results — even when that word appears again in another screenshot.

Version 2.0 — teaching the system what I already know
Review pagescreenshot beside vocabulary cards
Three possible actions
Tap card
  • Learning
  • Save for study
Drag off screen
  • Mark as “Known”
  • Teach the system I know this already
Do nothing
  • Undecided
  • Keep available
Dragging a card off screen marks a word as Known — it won’t appear again in Jimaku Catcher.
Live view — updated as I watch and review.

The Learning list itself is still just a growing backlog of words waiting to be studied. There are many ways to actually quiz and teach vocabulary, and designing that mechanism is the next item on the roadmap, not something this version tries to solve yet.

What this demonstrates

Capabilities and evidence

The pipeline itself is simple by design: a folder watcher, one API call, a review page, and a database. The design challenge was defining the right workflow, deciding where automation should stop, and determining how the pieces should work together. An AI coding tool collapsed the distance between having a well-specified problem and having working software to solve it.

Scoping AI to one bounded task
Claude reads screenshots. Code I specified handles everything else: storage, state, removing duplicates, and every decision about what to keep.
Directing an AI coding tool through real bugs
I wrote a spec complete enough to ship a working pipeline in one pass, then reviewed, redirected, and approved Claude Code's judgment calls as real use surfaced problems.
Systems design under real constraints
Making sure the same screenshot never gets processed twice, catching duplicate saves when two happen at once, retry cost tradeoffs, and macOS permission behavior, all diagnosed on the one machine the tool runs on.
Disciplined iteration grounded in real use
Every fix traced to an actual screenshot or Airtable record, not a synthetic test case, with the full commit history in a private GitHub repository.

Related work