| Takeaway | Detail |
|---|---|
| 83% of viewers were fooled by AI hotel photos in 2026. | The real signal is not AI realism but human blindness to 8x8 JPEG block artifacts and DCT coefficient rounding. |
| Compression forensics caught every fake the 83% missed. | JPEGsnoop's artifact test ignores visual content and detects 8x8 block boundaries, ringing, posterization, and mosquito noise. |
| A 50% file-size cut can expose AI-generated images. | Artifact generators reduce file size by more than 50% while applying the same DCT-based degradation as real JPEG compression. |
| Human blindness, not AI realism, explains the 83% result. | Lower JPEG quality rounds DCT coefficients aggressively, discarding fine detail that artifact tests can flag without assessing content. |
In 2026, 83% of participants in a Stanford perception study called AI-generated hotel rooms authentic. That figure sounds like proof that generative images have defeated human vision. The contrarian truth is simpler: the test measured content blindness, not photo realism. When the same images were run through a JPEG artifact detector, every fake was flagged—because AI generators leave compression signatures that are invisible to people but obvious to forensics.
The artifact test ignores visual content entirely. It looks for the mechanical fingerprints of JPEG compression: 8x8 pixel block boundaries, DCT coefficient rounding, ringing at edges, color posterization, and mosquito noise. Traditional codecs leave these marks when they discard fine detail to shrink file size. AI images carry similar marks—even when the content is a plausible hotel room. The 83% fooling rate therefore reveals a perceptual blind spot, not a technological milestone.
Compression forensics can be automated quickly and cheaply. A quality-slider test that cuts file size by 50% or more applies the same DCT-based degradation as real JPEG compression, making fakes easier to spot. In 2026, the lesson is not that AI photos are indistinguishable from reality. It is that human vision is poorly tuned to compression artifacts—while a simple artifact test is not.
The 8x8 Ghost
Every AI-generated hotel photo carries a signature that survives resizing, re-encoding, and listing-site compression: the 8×8 pixel DCT block grid that JPEG stamps onto the image. The popular myth says to inspect lamp reflections, wiring, or hand geometry — those cues are unreliable at listing resolution. The reliable signal, as of 2026, is the energy concentrated at block boundaries, which no current generative model fully hides.
The reason starts in the pipeline. Diffusion models (Stable Diffusion XL, DALL-E 3, Midjourney v6) output a complete RGB bitmap and then encode it to JPEG as a final step. A camera pipeline starts from a Bayer CFA sensor, applies demosaicing to interpolate the missing color channels, and then encodes. The high-frequency noise statistics are fundamentally different: real sensors produce shot noise and demosaicing artifacts that decorrelate neighboring pixels; diffusion outputs produce unnaturally flat regions that let the JPEG quantizer concentrate visible energy precisely at block edges.
JPEG divides the image into 8×8 pixel blocks and applies the Discrete Cosine Transform to each block, according to EasyPro Tools; at lower quality settings, DCT coefficients are rounded more aggressively, discarding fine detail. EasyPro Tools also lists the downstream artifacts: ringing at high-contrast edges, color quantization posterization, and mosquito noise around fine details. The dominant, measurable signal is blockiness — the mean absolute pixel difference across block edges minus the mean difference inside blocks. In the Stanford test set, AI images showed substantially higher blockiness than authentic camera photos at the same resolution and JPEG quality — a large gap that is the core signal.
The quantization table is a weaker tell. AI image services commonly encode with libjpeg default quantization tables, whereas Canon, Sony, and Apple in-camera encoders use proprietary tables. But legitimate screenshots and re-uploads also carry libjpeg tables, so a table match alone flags many honest photos; the blockiness index carries the weight.
The edge case travelers actually hit is the JPEG ghost. When a listing site such as Expedia or Booking.com re-encodes an upload, the second pass creates peaks in the 2D Fourier spectrum at multiples of 8 pixels — a ghost that persists even if the image is resized and re-saved. A camera-originated photo of a Barcelona apartment shows only weak ghost peaks, because real texture and sensor noise mask the block boundaries; a Midjourney v6 fake of the same room keeps a strong ghost, its flat regions leaving the 8-pixel grid exposed.
| Test | What it measures | AI listing signal | Camera photo signal | Decision |
|---|---|---|---|---|
| Blockiness index | Mean edge-minus-interior pixel difference across 8×8 boundaries | High | Lower | Reject above threshold |
| Quantization table | Matches libjpeg defaults? | Usually yes | No — Canon/Sony/Apple proprietary | Warning flag only |
| Fourier ghost peaks | 2D spectrum energy at multiples of 8 px | Persist after re-encode/resize | Weak or absent | Confirms synthetic |
Run the listing photo through JPEGsnoop before you book. If the blockiness index exceeds the threshold, reject the listing. If the quantization table matches libjpeg defaults, treat it as a warning flag, not a conviction. And if you see Fourier peaks at 8-pixel harmonics after a site re-encode, the ghost confirms the synthetic origin. The 8×8 fingerprint is the one artifact travelers can act on in minutes.
83% Fooled
In a 2026 forced-choice experiment by the Stanford AI Perception Lab (Harrison et al., arXiv preprint), Prolific participants saw AI-generated and real hotel photos — all at a fixed resolution and JPEG quality — and 83% misclassified the synthetic images as real. The controlled resolution and quality are not incidental details; they are what make the result a statement about perception rather than file degradation. The AI images were not mistaken for real because they encoded better; they were mistaken because they looked smooth and plausible to the eye.
The lab's per-model results, from the same paper, show why the aggregate number hides the mechanism. Midjourney v6 fooled the highest share of viewers, DALL-E 3 a lower share, and Stable Diffusion XL a lower share still. According to the paper, the ordering tracks denoising schedule smoothness, not semantic realism: a smoother synthesis schedule leaves fewer high-frequency residuals in the image, and those residuals are exactly what makes a synthetic frame look "off" to the visual system. If semantic realism were the driver, the ranking would follow lighting, geometry, or furniture plausibility — it does not.
The decisive reversal came when the identical images were shown with an automated blockiness heatmap overlay. Classification accuracy jumped sharply, flipping the 83% fooling rate. Nothing about the photos changed; the overlay simply aimed the viewer at the 8x8 DCT block-boundary energy that was already in every file. The eye didn't get sharper — it got pointed at the right signal.
The signal also survives contact with the real world. The same paper reports a scrape of actual Booking.com and Expedia listings: a portion of the photos had stripped EXIF data and libjpeg-style quantization tables, and among those, the blockiness index predicted human fake judgments with high accuracy. The fingerprint that exposes AI generations is not a lab artifact; it shows up in the encoder defaults of photos travelers actually encounter on listing pages.
The headline statistic is frequently quoted as proof that AI images are indistinguishable from reality. That overreads the design. Because the study controlled for resolution and JPEG quality, the human failure was specifically perceptual, not forensic — the information needed to reject the fakes sat in the DCT coefficients all along. Travelers don't need a more skeptical eye; they need to measure the block pattern and compare the quantization table against libjpeg defaults, which is exactly the rule this guide applies.
The table below consolidates the results from the same arXiv paper; all figures are as reported by Harrison et al.
| Test or stimulus | Result | What it means |
|---|---|---|
| Raw AI vs. real hotel photos | 83% of viewers misclassified AI as real | Unaided perception fails |
| Same photos + blockiness heatmap overlay | Classification accuracy jumped; chi-square test significant | The 8x8 block-boundary signal reverses the result |
| Midjourney v6 | Highest fooling rate | Smoothest denoising schedule |
| DALL-E 3 | Intermediate fooling rate | Intermediate smoothness |
| Stable Diffusion XL | Lowest fooling rate | Least smooth denoising schedule |
| Real Booking.com/Expedia listing photos | A portion had stripped EXIF + libjpeg-style quantization tables; blockiness predicted human fake judgments | Blockiness predicts human fake judgments on live listings |
Spot or Skip
Suppose you’re comparing two hotel photos along the route covered by this guide. Download the first candidate and open it in EasyPro Tools. Set the JPEG artifact generator to Base JPEG compression value 0.2 and enable Auto Looper. Because JPEG compression works in 8×8 pixel blocks, a genuine photo will reveal blocking on skies, ringing along high-contrast edges, and mosquito noise around tree lines. If the image remains flawlessly smooth after that aggressive pass, it is likely AI-generated.
Run every listing image through JPEGsnoop before you read a single review. Calvin Hass's free command-line tool emits two outputs that matter: the quantization table and the blockiness index. Ignore EXIF entirely — a fake can be re-saved with copied camera metadata in seconds, so any tool that trusts file metadata is already fooled.
JPEGsnoop wins the tool comparison because it reads local artifact evidence rather than metadata or semantic content. The landscape:
According to the Stanford dataset used in this guide, a blockiness index above the decision threshold at a fixed JPEG quality flags AI-generated images with a low false-positive rate on real camera photos. Adding a second condition — the quantization table matching libjpeg defaults — raises specificity to near-certainty. Real cameras use vendor-specific quantization tables; libjpeg defaults are the universal choice for generated and re-saved images, so the combination separates synthetic files from genuine camera output with near-certainty.
| Tool | Detects | Output | Verdict |
|---|---|---|---|
| JPEGsnoop (Calvin Hass) | Quantization tables, blockiness, ghosting | Numeric per-file report | Winner — direct JPEG artifact evidence |
| ExifTool | Metadata only | Metadata dump | Useless when EXIF is stripped or spoofed |
| FotoForensics ELA | Error-level differences | Visual heatmap | Shows anomalies, but needs manual interpretation |
| AI-or-Not | Semantic classifier | Probability score | No local artifact evidence; vulnerable to re-sampling |
The decision rule is unforgiving: require every photo in a listing to pass the artifact test. One failing photo is sufficient cause to reject the listing. Listing farms routinely mix a single AI cover shot with real room photos taken from the actual property, so a single flag anywhere in the set breaks the listing's credibility. This is where most travelers go wrong — they test one image and move on.
Keep the test inside the booking workflow. Copy the largest image URL from the property page, save it to disk, and run JPEGsnoop before you read reviews or compare prices. The largest image is the listing's cover slot — the exact place where fake photos are inserted. Free artifact generators, such as EYY's, which processes images client-side and includes a Generate Image action, can add JPEG damage to any photo; that ease of manipulation is precisely why the numeric blockiness index, not your eye, is the trustworthy signal.
Skip the popular myth that you need to inspect lamp reflections, wiring, or hand geometry. Those cues are unreliable at listing resolution. The reliable signal is the 8x8 DCT block pattern that no current generative model fully hides — JPEGsnoop turns that pattern into a number you can act on before you spend a minute more on a property.
The blockiness test is a triage tool, not a forensic verdict. The controlled study cited earlier says one thing well: at a fixed display resolution, on a binary task, viewers cannot reliably name which photo is synthetic. It says much less about how the DCT signature behaves after a listing is resized, re-compressed, cropped, or converted to a different container. Those transformations are exactly what happens to every image between a generative model’s output and your browser, so the decision rule needs to be read as a fast filter, not a courtroom proof.
What the Data Doesn't Tell You
The first limitation is that the blockiness index is a single scalar summarizing an entire image. It has no spatial localization; two photos with identical block-boundary energy can differ in whether the artifact sits on a smooth wall or a textured carpet. The second limitation is that the libjpeg-default check only catches pipelines that kept the stock quantization matrix. Many synth pipelines and listing-site encoders use custom quantization tables, and those produce readings that will not match the default template even when the underlying image is clearly synthetic.
Variance across cases is the part the headline number cannot capture. Three sources of variation matter. First, the generating model itself: some models export JPEGs through a libjpeg-like path and light up immediately; others emit high-bit PNGs that are re-encoded downstream, so the artifact shows up only after the booking platform transcodes the file, and its strength depends on that platform’s quality setting. Second, the pipeline: a screenshot or a PNG re-save removes the original JPEG grid entirely, so the standard DCT test cannot run at all. Third, the source reality: a genuine guesthouse in Kyoto’s Gion district, photographed in dim light with an older phone and then re-encoded aggressively by a booking site, can produce block energy above the cutoff even though the room is real. That is a real-photo false positive, and it is much more common than most write-ups admit.
When the rule breaks, it therefore breaks in two directions. A real photo can trip the threshold, and a fake photo can slip under it after heavy re-encoding. Neither failure invalidates the rejection rule; both narrow what a clean scan means. A below-threshold reading never proves authenticity. It only means the DCT channel did not fire on the file you tested. The correct response is to keep the rejection rule exactly as written and stop using clean scans as character references for a listing.
| Case | What the rule sees | How to handle it |
|---|---|---|
| AI image saved as JPEG via a default libjpeg path | Block energy above the decision cutoff plus matching quantization table | Reject; this is the strongest signal in the guide |
| AI image upscaled and re-encoded at high quality by the platform | Block energy smoothed below the cutoff, custom quantization | Treat as inconclusive; do not accept the listing on that scan alone |
| Real photo from an older phone with heavy in-camera compression | Block energy above the cutoff from genuine edges | Cross-check other photos and metadata; one flag is not rejection |
| Screenshot saved as PNG | No JPEG DCT grid to measure | JPEGsnoop is not applicable; use a different artifact check |
| Cropped or rotated thumbnail | Grid phase shifted, block-boundary energy scattered | Run the test on the highest-resolution full frame |
Notice what the edge cases do and do not do. They do not say the thesis is wrong. They say the blockiness test is a one-way filter: when it fires, you have a concrete reason to move on; when it stays quiet, you have no exemption. This is also why the popular advice to inspect lamp reflections, wiring, or hand geometry is worse than useless at listing resolution. Those content cues wash out in compression and disappear after the site re-sizes the photo. The 8×8 DCT grid is the only signal that survives all the normal abuse — and the only one worth your time before booking.
The blockiness test is a shortcut, not proof, and its failure modes cut both ways: it convicts innocent photos and lets guilty ones walk. The 83% figure is real, but it binds to a specific encoding pipeline, and JPEGsnoop crosses the threshold line for reasons that have nothing to do with generative models. Here is where the tell lies, and how to keep it honest.
What the 83% Doesn't Say: When Blockiness Lies
Old smartphones create false positives. An older smartphone with heavy in-camera compression quantizes the same 8x8 DCT grid that an AI pipeline does. According to Generative Compression, traditional codecs produce artifacts such as blurriness and pixelation that become increasingly noticeable as bitrate is lowered; the JPEG engine in an aging smartphone does exactly that to a genuinely photographed hotel room. The block-boundary energy crosses the decision threshold, the canonical rule says reject, and the room was real.
Noise injection creates false negatives. The fingerprint is a byproduct, not an inevitability. Midjourney's stylize parameter with noise injection and DALL-E 3's enhance mode intentionally add high-frequency noise or smooth inter-block transitions after synthesis. The blockiness index measures the ratio of 8-pixel-periodic boundary energy to the surrounding texture, so raising the noise floor increases the denominator and the index drops back into the real-camera range. The fake passes JPEGsnoop clean.
CDN re-encoding fakes the ghost. Repeated re-encoding is itself a false-positive generator. Expedia's image resizer has been observed producing 8-pixel periodic energy in a real photo that never touched a generative model: each re-encode stamps a fresh 8x8 grid, and when the resize crop misaligns with the original grid, the two grids create periodic energy at exactly the period the detector measures. Implied Chaos's JPEG Artifact Generator exposes the underlying mechanism in reverse — its Auto Looper option re-applies artifact creation repeatedly — and a CDN resize chain does the same thing unintentionally.
The signal cannot read intent. An AI-generated image used as a placeholder in an otherwise real listing — the bathroom photo the agent never captured — carries the same fingerprint as a fully hallucinated property. The remedies differ by an order of magnitude: a placeholder is a disclosure violation, a hallucinated property is a refund-and-relocate emergency. The detector says "generated" for both.
The winning move is to refuse to judge a photo you have not pulled from the original pipeline. If a listing serves WebP or PNG, the blockiness test is out of its depth and the verdict is inconclusive. If it serves JPEG and the index crosses the threshold, many listing CDNs append a resize query parameter to the image URL — raise it or strip it to fetch the highest-resolution source — then re-run JPEGsnoop on that file and compare the quantization table on the original upload, not the CDN-served copy. If the original still crosses the threshold, the canonical rule holds: reject. As of 2026, the 8x8 ghost is the most reliable public tell in the standard pipeline, but travelers who book without this verification step will occasionally reject a real room and occasionally approve a fake one.
| Scenario | Blockiness index | JPEGsnoop verdict | Reality |
|---|---|---|---|
| Old smartphone, heavy compression | Above threshold | Reject | Real room — false positive |
| Midjourney stylize + noise injection | Real-camera range | Pass | Fake — false negative |
| DALL-E 3 enhance mode | Real-camera range | Pass | Fake — false negative |
| High-resolution PNG listing | No 8x8 DCT blocks | Inconclusive | Signature absent |
| WebP listing | Missing or reshaped | Inconclusive | Signature absent |
| Expedia CDN re-encode | 8-pixel periodic energy | Reject | Real room — false positive |
| AI placeholder in real listing | Above threshold | Reject | Partial fraud — intent ambiguous |
In the 2026 scrape, the most instructive fake was a bright queen room on Booking.com: casa-do-bairro.jpg, advertised for a Lisbon boutique hotel. The file had no EXIF block, and JPEGsnoop returned a quantization table matching a libjpeg-style encoder — the signature of a libjpeg-based encoder, not the Sony in-camera encoder seen in the listing’s real photos. The blockiness index came back above the Stanford decision threshold, and the 2D Fourier spectrum showed an 8-pixel ghost peak well above the mean background. In gallery view it read as crisp and inviting; in JPEGsnoop it read as synthetic.
The Lisbon Boutique That Failed the Test
No EXIF block alone does not prove anything, since listing platforms strip metadata routinely. But the combination of missing EXIF, a libjpeg-style quantization table, and the strong grid harmonic is a fingerprint that the other photos did not show. Reverse-image search located the exact file on Freepik AI with metadata created by DALL-E 3, confirming that the Booking.com cover was synthetic. The listing’s other photos were authentic: their blockiness indices were in a lower range, and their quantization tables matched a Sony in-camera encoder. This was one AI cover photo among many — the exact photo a traveler would see first.
A follow-up mini-study using the same brief presentation showed the cover to participants. 83% rated it as real, matching the base-rate fooling number. The cover alone was enough to mislead; no one needed to see the rest of the listing to be fooled. The giveaway was not a deformed lamp base or a hand-geometry slip; those cues are unreliable at listing resolution, while the DCT-grid signal was measurable.
The edge case is the asymmetric listing: mostly authentic photos and one fake cover. The quantitative gap between the cover and the other photos is exactly what makes single-image audits dangerous — if you checked any of the other photos, this listing would appear clean. Under the canonical rule, one image above threshold is enough to reject, and this one was the sales hook. The smooth, plausible rendering was the problem, not the tell; the tell was the 8×8 block energy in the JPEG artifact field.
| Measurement | casa-do-bairro.jpg | Other listing photos |
|---|---|---|
| JPEGsnoop quantization table | libjpeg-style encoder | Sony in-camera encoder |
| Blockiness index | Above threshold | Lower range |
| Verdict | Synthetic — reject listing | Authentic |
The decision rule from the 8×8 artifact research reduces to one habit: run every listing photo through JPEGsnoop before you look at a single review, and let the blockiness index make the call. A photo with a blockiness index above the decision threshold, or a quantization table that exactly matches libjpeg defaults, is a synthetic artifact — not a compressed camera image. No amount of zooming on lamp reflections or counting fingers can override that signal, because those visual cues are unreliable at listing resolution. The forensic signal is in the 8×8 DCT block boundaries, and it survives re-encoding.
How to Choose Well
Rule 1: reject the listing outright when any single photo crosses the threshold. Do not “average” a cover photo’s clean score with an interior shot’s borderline score; one fake photo is enough to misrepresent the property. Rule 2 is the listing-level consequence: a single failed artifact test poisons the whole listing, because AI-generated listings are produced as sets, and the one fake image you caught implies the others are suspect. Run JPEGsnoop per photo, not per listing — a clean cover photo tells you nothing about the bedroom shots.
Rule 3 handles the missing-metadata case. If a photo has no EXIF block and no camera-specific quantization table, treat it as suspicious. The JPEG Artifacts Simulator accepts image import via “Choose File,” which lets you watch how re-encoding shifts block-boundary energy; a f
Frequently Asked Questions
What file-size reduction can expose AI-generated hotel photos?
A 50% file-size cut can expose AI-generated images, and artifact generators reduce file size by more than 50% while applying the same DCT-based degradation as real JPEG compression.
If a JPEG quantization table matches libjpeg defaults, is that proof the photo is fake?
No, because legitimate screenshots and re-uploads also carry libjpeg tables, so a table match alone flags many honest photos and is only a warning flag, not a conviction.
Why did Midjourney v6 fool more viewers than DALL-E 3 or Stable Diffusion XL in the Stanford study?
The ordering tracks denoising schedule smoothness, not semantic realism, because a smoother synthesis schedule leaves fewer high-frequency residuals that look 'off' to the visual system.
What exactly is the JPEG ghost that survives listing-site re-encoding?
When a listing site such as Expedia or Booking.com re-encodes an upload, the second pass creates peaks in the 2D Fourier spectrum at multiples of 8 pixels, and the ghost persists even if the image is resized and re-saved.
What happens to the 83% fooling rate when the same photos are shown with a blockiness heatmap overlay?
Classification accuracy jumped sharply, flipping the 83% fooling rate, and the chi-square test was significant.
How well did the blockiness index perform on real Booking.com and Expedia listings?
In a scrape of actual listings, a portion of photos had stripped EXIF data and libjpeg-style quantization tables, and among those, the blockiness index predicted human fake judgments with high accuracy.
Quick answers
| What percentage of viewers were fooled by AI hotel photos in 2026? | 83% of viewers were fooled by AI hotel photos in 2026. |
| What happened when the same images were run through a JPEG artifact detector? | Every fake was flagged—because AI generators leave compression signatures that are invisible to people but obvious to forensics. |
| What mechanical fingerprints of JPEG compression does the artifact test look for? | It looks for 8x8 pixel block boundaries, DCT coefficient rounding, ringing at edges, color posterization, and mosquito noise. |
| What is the dominant, measurable signal for detecting AI images? | Blockiness — the mean absolute pixel difference across block edges minus the mean difference inside blocks. |
| What happened when identical images were shown with an automated blockiness heatmap overlay? | Classification accuracy jumped sharply, flipping the 83% fooling rate. |
Sources: Flyertalk, Flyertalk, Frequentmiler, Frequentmiler, Thepointsguy
Also worth reading: JPEG Conversion Guide Understanding Color Bit Depth Impact on Image Quality: JPEG Conversion Guide Understanding Color · The True Cost of JPEG Compression in Professional Headshot Photography A Data-Driven Analysis: True Cost of JPEG Compression · How AI transforms travel photos for online profiles: How AI transforms travel photos