---
title: "Craft Anything: Website Rebuild Verification"
canonical: https://wavect.io/blog/craft-anything-website-rebuild-verification/
language: en
description: "Craft Anything website rebuild verification with an executed screenshot test, raw results, Ready-state limits and checks a visual match cannot replace."
image: "https://wavect.io/img/blog/headers/header_craft-anything-website-rebuild-verification.png"
author: ["Kevin Riedl"]
published: "2026-11-03"
updated: "2026-11-03"
reviewed: "2026-11-03"
---

# Craft Anything: How to Check a Website Rebuild

[**Back**](/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/team/kevin-riedl/)

[Kevin Riedl](/team/kevin-riedl/) https://linkedin.com/in/wsdt

9 min read · 3 Nov 2026 Last reviewed November 3, 2026

[**Next**](/blog/claude-code-design-system-files/)

TL;DR

Craft Anything gives coding agents tools to inspect software and compare a recreation. In our released-CLI test, a broken button coexisted with 100% rounded screenshot similarity at three widths. A separate click check found the failure. The full rebuild workflow was not tested. Inspect each comparison's scope, final-round claims and unknowns, then verify required interactions before accepting the result. Ready and a successful process exit do not establish every acceptance condition.

Our broken test page matched the working reference screenshot exactly. Craft Anything's image metrics rounded to 100%, while the button did nothing.

**Craft Anything website rebuild verification requires matching image evidence with the behavior you need.** Review each viewport's results and any failed claims or unknowns, then execute the required interaction. An untested outcome remains unproven even when the screenshots match. Record the implementation revision with those results.

