This page is about frames in studies. The API uses “frame” for
something else: the rendered screen you send with each turn.
One screen, three kinds of difference
A frame is one screen: one route of your site or app, or an overlay on one (a search dropdown, a cookie banner, a checkout step that keeps the same URL). Within a frame, ish keeps apart three ways the screen can differ:
So a product page that showed ten products is still one frame, and so is a login
page in dark mode. A deliberate redesign is a new state of the same frame, not a
new frame, which is what lets you compare it.
Frames belong to the workspace, not to one study. The same
screen reached in iteration B, or in another study of the same workspace, lands on
the same frame. A page captured on desktop and the same page captured on mobile
are separate frames, because they are different screens to the person using them.
Frames exist only in interactive studies: hosted web runs on desktop or mobile,
local runs from the CLI (web, iOS, and Android), and Figma prototypes. Media
studies are read by segments
instead, and chat studies by turns.
How ish finds the screens
Frames are not drawn up front. ish forms them while the run happens, one capture per step, by asking whether this screen is one it has seen before. The first evidence is identity the screen already carries: the node of a Figma prototype, the accessibility structure of a native app screen, or the route of a web page. Then ish compares how the screenshot looks with the screens already in the workspace. A near-identical image is matched at once, a clearly different one becomes a new frame, and close calls go to a model that compares the two screenshots and says whether they are the same screen and how they relate: the same state, a new state, another record, an overlay, or a display change. Some rules keep the grouping honest:- A redesign appears only between iterations. Within one iteration, a screen that looks different is matched to a state already seen, never recorded as a redesign.
- A poor capture never makes a frame. A clipped or partial screenshot is
matched to the closest state, or kept with no frame at all. Steps with no frame
are read under
_unmatched; see slicing results. - Figma frames are known in advance. Before a Figma run, ish registers every frame reachable in the prototype flow under its Figma name.
How frames are named
A new frame takes its name from the URL when the URL names the screen (a route like/checkout, or a template route such as /wiki/{slug}, which becomes
“Article”). When the URL says nothing useful, the name comes from what the
participant reported looking at. An overlay or step is named from the
participant’s report. A Figma frame keeps its name from Figma. A record is named
from the page’s main heading, else its title, else the URL.
What a frame card shows
In the web app’s Frames tab, each screen gets one card:- The screenshot of the state on display, with a heatmap you can switch on. The heatmap marks where simulated steps landed, not real clicks.
- The states of the screen and its overlays, in the order they were first seen, and a picker for its records and display settings where there are real alternatives.
- Four numbers. Friction, Sentiment, and Avg time are worked out over the steps taken on the screen, so one participant can count many times. Reach is the share of participants who reached the screen at least once. Friction and Sentiment appear from 5 steps on a screen.
Reading frames on each surface
- Web app
- CLI
- MCP
The study’s Frames tab shows the cards, with a table view and search. The
workspace also has a frame library listing every frame across its studies.
Comparing a screen across iterations
Because the same screen lands on the same frame in every iteration (shown as versions in the web app), a frame is where a change shows up most directly. In the web app, turn on Compare with two or more iterations that have results, and each card shows one column per iteration: its screenshot, heatmap, and numbers. An iteration that never reached the screen shows an empty column. On the CLI and MCP, narrow to one screen and group by iteration:Related
Slicing results
Filter and group results by frame, and how unmatched steps are read.
Reactions and results
The reported journey frames are grouped from.
Test a Figma prototype
Runs whose frames come straight from your Figma file.