Skip to main content
ClaudeWave
ToolsOfficial Registry0 stars0 forks● TypeScriptUpdated today
ClaudeWave Trust Score
52/100
· OK
Passed
  • ✓Actively maintained (<30d)
  • ✓Documented (README)
Flags
  • !No standard license detected
  • !No description
Last scanned: 9/28/2026
Get started
Method: Clone
Terminal
git clone https://github.com/gratise/glamour
1. Clone the repository.
2. Follow the README for installation and usage instructions.
Use cases

Tools overview

# Glamour

Glamour is a local-first visual compiler and debugging workspace for coding agents. It renders an existing web implementation in pinned Playwright Chromium, compares it to one or more references, attributes visual residuals to DOM/SVG/Canvas/WebGL objects, tests temporary changes, and exports browser-validated vector geometry. Glamour does not generate application source code.

## Requirements

- **Installed plugin:** Node.js 22+ available to the agent host and network access on first use. The plugin downloads and caches its versioned runtime and Chromium automatically; users do not install Python, `uv`, pnpm, or a browser.
- **Source development:** Node.js 22+, pnpm 9.15.9, Python 3.12+, and `uv`.

## Develop and verify from source

```sh
pnpm install
pnpm exec playwright install chromium
uv sync --project python/glamour_cv --group dev
pnpm format:check
pnpm lint
pnpm typecheck
pnpm test
pnpm build
```

`pnpm format`, `pnpm lint`, and `pnpm test` include Ruff formatting/lint and pytest for the Python worker.

Projects and immutable run artifacts are stored in `.glamour/` under the current directory. Set `GLAMOUR_HOME` to choose another store. Reference coordinates are CSS viewport pixels; device scale factor remains separate. A viewport PNG must have bitmap dimensions equal to viewport × DPR. Full-page screenshots are retained as structural data; the pinned browser compare currently renders viewport captures.

## Reference input

The minimum input is a lossless PNG plus exact viewport and DPR. For multi-state and responsive work, use a bundle directory with `manifest.json` and paths relative to it:

```json
{
  "schemaVersion": "1",
  "name": "shop",
  "screenshots": [
    {
      "referenceId": "desktop",
      "path": "screenshots/desktop.png",
      "viewport": { "width": 1440, "height": 900, "deviceScaleFactor": 1 },
      "familyId": "home"
    },
    {
      "referenceId": "mobile",
      "path": "screenshots/mobile.png",
      "viewport": { "width": 390, "height": 844, "deviceScaleFactor": 1 },
      "familyId": "home"
    }
  ],
  "assets": [],
  "fonts": [],
  "textBlocks": [],
  "scene": [],
  "layout": [],
  "typography": [],
  "colors": [],
  "gradients": [],
  "effects": [],
  "geometry": [],
  "interactions": [],
  "responsiveMappings": [],
  "chartData": [],
  "crops": [],
  "uncertainties": []
}
```

Bundle fields retain provenance (`exact`, `provided`, `measured`, `derived`, `estimated`, `unknown`) and confidence. Scene nodes can store raw measurements separately from semantic interpretation so an estimated role cannot overwrite exact geometry. Explicit facts are surfaced by `analyze`; measured pixel palette, full-page bitmap/content dimensions, and captured browser geometry are distinguished from supplied facts. Multiple references are rendered independently. Responsive changes are observations; breakpoint behavior remains a hypothesis unless supplied explicitly. Crops, assets, font metadata, text blocks, layout relations, scene graph, states, interactions, geometry, and chart data are preserved in the versioned Reference IR.

Each screenshot may set its own `targetUrl`, `actions`, and `videoTimeSeconds` so state references are reproducible against the live implementation. When `videoTimeSeconds` is supplied, compare/override/optimization pause each video, seek to that time when it is in a browser-reported seekable range, and capture the frozen frame. If the media does not expose that time as seekable, Glamour keeps the current frame and reports the limitation instead of silently claiming the requested time was used. Without `videoTimeSeconds`, the current frame is paused with a nondeterminism warning. Actions run in order before readiness checks and capture. Supported actions are `click`, `hover`, `focus`, `fill`, `press`, `selectOption`, `check`, and `uncheck`; the same setup is replayed for overrides and optimization. For example:

```json
{
  "referenceId": "menu-open",
  "path": "states/menu-open.png",
  "viewport": { "width": 1440, "height": 900, "deviceScaleFactor": 1 },
  "state": "menu-open",
  "targetUrl": "http://localhost:3000/",
  "actions": [{ "type": "click", "selector": "[aria-label='Open menu']" }]
}
```

For an animated/video state, add `"videoTimeSeconds": 2.4` to that screenshot record.

The core exports Zod schemas for the versioned bundle, screenshot/action, asset/font, typography, scene/layout, color/effect, crop, geometry, interaction, responsive mapping, and uncertainty records. Extended records preserve domain-specific fields while validating the shared typed fields.

## CLI

```sh
glamour init --reference ./reference.png --url http://localhost:3000 --viewport 1440x900 --dpr 1
glamour init --bundle ./reference --url http://localhost:3000 --repository-root . --framework vite --token color.brand=#1a73e8
glamour analyze <project-id>
glamour compare <project-id> [--reference desktop]
glamour inspect <project-id> <region-id> [--reference desktop]
glamour override <project-id> --selector '#hero' --style 'left=20px' --region region-1
glamour optimize <project-id> --selector '#hero' --property translateX --min -8 --max 0 --step 1 --region region-1
glamour extract <project-id> <region-id> --format svg --mode open
glamour finalize <project-id>
```