**Research status: 3 November 2026.** We ran the official Linux x86_64 CLI from [Craft Anything v0.3.0](https://github.com/storytold/craft-anything/releases/tag/v0.3.0), verified the archive checksum and inspected its release source. Playwright captured our screenshots and checked the button separately. We did not run the AI builder or the complete rebuild workflow.

## What does Craft Anything do?

Craft Anything is an open-source Rust toolkit that gives coding agents tools to inspect software and compare a new implementation. Its [release README](https://github.com/storytold/craft-anything/blob/e6280b5dc518b9f3266c82d794a4e2f0367d9a53/README.md) describes a Study, Build and Check workflow for websites, apps and games. The project labels itself early alpha.

ArtCraft's [official application catalog](https://getartcraft.com/apps) lists Craft Anything alongside its creative applications, including PhotoCraft and FilmCraft.

| Interface | Role in the workflow | What to verify |
| --- | --- | --- |
| Desktop application | Review a target and follow the rebuild. | The captured target and the final check reports. |
| CLI | Run named tools or a rebuild from a terminal. | Version, tool output and each check's actual result. |
| MCP server | Expose inspection and reconstruction tools to an agent. | The agent, inspection mode and permission scope. |

The tool count needs a date. The [31 October launch README](https://github.com/storytold/craft-anything/blob/f64ae3bf3c8863a982af1304e06de20653803968/README.md) advertised 284 tools. The v0.3.0 README says 314. Our released Linux binary returned **315 unique registered tool IDs** through `commands`. Registration does not mean every tool is usable with your mode, target and installed dependencies.

## Does Craft Anything bypass a Claude refusal?

Craft Anything does not document a way to remove Claude's refusals. Its [Claude Code integration guide](https://github.com/storytold/craft-anything/blob/2e0d0813e0b46b1f5ef73b51d501c9f1309dff36/docs/claude-code.md) says it launches your unmodified local `claude` program using your own sign-in. A different tool interface does not establish that a provider will accept a particular recreation request.

The claim that an Anthropic block caused this project is not established by the primary sources we found. [Issue 21](https://github.com/storytold/craft-anything/issues/21) records a Claude detection problem and a refusal report. A ticket-relay comment separates failure to find Claude on PATH from a refusal to recreate Titanfall 2. That is a specific report, not evidence of a provider-wide block.

[Reverse Engineer Anything, or REA](https://github.com/morluto/rea), is a separate project. Compare their supported targets and the evidence each returns when choosing between them.

## What did our Craft Anything comparison test show?

Craft Anything's screenshot comparator matched our deliberately broken page to the working reference at all three widths: 1440, 768 and 390 CSS pixels. The separate click check failed for the broken version at every width. Each viewport was 900 pixels high.

Our reference page changes a status message when you click *Reserve a demo seat*. The broken version omits that handler. A control keeps the handler but changes the colors. The button changes local page state; there is no reservation backend.

| Width, CSS px | Candidate versus reference | Layout metric | Detail metric | Separate click check |
| --- | --- | --- | --- | --- |
| 1440 | Broken handler, same appearance | 100% | 100.00% | Failed |
| 768 | Broken handler, same appearance | 100% | 100.00% | Failed |
| 390 | Broken handler, same appearance | 100% | 100.00% | Failed |
| 1440 | Changed colors, working handler | 0% | 96.87% | Passed |
| 768 | Changed colors, working handler | 0% | 97.03% | Passed |
| 390 | Changed colors, working handler | 0% | 96.43% | Passed |

**Measured scope:** six comparator calls, all exit 0, plus nine independent interaction probes across the three modes and widths. The reference and broken-mode PNG hashes matched at each width; the comparator reported zero differing pixels. Detail values above are rounded to two decimals. The raw JSON retains the floating-point values.

`web-pixels-compare` never clicked the button, so it had no evidence about the handler. The complete Craft Anything workflow includes additional checks of observed states; this experiment does not show that it would accept the broken page.

[Download the reproducible Craft Anything comparison fixture](/downloads/craft-anything-website-rebuild-verification-fixture.zip) for our HTML and screenshot-generation runner, recorded results, tool inventory and environment details. Install the CLI and browser separately. The fixture uses our own content.

## How can you reproduce the screenshot check?

To reproduce this Craft Anything check, run the released CLI against two PNG files using `web-pixels-compare`. Keep the image paths absolute and record the binary version. The included runner regenerates screenshots from our local fixture and records the separate click assertions.

```
craft-anything-cli --version
craft-anything-cli commands
craft-anything-cli --clean-room web-pixels-compare @compare.json
```

Use this shape for `compare.json`, replacing both paths with your own files:

```
{
  "before": { "path": "/absolute/reference.png" },
  "after": { "path": "/absolute/candidate.png" },
  "common_area": true,
  "tolerance": 24
}
```

The [released screenshot-tool implementation](https://github.com/storytold/craft-anything/blob/e6280b5dc518b9f3266c82d794a4e2f0367d9a53/crates/engine/src/tools/browser_tools.rs) computes these results from the PNGs. Our run used no model call or noise mask. The download records binary hashes and runtime versions; browser or font changes can alter regenerated screenshots.

## What do Craft Anything's similarity scores measure?

Craft Anything's layout metric measures matching mean colors in 16-pixel tiles; its detail metric measures brightness structure using SSIM. Our recolored control's zero layout score measures color disagreement, not movement of the page's elements. Review both metrics alongside the images and their dimensions.

| Field or setting | What it describes | Review consequence |
| --- | --- | --- |
| `layout_similarity` | Share of tiles with sufficiently similar mean color. | A color change can lower it without moving the layout. |
| `perceptual_similarity` | SSIM over image brightness. | Read it alongside the color-sensitive metric and the actual images. |
| `common_area` | Compares the shared top-left area when dimensions differ. | Inspect both original dimensions and any content outside the shared area. |
| `tolerance: 24` | Threshold for counting per-channel pixel changes. | It is not a 24% allowance for incorrect behavior. |
| `coverage: complete, 1/1` | The one requested screenshot comparison was examined. | Coverage extends only to the operation on these input images. |

The [website rebuild checker](https://github.com/storytold/craft-anything/blob/e6280b5dc518b9f3266c82d794a4e2f0367d9a53/crates/ai/src/rebuild/kinds/website.rs) combines the two image metrics as `(layout_similarity + perceptual_similarity) × 50`, then averages across captured widths and pages. It also evaluates other observations and claims. Those checks are not all weights inside the screenshot percentage.

If you apply that formula to our 1440-pixel color control, the image score would be `(0 + 0.9687234879) × 50 = 48.44%`. That is a calculation from the primitive output, not an observed full-rebuild score. The button still worked. Decide separately whether the color change is acceptable and whether the required behavior is present.

## Does Ready mean the rebuild passed every check?

In v0.3.0, Craft Anything can show Ready after reaching its refinement limit even when a check falls short. That follows from the source; our experiment did not execute the rebuild loop. Inspect every final-round check's claims and unknowns before accepting the result.

The [check-result definition](https://github.com/storytold/craft-anything/blob/e6280b5dc518b9f3266c82d794a4e2f0367d9a53/crates/engine/src/workspace.rs) and [rebuild completion loop](https://github.com/storytold/craft-anything/blob/e6280b5dc518b9f3266c82d794a4e2f0367d9a53/crates/ai/src/rebuild/mod.rs) expose the distinction:

| Signal | Meaning in the inspected release | What you still need |
| --- | --- | --- |
| `passed` | The build succeeded, or the site was served and compared. | Similarity, claims and unknowns for that check. |
| `good(threshold)` | Passed, no unknowns, all claims passed and sufficient similarity when present. | Confirmation that the measured claims cover your required outcomes. |
| `Ready` | The run completed its finish path, which can follow the refinement cap and the last check's `passed` field. | Every check from the final round, including failed claims and unresolved unknowns. |
| Successful process exit | The command finished successfully at the process level. | An explicit acceptance decision about the recreated software. |

Use successful CLI completion to collect artifacts, then evaluate the acceptance conditions. If a form must display an error or a menu must open, retain evidence of that state transition. Fail the acceptance step when the required state is absent.

## How do you verify a Craft Anything website rebuild?

Inspect Craft Anything's captured reference and every check in the final round before accepting a website rebuild. Then run the required interactions against the exact implementation you plan to keep. Record the expected outcomes before testing, so the acceptance decision does not depend on how convincing the screenshots look.

| Artifact | Question to answer | Evidence to retain |
| --- | --- | --- |
| `craft.json` and run notes | Which target, agent, mode and version produced this result? | Configuration, reference scope and tool version. |
| `capture/` | Did the reference include the routes and states you care about? | Viewport sizes, images, visible text and observed interactions. |
| `app/` | Which implementation did you evaluate? | The exact revision and the build or preview command. |
| `checks/` | What passed, failed or remained unknown in the final round? | All relevant results, scores, claims and unknowns. |
| Your interaction record | Did the required action produce the expected result? | Action, expected state, actual state and an independent pass or fail. |

Start with one route and an observable outcome, such as the exact status text after a click. If a form must save a record, check persistence as well as its confirmation message. Leave missing evidence unresolved.

When an observation becomes an approved implementation rule, put it into your repository's context. Our [Claude Code design-system guide](/blog/claude-code-design-system-files/) covers that handoff. If the workflow crosses native applications, use the separate [Cua browser-to-desktop QA protocol](/blog/cua-desktop-qa-browser-native-workflow/); this browser fixture says nothing about those boundaries.

## When would we use Craft Anything?

We would evaluate Craft Anything for an authorized reconstruction task where the team can inspect the generated project against an agreed reference and explicit interaction checks. Keep release approval in a separate step with those criteria, especially while the project remains early alpha.

Begin with a site you own. If the recreation must become a maintained production system, use the broader [prototype-to-production decision](/blog/lovable-cursor-prototype-to-production/) to assess the work beyond visual acceptance.

## Craft Anything verification FAQ

### Is Craft Anything a fork or rename of REA?

The inspected sources identify Craft Anything and morluto/rea as separate projects. We found no primary evidence establishing a REA fork or rename. Compare them against a specific inspection task, using their documented inputs and outputs. Overlapping use cases do not establish shared code or equivalent coverage.

### Does every registered tool work in Clean room mode?

No. The registered inventory includes tools with different target, dependency and inspection requirements. Clean room is the default observation mode; Deep mode permits additional inspection of internals. Our 315-tool count describes the released Linux v0.3.0 inventory, not 315 tools available in every session. Check the selected mode and each tool's prerequisites.

### Can Craft Anything run entirely offline?

The PNG comparison in this experiment ran locally without a model call. A complete workflow can involve a live website, a cloud-backed coding agent, an API provider or optional external asset generation. Inspect the chosen workflow's data path before describing it as offline. A native desktop interface does not establish where every model operation runs.

### Did this review test an AI-generated website rebuild?

No. We authored a local fixture, used Playwright to capture screenshots, ran the released Craft Anything screenshot comparator and checked the button separately. That isolates what the image metrics establish. It does not measure a coding agent's reconstruction quality, the full check loop, automatic refinement, native apps, games or backend correctness.

### Does complete coverage mean the whole website was tested?

In our raw comparison results, complete coverage was 1 of 1: one requested image comparison. The reference and broken page were visually identical, so that operation completed successfully. Other browser states and backend persistence remain outside that operation. Read coverage together with the named operation and its inputs.

### Is the documented 90% similarity threshold enough to ship?

The documented website threshold guides refinement of measured likeness. It does not mean 90% of the product's features work. Choose acceptance conditions for the actual task, inspect claims and unknowns, and run required interactions. If a critical action fails, a high screenshot percentage does not supply the missing behavior or justify release approval.

Architecture and platforms

## Read next

Framework, platform and system-design choices that affect delivery over the long term.

[Start here**Smart City Architecture Best Practices: MQTT, LoRaWAN, Kubernetes and Terraform**](/blog/smart-city-architecture-best-practices-2026/)

- [Figma Weave and Figma Design: Choose the Right Connection](/blog/figma-weave-design-workflow/)
- [OpenMontage: Turn Your Coding Agent into a Video Workflow](/blog/openmontage-ai-video-production-review/)
- [Mireye Land Search API: MCP, Pricing and Parcel Screening](/blog/mireye-land-search-enrich-api-mcp/)
- [git-ai Review: Concurrent Agent Merges and Verification](/blog/git-ai-concurrent-agents-merge-verification/)
- [PHP2Shell: Upgrade Legacy PHP or Migrate to Node.js?](/blog/php2shell-legacy-php-upgrade-migration/)

[Previous article**Figma Weave and Figma Design: Choose the Right Connection**](/blog/figma-weave-design-workflow/) [Next article**OpenMontage: Turn Your Coding Agent into a Video Workflow**](/blog/openmontage-ai-video-production-review/)

[**Back**](/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/team/kevin-riedl/)

[Kevin Riedl](/team/kevin-riedl/) https://linkedin.com/in/wsdt

9 min read · 3 Nov 2026 Last reviewed November 3, 2026

[**Next**](/blog/claude-code-design-system-files/)
