image-tiler-mcp-server 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -59
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -1
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +10 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/services/elicitation.d.ts.map +1 -1
- package/dist/services/elicitation.js +2 -3
- package/dist/services/elicitation.js.map +1 -1
- package/dist/services/tile-analyzer.d.ts +13 -2
- package/dist/services/tile-analyzer.d.ts.map +1 -1
- package/dist/services/tile-analyzer.js +22 -7
- package/dist/services/tile-analyzer.js.map +1 -1
- package/dist/services/tiling-pipeline.d.ts +0 -17
- package/dist/services/tiling-pipeline.d.ts.map +1 -1
- package/dist/services/tiling-pipeline.js +22 -49
- package/dist/services/tiling-pipeline.js.map +1 -1
- package/dist/services/url-capture.d.ts.map +1 -1
- package/dist/services/url-capture.js +10 -2
- package/dist/services/url-capture.js.map +1 -1
- package/dist/tools/tiler.d.ts.map +1 -1
- package/dist/tools/tiler.js +89 -43
- package/dist/tools/tiler.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -1,39 +1,17 @@
|
|
|
1
1
|
# image-tiler-mcp-server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/image-tiler-mcp-server)
|
|
4
|
+
[](https://github.com/keiver/image-tiler-mcp-server/blob/main/LICENSE)
|
|
5
|
+
[](https://nodejs.org/)
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
<img src="assets/preview.gif" alt="Preview of image tiling grid with advised vision models size and token estimates" width="100%" />
|
|
7
|
-
</p>
|
|
8
|
-
|
|
9
|
-
## Usage
|
|
10
|
-
|
|
11
|
-
### Tile an image
|
|
12
|
-
|
|
13
|
-
> lets tile ~/Desktop/source.jpg
|
|
14
|
-
|
|
15
|
-
The server shows you a comparison of supported vision models with tile counts and token estimates.
|
|
16
|
-
Pick the model that matches your use case, and the server tiles the image and returns them in batches for analysis.
|
|
17
|
-
|
|
18
|
-
### Capture a web page
|
|
19
|
-
|
|
20
|
-
> capture screenshot of https://example.com and analyze the content
|
|
7
|
+
MCP server that tiles large images for LLM vision analysis.
|
|
21
8
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
### Customize tiling
|
|
27
|
-
|
|
28
|
-
| What | Example prompt |
|
|
29
|
-
|------|---------------|
|
|
30
|
-
| Target a specific model | "Tile hero.png for OpenAI" |
|
|
31
|
-
| Keep full resolution | "Tile banner.png at full resolution, no downscaling" |
|
|
32
|
-
| PNG output | "Tile diagram.png as lossless PNG" |
|
|
33
|
-
| Tile from URL | "Download and tile https://example.com/chart.png" |
|
|
34
|
-
| Tile from base64 | "Tile this base64 image: iVBORw0KGgo..." |
|
|
9
|
+
<figure align="center">
|
|
10
|
+
<img src="assets/preview.gif" alt="Preview of image tiling grid with advised vision models size and token estimates" width="100%" />
|
|
11
|
+
<figcaption><i>The server generates an interactive HTML preview for every image, showing per-model tile grids and token estimates</i></figcaption>
|
|
12
|
+
</figure>
|
|
35
13
|
|
|
36
|
-
##
|
|
14
|
+
## Quick Start
|
|
37
15
|
|
|
38
16
|
### Claude Code
|
|
39
17
|
|
|
@@ -41,11 +19,12 @@ To get only the screenshot without tiling, just ask for a screenshot and stop af
|
|
|
41
19
|
claude mcp add image-tiler -- npx -y image-tiler-mcp-server
|
|
42
20
|
```
|
|
43
21
|
|
|
44
|
-
> `image-tiler` is a local alias
|
|
22
|
+
> `image-tiler` is a local alias. You can name it anything you like. `image-tiler-mcp-server` is the npm package that gets downloaded and run.
|
|
45
23
|
|
|
46
24
|
See [Claude Code MCP docs](https://docs.anthropic.com/en/docs/claude-code/mcp) for more info.
|
|
47
25
|
|
|
48
|
-
|
|
26
|
+
<details>
|
|
27
|
+
<summary>Codex CLI</summary>
|
|
49
28
|
|
|
50
29
|
```bash
|
|
51
30
|
codex mcp add image-tiler -- npx -y image-tiler-mcp-server
|
|
@@ -59,7 +38,10 @@ command = "npx"
|
|
|
59
38
|
args = ["-y", "image-tiler-mcp-server"]
|
|
60
39
|
```
|
|
61
40
|
|
|
62
|
-
|
|
41
|
+
</details>
|
|
42
|
+
|
|
43
|
+
<details>
|
|
44
|
+
<summary>VS Code (Cline / Continue)</summary>
|
|
63
45
|
|
|
64
46
|
Add to your VS Code MCP settings:
|
|
65
47
|
|
|
@@ -72,7 +54,10 @@ Add to your VS Code MCP settings:
|
|
|
72
54
|
}
|
|
73
55
|
```
|
|
74
56
|
|
|
75
|
-
|
|
57
|
+
</details>
|
|
58
|
+
|
|
59
|
+
<details>
|
|
60
|
+
<summary>Cursor</summary>
|
|
76
61
|
|
|
77
62
|
Add to `~/.cursor/mcp.json`:
|
|
78
63
|
|
|
@@ -87,7 +72,10 @@ Add to `~/.cursor/mcp.json`:
|
|
|
87
72
|
}
|
|
88
73
|
```
|
|
89
74
|
|
|
90
|
-
|
|
75
|
+
</details>
|
|
76
|
+
|
|
77
|
+
<details>
|
|
78
|
+
<summary>Claude Desktop</summary>
|
|
91
79
|
|
|
92
80
|
Add to your Claude Desktop config file:
|
|
93
81
|
|
|
@@ -108,7 +96,10 @@ Add to your Claude Desktop config file:
|
|
|
108
96
|
|
|
109
97
|
Restart Claude Desktop after editing.
|
|
110
98
|
|
|
111
|
-
|
|
99
|
+
</details>
|
|
100
|
+
|
|
101
|
+
<details>
|
|
102
|
+
<summary>Global Install (faster startup)</summary>
|
|
112
103
|
|
|
113
104
|
```bash
|
|
114
105
|
npm install -g image-tiler-mcp-server
|
|
@@ -122,7 +113,10 @@ Then use the simpler config in any client:
|
|
|
122
113
|
}
|
|
123
114
|
```
|
|
124
115
|
|
|
125
|
-
|
|
116
|
+
</details>
|
|
117
|
+
|
|
118
|
+
<details>
|
|
119
|
+
<summary>From Source</summary>
|
|
126
120
|
|
|
127
121
|
```bash
|
|
128
122
|
git clone https://github.com/keiver/image-tiler-mcp-server.git
|
|
@@ -140,23 +134,36 @@ Then point your MCP config to the built file:
|
|
|
140
134
|
}
|
|
141
135
|
```
|
|
142
136
|
|
|
143
|
-
|
|
137
|
+
</details>
|
|
144
138
|
|
|
145
|
-
|
|
139
|
+
## Usage
|
|
146
140
|
|
|
147
|
-
|
|
141
|
+
### Tile an image
|
|
148
142
|
|
|
149
|
-
|
|
150
|
-
2. Calculates an optimal grid that keeps every tile within the model's sweet spot
|
|
151
|
-
3. Extracts tiles as individual images (WebP default, PNG optional) and saves them to disk
|
|
152
|
-
4. Returns metadata (grid layout, file paths, estimated token cost)
|
|
153
|
-
5. Serves tiles back as base64 in paginated batches for the LLM to analyze
|
|
143
|
+
> lets tile ~/Desktop/source.jpg
|
|
154
144
|
|
|
155
|
-
|
|
145
|
+
The server shows you a comparison of supported vision models with tile counts and token estimates.
|
|
146
|
+
Pick the model that matches your use case, and the server tiles the image and returns them in batches for analysis.
|
|
156
147
|
|
|
157
|
-
|
|
148
|
+
### Capture a web page
|
|
158
149
|
|
|
159
|
-
|
|
150
|
+
> capture screenshot of https://example.com and analyze the content
|
|
151
|
+
|
|
152
|
+
The server launches Chrome, captures a full-page screenshot (scroll-stitching pages over 16,384px), then presents the same model comparison. Choose a model and the server tiles the capture for analysis.
|
|
153
|
+
|
|
154
|
+
To get only the screenshot without tiling, just ask for a screenshot and stop after the comparison step.
|
|
155
|
+
|
|
156
|
+
### Customize tiling
|
|
157
|
+
|
|
158
|
+
| What | Example prompt |
|
|
159
|
+
|------|---------------|
|
|
160
|
+
| Target a specific model | "Tile hero.png for OpenAI" |
|
|
161
|
+
| Keep full resolution | "Tile banner.png at full resolution, no downscaling" |
|
|
162
|
+
| PNG output | "Tile diagram.png as lossless PNG" |
|
|
163
|
+
| Tile from URL | "Download and tile https://example.com/chart.png" |
|
|
164
|
+
| Tile from base64 | "Tile this base64 image: iVBORw0KGgo..." |
|
|
165
|
+
|
|
166
|
+
## Supported Models
|
|
160
167
|
|
|
161
168
|
| Model | Default tile | Tokens/tile | Max tile | ID |
|
|
162
169
|
|-------|-------------|-------------|----------|-----|
|
|
@@ -165,11 +172,74 @@ Each tile stays within the model's sweet spot - the LLM processes it at full res
|
|
|
165
172
|
| Gemini | 768px | 258 | 768px | `gemini` |
|
|
166
173
|
| Gemini 3 | 1536px | 1120 | 3072px | `gemini3` |
|
|
167
174
|
|
|
168
|
-
> **OpenAI note:** The `openai` config targets the GPT-4o / o-series vision pipeline (512px tile patches). GPT-4.1 uses a fundamentally different pipeline (32x32 pixel patches) and is not currently supported
|
|
175
|
+
> **OpenAI note:** The `openai` config targets the GPT-4o / o-series vision pipeline (512px tile patches). GPT-4.1 uses a fundamentally different pipeline (32x32 pixel patches) and is not currently supported. It would require a separate model config with a different calculation approach.
|
|
176
|
+
|
|
177
|
+
> **Gemini 3 note:** Gemini 3 uses a fixed token budget per image (1,120 tokens at default resolution, regardless of dimensions). Tiling increases total token cost but preserves fine detail. For cases where detail isn't critical, consider sending a single image instead.
|
|
178
|
+
|
|
179
|
+
<details>
|
|
180
|
+
<summary>Why tile? What LLMs do to large images</summary>
|
|
181
|
+
|
|
182
|
+
### The Problem
|
|
183
|
+
|
|
184
|
+
You screenshot a full page, paste it into Claude, and Claude **rejects it**. Your 20,000px full-page screenshot? Claude won't even look at it. Anything over 8,000px on either dimension gets refused outright.
|
|
185
|
+
|
|
186
|
+
GPT-4o is more forgiving but still destructive: it first scales your image to fit within 2,048px, then scales the shortest side down to 768px, *then* tiles internally. An 8,192px-wide NASA panorama becomes ~1,456 x 768 before GPT-4o's own tiling even begins.
|
|
187
|
+
|
|
188
|
+
Gemini 1.5/2.0 handles large images natively at 768px tiles without downscaling. Gemini 3, however, caps each image at a fixed token budget (1,120 tokens at default resolution) regardless of size. Tiling gives each piece its own budget.
|
|
189
|
+
|
|
190
|
+
Each tile stays within the model's sweet spot, so the LLM processes it at full resolution.
|
|
169
191
|
|
|
170
|
-
|
|
192
|
+
### What Happens Without Tiling
|
|
171
193
|
|
|
172
|
-
|
|
194
|
+
Using `assets/portrait.png` (3,600 x 20,220, a full-page National Geographic capture) as an example:
|
|
195
|
+
|
|
196
|
+
| Model | What happens | Impact |
|
|
197
|
+
|-------|-------------|--------|
|
|
198
|
+
| Claude | **Rejected**, exceeds 8,000px dimension limit | Cannot analyze the image at all |
|
|
199
|
+
| GPT-4o | Downscaled to ~365 x 2,048, then internally tiled | ~1% of original pixels survive the downscale |
|
|
200
|
+
| Gemini 3 | Capped at 1,120 tokens per image (default) | Fixed token budget regardless of image size |
|
|
201
|
+
|
|
202
|
+
> Gemini 1.5/2.0 tiles large images natively at 768px without downscaling.
|
|
203
|
+
> For Gemini 3, tiling multiplies the total token budget by sending each tile as a separate image.
|
|
204
|
+
|
|
205
|
+
### With Tiling
|
|
206
|
+
|
|
207
|
+
| Model | Tiles | Result |
|
|
208
|
+
|-------|-------|--------|
|
|
209
|
+
| Claude | 76 tiles at 1,092px | Every tile under 8,000px and 1,568px limits, full analysis |
|
|
210
|
+
| GPT-4o | 135 tiles at 768px | Every tile under 2,048px, no pre-downscale needed |
|
|
211
|
+
| Gemini 3 | 135 tiles at 768px | Each tile gets its own token budget |
|
|
212
|
+
|
|
213
|
+
Using `assets/landscape.png` (8,192 x 4,320, NASA image gallery):
|
|
214
|
+
|
|
215
|
+
| Model | Without tiling | With tiling |
|
|
216
|
+
|-------|----------------|-------------|
|
|
217
|
+
| Claude | **Rejected** (8,192 > 8,000px limit) | 32 tiles at 1,092px, full analysis |
|
|
218
|
+
| GPT-4o | Downscaled to ~1,456 x 768 (~3% of pixels survive) | 66 tiles at 768px, full resolution |
|
|
219
|
+
| Gemini 3 | Capped at 1,120 tokens | 18 tiles at 1,536px, 18x token budget |
|
|
220
|
+
|
|
221
|
+
*Based on published model vision documentation as of Feb 2026:
|
|
222
|
+
[Claude vision limits](https://docs.anthropic.com/en/docs/build-with-claude/vision) ·
|
|
223
|
+
[OpenAI vision guide](https://platform.openai.com/docs/guides/vision) ·
|
|
224
|
+
[Gemini image understanding](https://ai.google.dev/gemini-api/docs/image-understanding) ·
|
|
225
|
+
[Gemini media resolution](https://ai.google.dev/gemini-api/docs/media-resolution)*
|
|
226
|
+
|
|
227
|
+
</details>
|
|
228
|
+
|
|
229
|
+
## How It Works
|
|
230
|
+
|
|
231
|
+
This MCP server:
|
|
232
|
+
|
|
233
|
+
1. Reads the image dimensions and the target model's vision config
|
|
234
|
+
2. Calculates an optimal grid that keeps every tile within the model's sweet spot
|
|
235
|
+
3. Extracts tiles as individual images (WebP default, PNG optional) and saves them to disk
|
|
236
|
+
4. Returns a metadata summary (grid layout, file paths, token cost, per-tile content hints)
|
|
237
|
+
5. Serves tiles on demand — call with `tilesDir` + `start`/`end` to retrieve batches of up to 5 tiles
|
|
238
|
+
|
|
239
|
+
**Auto-downscaling:** Images over 10,000px on their longest side are automatically downscaled before tiling (configurable via `maxDimension`). This keeps tile counts reasonable and improves LLM comprehension by increasing content density per tile. Set `maxDimension=0` to disable, or pass a custom value (e.g., `maxDimension=5000`) for more aggressive downscaling.
|
|
240
|
+
|
|
241
|
+
<details>
|
|
242
|
+
<summary>Tool Reference</summary>
|
|
173
243
|
|
|
174
244
|
### `tiler`
|
|
175
245
|
|
|
@@ -188,11 +258,11 @@ One unified tool that handles all image tiling operations. The mode is auto-dete
|
|
|
188
258
|
The tool uses a two-step process to let you choose the right model before tiling:
|
|
189
259
|
|
|
190
260
|
1. **Compare** - Call with only the image source. Returns a comparison table showing tile counts and token estimates for each supported model, plus an interactive HTML preview.
|
|
191
|
-
2. **Tile** - Call again with the chosen `
|
|
261
|
+
2. **Tile** - Call again with the chosen `preset` + `outputDir` from step 1, plus:
|
|
192
262
|
- **Image sources:** re-include your original source param (`filePath`, `sourceUrl`, etc.)
|
|
193
263
|
- **Captures:** use `screenshotPath` from step 1 (not the original `url`)
|
|
194
264
|
|
|
195
|
-
> **Skip the comparison step:** Provide `
|
|
265
|
+
> **Skip the comparison step:** Provide `preset` and `outputDir` on the first call to tile immediately.
|
|
196
266
|
|
|
197
267
|
> **Interactive model picker:** Clients that support MCP elicitation get a dropdown picker instead of the comparison table.
|
|
198
268
|
|
|
@@ -213,7 +283,7 @@ The tool uses a two-step process to let you choose the right model before tiling
|
|
|
213
283
|
|---|---|---|---|---|
|
|
214
284
|
| `url` | string | no | - | URL of the web page to capture. Requires Chrome/Chromium installed (or `CHROME_PATH` env var). |
|
|
215
285
|
| `screenshotPath` | string | no | - | Path to a previously captured screenshot. Skips URL capture when provided. |
|
|
216
|
-
| `viewportWidth` | number | no |
|
|
286
|
+
| `viewportWidth` | number | no | `1280` | Browser viewport width in pixels (320-3840) |
|
|
217
287
|
| `waitUntil` | string | no | `"load"` | When to consider the page loaded: `"load"`, `"networkidle"`, or `"domcontentloaded"` |
|
|
218
288
|
| `delay` | number | no | `0` | Additional delay in ms after page load (max 30000) |
|
|
219
289
|
|
|
@@ -226,18 +296,22 @@ Supports scroll-stitching for pages taller than 16,384px. Automatically triggers
|
|
|
226
296
|
| `tilesDir` | string | no | - | Path to tiles directory (returned by a previous tiling call as `outputDir`) |
|
|
227
297
|
| `start` | number | no | `0` | Start tile index (0-based, inclusive) |
|
|
228
298
|
| `end` | number | no | start + 4 | End tile index (0-based, inclusive). Max 5 tiles per batch. |
|
|
299
|
+
| `skipBlankTiles` | boolean | no | `true` | Skip blank tiles and return a text annotation instead of an image. Set to `false` to include all tiles. |
|
|
229
300
|
|
|
230
301
|
#### Parameters - Tiling Config (shared across modes)
|
|
231
302
|
|
|
232
303
|
| Parameter | Type | Required | Default | Description |
|
|
233
304
|
|---|---|---|---|---|
|
|
234
|
-
| `
|
|
305
|
+
| `preset` | string | no | Auto (cheapest) | Target vision preset: `"claude"`, `"openai"`, `"gemini"`, `"gemini3"`. Auto-selects the most token-efficient preset when omitted. |
|
|
235
306
|
| `tileSize` | number | no | Model default | Tile size in pixels. Clamped to model's supported range with a warning if out of bounds. |
|
|
236
307
|
| `maxDimension` | number | no | `10000` | Max dimension in px (0 to disable, or 256-65536). Values 1-255 are silently clamped to 256. Pre-downscales the image so its longest side fits within this value before tiling. |
|
|
237
308
|
| `outputDir` | string | no | See below | Directory to save tiles. Defaults: for `filePath` sources, `tiles/{name}_vN/` next to source (auto-incrementing: `_v1`, `_v2`, ..., `_vN`); for `sourceUrl`/`dataUrl`/`imageBase64`, `{base}/tiles/tiled_{timestamp}_{hex}/`; for captures, `{base}/tiles/capture_{timestamp}_{hex}/`. `{base}` is `~/Desktop`, `~/Downloads`, or `~` (first available). |
|
|
238
309
|
| `page` | number | no | `0` | Tile page to return (0 = first 5, 1 = next 5, etc.) |
|
|
239
310
|
| `format` | string | no | `"webp"` | Output format: `"webp"` (smaller, default) or `"png"` (lossless) |
|
|
240
|
-
| `includeMetadata` | boolean | no | `true` | Analyze each tile and return content
|
|
311
|
+
| `includeMetadata` | boolean | no | `true` | Analyze each tile using Shannon entropy and return content classification (blank, low-detail, mixed, high-detail) plus `entropy` and `sharpness` values per tile |
|
|
312
|
+
| `model` | string | no | - | **Deprecated.** Use `preset` instead. Still accepted; emits a deprecation warning in the response. |
|
|
313
|
+
|
|
314
|
+
</details>
|
|
241
315
|
|
|
242
316
|
## Behaviors
|
|
243
317
|
|
|
@@ -263,8 +337,6 @@ PNG, JPEG, WebP, TIFF, GIF
|
|
|
263
337
|
|
|
264
338
|
**Running as root / in Docker** - Set `CHROME_NO_SANDBOX=1` to launch Chrome without sandbox (also enabled automatically when running as root).
|
|
265
339
|
|
|
266
|
-
**`viewportWidth` auto-detection** - Auto-detection of screen width works on macOS only. On other platforms, falls back to 1280px.
|
|
267
|
-
|
|
268
340
|
## Security
|
|
269
341
|
|
|
270
342
|
Local stdio server - runs with the same filesystem permissions as the MCP client that spawns it. No path sandboxing, no SSRF protection on URL downloads.
|
|
@@ -276,6 +348,10 @@ Local stdio server - runs with the same filesystem permissions as the MCP client
|
|
|
276
348
|
- Node.js 20+
|
|
277
349
|
- Compatible MCP client (Claude Code, Codex CLI, VS Code, Cursor, Claude Desktop)
|
|
278
350
|
|
|
351
|
+
## Acknowledgments
|
|
352
|
+
|
|
353
|
+
Built with the help of [Claude Code](https://claude.ai/claude-code) as an AI assistant for code drafting, testing, and documentation.
|
|
354
|
+
|
|
279
355
|
## License
|
|
280
356
|
|
|
281
357
|
MIT
|
package/dist/constants.d.ts
CHANGED
|
@@ -24,6 +24,9 @@ export declare const DOWNLOAD_TIMEOUT_MS = 30000;
|
|
|
24
24
|
export declare const ALLOWED_URL_PROTOCOLS: readonly ["https:"];
|
|
25
25
|
export declare const MAX_BASE64_LENGTH = 67108864;
|
|
26
26
|
export declare const MAX_DATA_URL_LENGTH: number;
|
|
27
|
+
export declare const BLANK_STDDEV_THRESHOLD = 5;
|
|
28
|
+
export declare const LOW_DETAIL_ENTROPY_THRESHOLD = 4;
|
|
29
|
+
export declare const HIGH_DETAIL_ENTROPY_THRESHOLD = 6.5;
|
|
27
30
|
export declare const MIN_REMAINDER_RATIO = 0.15;
|
|
28
31
|
export declare const SHARP_OPERATION_TIMEOUT_MS = 30000;
|
|
29
32
|
export declare const TILE_OUTPUT_FORMATS: readonly ["png", "webp"];
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,oDAAqD,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CA6BhE,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAsB,CAAC;AAGnD,eAAO,MAAM,iBAAiB,QAAuC,CAAC;AACtE,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,eAAO,MAAM,eAAe,QAAqC,CAAC;AAElE,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,iBAAiB,wDAAyD,CAAC;AACxF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAG3C,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,qBAAqB,qBAAsB,CAAC;AACzD,eAAO,MAAM,iBAAiB,WAAa,CAAC;AAC5C,eAAO,MAAM,mBAAmB,QAA0B,CAAC;AAG3D,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAGxC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAGjD,eAAO,MAAM,mBAAmB,0BAA2B,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,eAAO,MAAM,YAAY,KAAK,CAAC;AAG/B,eAAO,MAAM,gBAAgB,QAAoB,CAAC;AAClD,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,kBAAkB,sDAAuD,CAAC;AACvF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,eAAO,MAAM,yBAAyB,8BAA+B,CAAC;AAGtE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAGjD,eAAO,MAAM,gBAAgB,YAAc,CAAC;AAC5C,eAAO,MAAM,uBAAuB,UAAY,CAAC;AACjD,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAG/C,eAAO,MAAM,kBAAkB,WAAa,CAAC;AAC7C,eAAO,MAAM,iBAAiB,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,oDAAqD,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CA6BhE,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAsB,CAAC;AAGnD,eAAO,MAAM,iBAAiB,QAAuC,CAAC;AACtE,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,eAAO,MAAM,eAAe,QAAqC,CAAC;AAElE,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,iBAAiB,wDAAyD,CAAC;AACxF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAG3C,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,qBAAqB,qBAAsB,CAAC;AACzD,eAAO,MAAM,iBAAiB,WAAa,CAAC;AAC5C,eAAO,MAAM,mBAAmB,QAA0B,CAAC;AAG3D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,4BAA4B,IAAM,CAAC;AAChD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAGjD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAGxC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAGjD,eAAO,MAAM,mBAAmB,0BAA2B,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,eAAO,MAAM,YAAY,KAAK,CAAC;AAG/B,eAAO,MAAM,gBAAgB,QAAoB,CAAC;AAClD,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,kBAAkB,sDAAuD,CAAC;AACvF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,eAAO,MAAM,yBAAyB,8BAA+B,CAAC;AAGtE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAGjD,eAAO,MAAM,gBAAgB,YAAc,CAAC;AAC5C,eAAO,MAAM,uBAAuB,UAAY,CAAC;AACjD,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAG/C,eAAO,MAAM,kBAAkB,WAAa,CAAC;AAC7C,eAAO,MAAM,iBAAiB,MAAM,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -47,6 +47,10 @@ export const DOWNLOAD_TIMEOUT_MS = 30_000; // 30 seconds
|
|
|
47
47
|
export const ALLOWED_URL_PROTOCOLS = ["https:"];
|
|
48
48
|
export const MAX_BASE64_LENGTH = 67_108_864; // ~50MB decoded (base64 is ~4/3x)
|
|
49
49
|
export const MAX_DATA_URL_LENGTH = MAX_BASE64_LENGTH + 256; // base64 payload + data URL prefix overhead
|
|
50
|
+
// Tile content classification thresholds
|
|
51
|
+
export const BLANK_STDDEV_THRESHOLD = 5;
|
|
52
|
+
export const LOW_DETAIL_ENTROPY_THRESHOLD = 4.0;
|
|
53
|
+
export const HIGH_DETAIL_ENTROPY_THRESHOLD = 6.5;
|
|
50
54
|
// Remainder absorption: if a remainder strip is < 15% of tileSize, absorb it into the last tile
|
|
51
55
|
export const MIN_REMAINDER_RATIO = 0.15;
|
|
52
56
|
// Sharp operation timeout (guards against hangs on corrupted images)
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export declare const TilerInputSchema: {
|
|
|
12
12
|
tilesDir: z.ZodOptional<z.ZodString>;
|
|
13
13
|
start: z.ZodDefault<z.ZodNumber>;
|
|
14
14
|
end: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
skipBlankTiles: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
preset: z.ZodOptional<z.ZodEnum<["claude", "openai", "gemini3", "gemini"]>>;
|
|
15
17
|
model: z.ZodOptional<z.ZodEnum<["claude", "openai", "gemini3", "gemini"]>>;
|
|
16
18
|
tileSize: z.ZodOptional<z.ZodNumber>;
|
|
17
19
|
maxDimension: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, number | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;CA8I5B,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -70,12 +70,21 @@ export const TilerInputSchema = {
|
|
|
70
70
|
.min(0, "End index must be >= 0")
|
|
71
71
|
.optional()
|
|
72
72
|
.describe(`End tile index (0-based, inclusive). Defaults to start + ${MAX_TILES_PER_BATCH - 1}. Max ${MAX_TILES_PER_BATCH} tiles per batch to stay within MCP response limits.`),
|
|
73
|
+
skipBlankTiles: z
|
|
74
|
+
.boolean()
|
|
75
|
+
.default(true)
|
|
76
|
+
.describe("Skip blank tiles in get-tiles mode, returning text annotations instead of images. Set to false to include all tiles. Default: true."),
|
|
73
77
|
// ── Tiling config fields (shared by tile-image and capture modes) ──
|
|
74
|
-
|
|
78
|
+
preset: z
|
|
75
79
|
.enum(VISION_MODELS)
|
|
76
80
|
.optional()
|
|
77
81
|
.describe(`DO NOT provide on Phase 1 (first call). Only specify on Phase 2 after the user has chosen from the comparison table. ` +
|
|
78
82
|
`Available: ${modelDescriptions}. Auto-selects cheapest when omitted on Phase 2.`),
|
|
83
|
+
model: z
|
|
84
|
+
.enum(VISION_MODELS)
|
|
85
|
+
.optional()
|
|
86
|
+
.describe(`Deprecated: use "preset" instead. Accepted for backward compatibility. ` +
|
|
87
|
+
`Available: ${modelDescriptions}.`),
|
|
79
88
|
tileSize: z
|
|
80
89
|
.number()
|
|
81
90
|
.int()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../src/services/elicitation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAE9B;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../src/services/elicitation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAE9B;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CA4C5B"}
|
|
@@ -25,7 +25,7 @@ export async function tryElicitation(server, options) {
|
|
|
25
25
|
requestedSchema: {
|
|
26
26
|
type: "object",
|
|
27
27
|
properties: {
|
|
28
|
-
|
|
28
|
+
preset: {
|
|
29
29
|
type: "string",
|
|
30
30
|
title: "Select tiling preset",
|
|
31
31
|
description: `Image: ${options.width}x${options.height}`,
|
|
@@ -33,11 +33,10 @@ export async function tryElicitation(server, options) {
|
|
|
33
33
|
default: options.model,
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
|
-
required: ["model"],
|
|
37
36
|
},
|
|
38
37
|
});
|
|
39
38
|
if (result.action === "accept") {
|
|
40
|
-
const selectedModel = result.content?.
|
|
39
|
+
const selectedModel = result.content?.preset;
|
|
41
40
|
if (selectedModel && VISION_MODELS.includes(selectedModel)) {
|
|
42
41
|
return { status: "selected", model: selectedModel };
|
|
43
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../src/services/elicitation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgB/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,OAA8B;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACnD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,KAAK,YAAY,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS;YAChH,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,UAAU,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,SAAS,EAAE;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C,OAAO,EAAE,mBAAmB,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,iCAAiC;QAC5F,eAAe,EAAE;YACf,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,
|
|
1
|
+
{"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../src/services/elicitation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgB/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,OAA8B;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACnD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,KAAK,YAAY,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS;YAChH,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,UAAU,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,SAAS,EAAE;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C,OAAO,EAAE,mBAAmB,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,iCAAiC;QAC5F,eAAe,EAAE;YACf,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAiB;oBACvB,KAAK,EAAE,sBAAsB;oBAC7B,WAAW,EAAE,UAAU,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;oBACxD,KAAK;oBACL,OAAO,EAAE,OAAO,CAAC,KAAK;iBACvB;aACF;SACF;KACF,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAI,MAAM,CAAC,OAAmC,EAAE,MAA4B,CAAC;QAChG,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,aAA4B,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAA4B,EAAE,CAAC;QACrE,CAAC;QACD,mFAAmF;QACnF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import type { TileMetadata } from "../types.js";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
interface TileGeometry {
|
|
3
|
+
tileSize?: number;
|
|
4
|
+
extractedWidth?: number;
|
|
5
|
+
extractedHeight?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function analyzeTile(tilePath: string, index: number, geometry?: TileGeometry): Promise<TileMetadata>;
|
|
8
|
+
export declare function analyzeTiles(tiles: Array<{
|
|
9
|
+
filePath: string;
|
|
10
|
+
index: number;
|
|
11
|
+
extractedWidth?: number;
|
|
12
|
+
extractedHeight?: number;
|
|
13
|
+
}>, tileSize?: number): Promise<TileMetadata[]>;
|
|
14
|
+
export {};
|
|
4
15
|
//# sourceMappingURL=tile-analyzer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-analyzer.d.ts","sourceRoot":"","sources":["../../src/services/tile-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tile-analyzer.d.ts","sourceRoot":"","sources":["../../src/services/tile-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,YAAY,CAAC,CAmDvB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACpG,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import sharp from "sharp";
|
|
2
2
|
import { withTimeout } from "../utils.js";
|
|
3
|
-
import { SHARP_OPERATION_TIMEOUT_MS } from "../constants.js";
|
|
4
|
-
|
|
3
|
+
import { SHARP_OPERATION_TIMEOUT_MS, BLANK_STDDEV_THRESHOLD, LOW_DETAIL_ENTROPY_THRESHOLD, HIGH_DETAIL_ENTROPY_THRESHOLD, } from "../constants.js";
|
|
4
|
+
const THIN_TILE_RATIO = 0.5;
|
|
5
|
+
export async function analyzeTile(tilePath, index, geometry) {
|
|
5
6
|
const stats = await withTimeout(sharp(tilePath).stats(), SHARP_OPERATION_TIMEOUT_MS, "tile-stats");
|
|
6
7
|
const channelCount = stats.channels.length;
|
|
7
8
|
if (channelCount === 0) {
|
|
@@ -9,16 +10,28 @@ export async function analyzeTile(tilePath, index) {
|
|
|
9
10
|
}
|
|
10
11
|
const meanBrightness = stats.channels.reduce((sum, ch) => sum + ch.mean, 0) / channelCount;
|
|
11
12
|
const stdDev = stats.channels.reduce((sum, ch) => sum + ch.stdev, 0) / channelCount;
|
|
13
|
+
const entropyAvailable = typeof stats.entropy === "number";
|
|
14
|
+
const entropy = stats.entropy ?? 0;
|
|
15
|
+
const sharpness = stats.sharpness ?? 0;
|
|
16
|
+
const isThin = geometry?.tileSize != null &&
|
|
17
|
+
((geometry.extractedWidth != null && geometry.extractedWidth < THIN_TILE_RATIO * geometry.tileSize) ||
|
|
18
|
+
(geometry.extractedHeight != null && geometry.extractedHeight < THIN_TILE_RATIO * geometry.tileSize));
|
|
12
19
|
let contentHint;
|
|
13
20
|
let isBlank = false;
|
|
14
|
-
if (stdDev <
|
|
21
|
+
if (stdDev < BLANK_STDDEV_THRESHOLD) {
|
|
15
22
|
contentHint = "blank";
|
|
16
23
|
isBlank = true;
|
|
17
24
|
}
|
|
18
|
-
else if (
|
|
25
|
+
else if (isThin) {
|
|
26
|
+
contentHint = "mixed";
|
|
27
|
+
}
|
|
28
|
+
else if (!entropyAvailable) {
|
|
29
|
+
contentHint = "mixed";
|
|
30
|
+
}
|
|
31
|
+
else if (entropy < LOW_DETAIL_ENTROPY_THRESHOLD) {
|
|
19
32
|
contentHint = "low-detail";
|
|
20
33
|
}
|
|
21
|
-
else if (
|
|
34
|
+
else if (entropy > HIGH_DETAIL_ENTROPY_THRESHOLD) {
|
|
22
35
|
contentHint = "high-detail";
|
|
23
36
|
}
|
|
24
37
|
else {
|
|
@@ -28,11 +41,13 @@ export async function analyzeTile(tilePath, index) {
|
|
|
28
41
|
index,
|
|
29
42
|
meanBrightness: Math.round(meanBrightness * 100) / 100,
|
|
30
43
|
stdDev: Math.round(stdDev * 100) / 100,
|
|
44
|
+
entropy: Math.round(entropy * 100) / 100,
|
|
45
|
+
sharpness: Math.round(sharpness * 100) / 100,
|
|
31
46
|
contentHint,
|
|
32
47
|
isBlank,
|
|
33
48
|
};
|
|
34
49
|
}
|
|
35
|
-
export async function analyzeTiles(
|
|
36
|
-
return Promise.all(
|
|
50
|
+
export async function analyzeTiles(tiles, tileSize) {
|
|
51
|
+
return Promise.all(tiles.map((t) => analyzeTile(t.filePath, t.index, { tileSize, extractedWidth: t.extractedWidth, extractedHeight: t.extractedHeight })));
|
|
37
52
|
}
|
|
38
53
|
//# sourceMappingURL=tile-analyzer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-analyzer.js","sourceRoot":"","sources":["../../src/services/tile-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"tile-analyzer.js","sourceRoot":"","sources":["../../src/services/tile-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,21 +61,4 @@ export declare function buildPhase2Response(result: TileImageResult, opts: Phase
|
|
|
61
61
|
text: string;
|
|
62
62
|
}>;
|
|
63
63
|
}>;
|
|
64
|
-
type ContentBlock = {
|
|
65
|
-
type: "text";
|
|
66
|
-
text: string;
|
|
67
|
-
} | {
|
|
68
|
-
type: "image";
|
|
69
|
-
data: string;
|
|
70
|
-
mimeType: string;
|
|
71
|
-
};
|
|
72
|
-
export declare function appendTilesPage(phase2Response: {
|
|
73
|
-
content: Array<{
|
|
74
|
-
type: "text";
|
|
75
|
-
text: string;
|
|
76
|
-
}>;
|
|
77
|
-
}, outputDir: string, page: number): Promise<{
|
|
78
|
-
content: ContentBlock[];
|
|
79
|
-
}>;
|
|
80
|
-
export {};
|
|
81
64
|
//# sourceMappingURL=tiling-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiling-pipeline.d.ts","sourceRoot":"","sources":["../../src/services/tiling-pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tiling-pipeline.d.ts","sourceRoot":"","sources":["../../src/services/tiling-pipeline.ts"],"names":[],"mappings":"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"}
|