Stitch chat screenshots
Load the screenshots you took while scrolling the conversation: the tool finds the part that repeats between one and the next and keeps it once, with the top bar and the typing field only once. If a piece is missing between two screenshots, it tells you instead of making it up.
When you need it, and why stacking them is not enough
Screenshots of a conversation are needed when the conversation has to leave the phone: the agreement made in a chat with the landlord, the quote that arrived on WhatsApp, the order the seller says never arrived. Whoever receives them does not want twelve images to open one at a time: they want to read from top to bottom, as on the phone.
Many phones have a scrolling screenshot, but not everywhere: on Android scroll capture only works in the apps that allow it, and on the iPhone the «full page» option exists in Safari and saves a PDF, not an image.
Putting them one under the other, which is the job of Merge images, makes things worse here: every screenshot repeats the end of the previous one, and in the middle of the conversation the clock, the contact name and the typing field come back every time. This page finds the point where two screenshots overlap and stitches there.
How it finds the point where they overlap
When you scroll, the content moves and the bars do not: between two neighbouring screenshots there is a band of identical rows, only higher up in the second one. The tool compares the end of the first with the start of the second shifting it one row at a time, and looks for the shift where the shared band fits entirely, from one edge to the other. The bars stand still and stay out of the count.
A row is not compared pixel by pixel but through up to 96 vertical bands, the average brightness of each one: the margin absorbs the noise of a JPEG at quality 80 and does not confuse two different lines of text. And only the shifts where at least three outline rows (the edge of a bubble, a line of text) already match are tried: so, at 1080 by 2340 pixels, a join is found in a few hundredths of a second.
The seam falls in the middle of the shared part, far from the edges. At the top stays the bar of the first screenshot, with its clock, and at the bottom the bar of the last one: once each. If you do not want them, untick the box and only the messages remain.
In the tests a fake chat is cut into screenshots with overlaps decided in advance: with PNGs the stitched image must be identical pixel by pixel to the original, with JPEGs exactly as tall, because one row too many at a join shifts everything after it.
Plain background, where the pixels say nothing
The hard case is not the text, it is the emptiness. An area of uniform background matches itself at any shift: if the part two screenshots share is made only of background, the pixels cannot say how much they overlap, and a program that chooses anyway chooses at random.
That is why it does not count the rows that match, but the rows that change and match: the edge of a bubble, a line of text, a time stamp. The tests include a pair sharing 45 rows of message and 365 of background: every shift lines background up with background, but only the right one also matches the message.
If the shared part is only background, the tool says so and joins the two screenshots with a clearly visible separator line instead of choosing; the same when a piece is really missing, since from outside the two cases look alike. With a photo as chat wallpaper, still while the messages scroll, the rows never match and the joins must be set by hand; a faint doodle or gradient wallpaper does no harm.
Repeated messages, when more than one join fits
The other trap is identical rows. With five identical «Ok, see you later!» in a row, the end of a screenshot matches the start of the next one in several places, one per message: no pixel comparison can know which one is the real one.
The trickiest case is the message sent twice, identical but with the time one minute apart. Laying one copy over the other, every row of the message matches, until the time that does not add up; the real join may share only the tail of a bubble, but it fits entirely. That is why a row that contradicts a join counts as evidence against it, and the winner is the one no row contradicts. The tests include 120 pairs like this, taken at every point around the two messages, plus 60 pairs from a shop page with the same box in every product card: none of them is stitched wrongly in silence.
When the pixels really are not enough the join is uncertain: first comes the one that fits from edge to edge, and below it the others to try. And if even the best one has a few rows that do not add up, for example because of a notification over one screenshot, it does not call it found: it marks it for checking and shows its preview.
Every join also has manual adjustment, one row at a time or ten at a time. It also helps when the tool finds nothing but you know the two screenshots overlap: raise the shared part until the sentences knit together in the preview, and the separator line goes away.
When a piece is missing, or the order is wrong
The screenshots are lined up by name, including the ones added later: for phones that is the order they were taken in. The arrows change the order, and if a join only fits the other way round the warning tells you to swap them; if they are all the other way round, because you took them scrolling up the chat, one tap on «Reverse the order» is enough. The same screenshot loaded twice (it happens, with the clock one minute ahead) is skipped.
When two screenshots share nothing the separator line stays in the image, dark grey with a white dashed line, so whoever reads it sees that there a piece is missing and does not think the conversation goes on without interruption.
Very long images and the limits of the browser
A long chat becomes a very tall image, and a browser does not draw images as tall as you like: Chrome, Edge and Firefox go up to 32,767 rows, Safari, and with it every browser on the iPhone and the iPad, to 16,384 rows and 16.7 million pixels, about 15,500 rows at 1080 wide. The page uses the ceiling of the browser you have; past that, the image comes out in several parts, cut on a row of plain background between one message and the next.
The format is PNG, which loses nothing and stays light with chats, made of flat colours. If the conversation contains photos the PNG swells: above 10 MB the image comes out as a high-quality JPEG, and the page says so.
What it does not do
It does not read the text. The stitched image stays an image: to copy the words of the conversation you need Image to text. It does not hide anything: if the screenshots contain phone numbers, addresses or names to cover before sending them, first go through Cover data in a screenshot. And it does not make collages of photos side by side, which is the job of Merge images.
It sends nothing over the network. The screenshots are opened and stitched inside the browser: there is no server receiving them. If the conversation has to become a PDF to attach, the image is turned into one with Images to PDF.