The CLI and MCP server call the same core APIs. `compare` without a reference runs every viewport/state reference. Overrides are transient and never edit source. Optimizer search has a bounded evaluation and timeout budget.

## Coding-agent integration

Glamour is an agent tool, not a website builder UI. The coding agent edits the user's existing website; Glamour supplies MCP tools to measure browser output and verify corrections. The Codex plugin installs both the workflow skill and the MCP connection. It downloads the matching, version-pinned runtime on first activation, so users do not clone or build the Glamour repository.

### Start using Glamour in Codex

1. Add the marketplace and install the plugin once:

   ```sh
   codex plugin marketplace add gratise/glamour
   codex plugin add glamour@gratise-glamour
   ```

   Or use `/plugins` to install Glamour after adding the marketplace. Codex retrieves plugin files itself; you do not manually clone or build the Glamour repository.

2. Open the website project you want the agent to change. Do not open a Glamour checkout.
3. Attach a reference screenshot to the conversation. A prepared reference bundle is optional.
4. Ask: `Implement this page in the current project from the attached reference. Use Glamour to compare it in the browser, fix the largest mismatches, and report anything still uncertain.`

The plugin's first activation downloads its pinned Node and Python runtime. The first visual comparison downloads pinned Chromium automatically; all browser and runtime files are cached in the plugin's persistent data directory. The agent starts or reuses the target site's development server and invokes Glamour tools as part of its work.

The skill instructs the agent to inspect the site repository, create real semantic and responsive source code, compare all provided references, inspect the largest mismatches, try transient overrides where useful, apply verified changes, and report remaining uncertainty. No human-facing Glamour UI is part of this workflow.

### Other MCP-compatible agents

### Any MCP-compatible IDE or agent

After the public npm package is available, add this server to the agent's MCP settings. The config shape below is used by stdio MCP clients such as Claude Desktop and Cursor; other clients may call the section `servers` instead of `mcpServers`:

```json
{
  "mcpServers": {
    "glamour": {
      "command": "npx",
      "args": ["-y", "glamour-mcp@latest"]
    }
  }
}
```

Alternatively, install the launcher globally with `npm install --global glamour-mcp`, then set the MCP command to `glamour-mcp` with no arguments.

The package contains only a small launcher. It downloads and caches the matching runtime on first start; no Glamour checkout, Python, `uv`, pnpm, or browser installation is required. Node.js 22+ and network access are needed for the first launch. The release workflow publishes the package to npm and adds its metadata to the official MCP Registry, where supported clients can install it from their server browser.

After connecting the server, open the website project in the agent, attach the reference screenshot, and ask: `Implement this page in the current project from the attached reference. Use Glamour to compare it in the browser, fix the largest mismatches, and report anything still uncertain.`

## MCP server

For local development, build with `pnpm build` and register `apps/mcp-server/dist/index.js` as an stdio MCP server. Example:

```json
{
  "mcpServers": {
    "glamour": {
      "command": "node",
      "args": ["/absolute/path/to/glamour/apps/mcp-server/dist/index.js"],
      "env": { "GLAMOUR_HOME": "/path/to/project" }
    }
  }
}
```

Tools: `visual.create_project`, `visual.analyze_reference`, `visual.compare`, `visual.inspect`, `visual.extract_geometry`, `visual.test_overrides`, `visual.optimize`, `visual.finalize`. Resources expose project manifest, Reference IR, latest Target IR, run diff/region, artifacts, and final report under `visual://project/...`. Responses include `schemaVersion: "1"`; larger images and vector output are referenced as resources/artifacts.

## Compare loop

1. Create a project from a screenshot or prepared bundle.
2. Compare one or all references in deterministic Chromium (viewport/DPR, locale, timezone, reduced motion, animation suppression, font readiness, optional selector/predicate readiness, and masked selectors are recorded).
3. Inspect ranked local regions, measured deltas, candidate DOM nodes, SVG metadata, or Canvas/WebGL draw calls.
4. Test a temporary CSS/SVG override, then run bounded optimization for supported CSS parameters.
5. Apply a verified source change in the application and repea

What people ask about glamour

What is gratise/glamour?

+

gratise/glamour is tools for the Claude AI ecosystem with 0 GitHub stars.

How do I install glamour?

+

You can install glamour by cloning the repository (https://github.com/gratise/glamour) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is gratise/glamour safe to use?

+

Our security agent has analyzed gratise/glamour and assigned a Trust Score of 52/100 (tier: OK). See the full breakdown of passed checks and flags on this page.

Who maintains gratise/glamour?

+

gratise/glamour is maintained by gratise. The last recorded GitHub activity is dated 2026-09-27, with 0 open issues.

Are there alternatives to glamour?

+

Yes. On ClaudeWave you can browse similar tools at /categories/tools, sorted by popularity or recent activity.

Deploy glamour to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: gratise/glamour
[![Featured on ClaudeWave](https://claudewave.com/api/badge/gratise-glamour)](https://claudewave.com/repo/gratise-glamour)
<a href="https://claudewave.com/repo/gratise-glamour"><img src="https://claudewave.com/api/badge/gratise-glamour" alt="Featured on ClaudeWave: gratise/glamour" width="320" height="64" /></a>

More Tools

glamour alternatives