image-tiler-mcp-server 1.2.0 → 1.4.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 +36 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +8 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/services/image-processor.d.ts +3 -2
- package/dist/services/image-processor.d.ts.map +1 -1
- package/dist/services/image-processor.js +100 -43
- package/dist/services/image-processor.js.map +1 -1
- package/dist/tools/tile-image.d.ts.map +1 -1
- package/dist/tools/tile-image.js +15 -8
- package/dist/tools/tile-image.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,6 +20,8 @@ LLM vision systems have a **maximum input resolution**. When you send an image l
|
|
|
20
20
|
|
|
21
21
|
Each tile is processed at **full resolution** — no downscaling — preserving text, UI elements, and fine detail across the entire image.
|
|
22
22
|
|
|
23
|
+
**Auto-downscaling:** Images over 10,000px on their longest side are automatically downscaled before tiling (configurable via `maxDimension`). This prevents extreme tile counts on very long screenshots — e.g., a 3600×22810 page drops from 84 tiles / ~134K tokens to 20 tiles / ~32K tokens with no visible quality loss. Set `maxDimension=0` to disable.
|
|
24
|
+
|
|
23
25
|
See [sample of generated tiles here.](https://github.com/keiver/image-tiler-mcp-server/tree/main/assets/tiles/)
|
|
24
26
|
|
|
25
27
|
### Supported Models
|
|
@@ -46,6 +48,7 @@ Splits a large image into tiles and saves them to disk.
|
|
|
46
48
|
| `filePath` | string | yes | — | Absolute or relative path to the image file |
|
|
47
49
|
| `model` | string | no | `"claude"` | Target vision model: `"claude"`, `"openai"`, `"gemini"`, `"gemini3"` |
|
|
48
50
|
| `tileSize` | number | no | Model default | Tile size in pixels. Clamped to model min/max with a warning if out of bounds. |
|
|
51
|
+
| `maxDimension` | number | no | `10000` | Max dimension in px (0-65536). Pre-downscales the image so its longest side fits within this value before tiling. Defaults to 10000px. Set to 0 to disable auto-downscaling. No-op if already within bounds. |
|
|
49
52
|
| `outputDir` | string | no | `tiles/{name}` subfolder next to source | Directory to save tiles |
|
|
50
53
|
|
|
51
54
|
Returns JSON metadata with grid dimensions, tile count, model used, estimated token cost, and per-tile file paths.
|
|
@@ -179,6 +182,29 @@ Claude will:
|
|
|
179
182
|
2. Tiles sized at 768px for OpenAI's vision pipeline
|
|
180
183
|
```
|
|
181
184
|
|
|
185
|
+
### Auto-Downscaling
|
|
186
|
+
|
|
187
|
+
Images over 10,000px are automatically downscaled before tiling. You can customize the limit:
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
> Tile this 7680x4032 screenshot but downscale to 2048px first to save tokens
|
|
191
|
+
|
|
192
|
+
Claude will:
|
|
193
|
+
1. Call tiler_tile_image(filePath="./image.png", maxDimension=2048)
|
|
194
|
+
2. Image is downscaled to 2048x1076 before tiling
|
|
195
|
+
3. Fewer tiles = lower token cost (e.g., 4 tiles instead of 32)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
To disable auto-downscaling entirely:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
> Tile this image at full resolution, no downscaling
|
|
202
|
+
|
|
203
|
+
Claude will:
|
|
204
|
+
1. Call tiler_tile_image(filePath="./image.png", maxDimension=0)
|
|
205
|
+
2. Image is tiled at its original dimensions
|
|
206
|
+
```
|
|
207
|
+
|
|
182
208
|
### Typical Workflow
|
|
183
209
|
|
|
184
210
|
1. Capture full-page screenshot with your browser extension
|
|
@@ -250,10 +276,19 @@ assets/tiles/landscape/
|
|
|
250
276
|
{ "index": 1, "row": 0, "col": 1, "position": "1092,0", "dimensions": "1092×1092", "filePath": "/path/to/assets/tiles/landscape/tile_000_001.png" },
|
|
251
277
|
"... 30 more tiles"
|
|
252
278
|
],
|
|
253
|
-
"previewPath": "/path/to/assets/tiles/landscape/preview.html"
|
|
279
|
+
"previewPath": "/path/to/assets/tiles/landscape/preview.html",
|
|
280
|
+
"resize": {
|
|
281
|
+
"originalWidth": 7680,
|
|
282
|
+
"originalHeight": 4032,
|
|
283
|
+
"resizedWidth": 2048,
|
|
284
|
+
"resizedHeight": 1076,
|
|
285
|
+
"scaleFactor": 0.267
|
|
286
|
+
}
|
|
254
287
|
}
|
|
255
288
|
```
|
|
256
289
|
|
|
290
|
+
> The `resize` field is only present when `maxDimension` triggered an actual downscale. If the image was already within bounds, it's omitted.
|
|
291
|
+
|
|
257
292
|
### Portrait example
|
|
258
293
|
|
|
259
294
|
`assets/portrait.png` (3600x22810) tiled with Claude defaults produces a 4x21 grid of 84 tiles (~133,560 tokens).
|
package/dist/constants.d.ts
CHANGED
|
@@ -18,4 +18,5 @@ export declare const MAX_TOTAL_TILES = 10000;
|
|
|
18
18
|
export declare const MAX_TILES_PER_BATCH = 5;
|
|
19
19
|
export declare const SUPPORTED_FORMATS: readonly ["png", "jpeg", "jpg", "webp", "tiff", "gif"];
|
|
20
20
|
export declare const PNG_COMPRESSION_LEVEL = 6;
|
|
21
|
+
export declare const DEFAULT_MAX_DIMENSION = 10000;
|
|
21
22
|
//# sourceMappingURL=constants.d.ts.map
|
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"}
|
|
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"}
|
package/dist/constants.js
CHANGED
|
@@ -40,4 +40,5 @@ export const MAX_TOTAL_TILES = 10000;
|
|
|
40
40
|
export const MAX_TILES_PER_BATCH = 5;
|
|
41
41
|
export const SUPPORTED_FORMATS = ["png", "jpeg", "jpg", "webp", "tiff", "gif"];
|
|
42
42
|
export const PNG_COMPRESSION_LEVEL = 6;
|
|
43
|
+
export const DEFAULT_MAX_DIMENSION = 10000;
|
|
43
44
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAWhF,MAAM,CAAC,MAAM,aAAa,GAA2C;IACnE,MAAM,EAAE;QACN,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,QAAQ;KAChB;IACD,MAAM,EAAE;QACN,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,GAAG;QAClB,KAAK,EAAE,QAAQ;KAChB;IACD,MAAM,EAAE;QACN,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,GAAG;QAClB,KAAK,EAAE,QAAQ;KAChB;IACD,OAAO,EAAE;QACP,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,UAAU;KAClB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAgB,QAAQ,CAAC;AAEnD,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAWhF,MAAM,CAAC,MAAM,aAAa,GAA2C;IACnE,MAAM,EAAE;QACN,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,QAAQ;KAChB;IACD,MAAM,EAAE;QACN,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,GAAG;QAClB,KAAK,EAAE,QAAQ;KAChB;IACD,MAAM,EAAE;QACN,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,GAAG;QAClB,KAAK,EAAE,QAAQ;KAChB;IACD,OAAO,EAAE;QACP,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,UAAU;KAClB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAgB,QAAQ,CAAC;AAEnD,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare const TileImageInputSchema: {
|
|
|
3
3
|
filePath: z.ZodString;
|
|
4
4
|
model: z.ZodDefault<z.ZodEnum<["claude", "openai", "gemini", "gemini3"]>>;
|
|
5
5
|
tileSize: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
maxDimension: z.ZodDefault<z.ZodNumber>;
|
|
6
7
|
outputDir: z.ZodOptional<z.ZodString>;
|
|
7
8
|
};
|
|
8
9
|
export declare const GetTilesInputSchema: {
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,oBAAoB;;;;;;CAsChC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;CAqB/B,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { MAX_IMAGE_DIMENSION, MAX_TILES_PER_BATCH, VISION_MODELS, DEFAULT_MODEL, MODEL_CONFIGS, } from "../constants.js";
|
|
2
|
+
import { MAX_IMAGE_DIMENSION, MAX_TILES_PER_BATCH, VISION_MODELS, DEFAULT_MODEL, MODEL_CONFIGS, DEFAULT_MAX_DIMENSION, } from "../constants.js";
|
|
3
3
|
const modelDescriptions = VISION_MODELS.map((m) => `"${m}" (${MODEL_CONFIGS[m].defaultTileSize}px tiles, ~${MODEL_CONFIGS[m].tokensPerTile} tokens/tile)`).join(", ");
|
|
4
4
|
const defaultDescriptions = VISION_MODELS.map((m) => `${MODEL_CONFIGS[m].label}: ${MODEL_CONFIGS[m].defaultTileSize}`).join(", ");
|
|
5
5
|
export const TileImageInputSchema = {
|
|
@@ -18,6 +18,13 @@ export const TileImageInputSchema = {
|
|
|
18
18
|
.max(MAX_IMAGE_DIMENSION, `Tile size must not exceed ${MAX_IMAGE_DIMENSION}px`)
|
|
19
19
|
.optional()
|
|
20
20
|
.describe(`Tile size in pixels. If omitted, uses the model's optimal default (${defaultDescriptions}). Values outside the model's supported range are automatically clamped with a warning.`),
|
|
21
|
+
maxDimension: z
|
|
22
|
+
.number()
|
|
23
|
+
.int()
|
|
24
|
+
.min(0, "maxDimension must be >= 0 (0 disables auto-downscaling)")
|
|
25
|
+
.max(MAX_IMAGE_DIMENSION, `maxDimension must not exceed ${MAX_IMAGE_DIMENSION}px`)
|
|
26
|
+
.default(DEFAULT_MAX_DIMENSION)
|
|
27
|
+
.describe(`Max dimension in px (256-${MAX_IMAGE_DIMENSION}). When set, the image is resized so its longest side fits within this value before tiling. Reduces token consumption for large images. Defaults to ${DEFAULT_MAX_DIMENSION}px. Set to 0 to disable auto-downscaling.`),
|
|
21
28
|
outputDir: z
|
|
22
29
|
.string()
|
|
23
30
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC,eAAe,cAAc,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,eAAe,CAC9G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CACxE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;SACnC,QAAQ,CAAC,qDAAqD,CAAC;IAClE,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,aAAa,CAAC;SACnB,OAAO,CAAC,aAAa,CAAC;SACtB,QAAQ,CACP,wBAAwB,iBAAiB,eAAe,aAAa,GAAG,CACzE;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;SAC9C,GAAG,CACF,mBAAmB,EACnB,6BAA6B,mBAAmB,IAAI,CACrD;SACA,QAAQ,EAAE;SACV,QAAQ,CACP,sEAAsE,mBAAmB,yFAAyF,CACnL;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC;SACjE,GAAG,CAAC,mBAAmB,EAAE,gCAAgC,mBAAmB,IAAI,CAAC;SACjF,OAAO,CAAC,qBAAqB,CAAC;SAC9B,QAAQ,CACP,4BAA4B,mBAAmB,uJAAuJ,qBAAqB,2CAA2C,CACvQ;IACH,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mFAAmF,CACpF;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;SAC9C,QAAQ,CACP,yEAAyE,CAC1E;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;SAChC,QAAQ,EAAE;SACV,QAAQ,CACP,4DAA4D,mBAAmB,GAAG,CAAC,SAAS,mBAAmB,qDAAqD,CACrK;CACJ,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ImageMetadata, TileGridInfo, TileImageResult } from "../types.js";
|
|
1
|
+
import type { ImageMetadata, ResizeInfo, TileGridInfo, TileImageResult } from "../types.js";
|
|
2
2
|
export declare function getImageMetadata(filePath: string): Promise<ImageMetadata>;
|
|
3
3
|
export declare function calculateGrid(width: number, height: number, tileSize: number, tokensPerTile?: number): TileGridInfo;
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function resizeImage(filePath: string, maxDimension: number, outputPath: string): Promise<ResizeInfo | null>;
|
|
5
|
+
export declare function tileImage(filePath: string, tileSize: number, outputDir: string, tokensPerTile?: number, maxDimension?: number): Promise<TileImageResult>;
|
|
5
6
|
export declare function readTileAsBase64(tilePath: string): Promise<string>;
|
|
6
7
|
export declare function listTilesInDirectory(tilesDir: string): Promise<string[]>;
|
|
7
8
|
//# sourceMappingURL=image-processor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../src/services/image-processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../src/services/image-processor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAY,eAAe,EAAE,MAAM,aAAa,CAAC;AAKtG,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,MAAwB,GACtC,YAAY,CAYd;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6B5B;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,MAAwB,EACvC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CA8G1B;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import sharp from "sharp";
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
4
5
|
import { MAX_IMAGE_DIMENSION, MAX_TOTAL_TILES, PNG_COMPRESSION_LEVEL, TOKENS_PER_TILE, } from "../constants.js";
|
|
5
6
|
sharp.cache({ items: 10, memory: 200 });
|
|
6
7
|
sharp.concurrency(2);
|
|
@@ -34,7 +35,31 @@ export function calculateGrid(width, height, tileSize, tokensPerTile = TOKENS_PE
|
|
|
34
35
|
estimatedTokens: totalTiles * tokensPerTile,
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
|
-
export async function
|
|
38
|
+
export async function resizeImage(filePath, maxDimension, outputPath) {
|
|
39
|
+
const metadata = await sharp(filePath).metadata();
|
|
40
|
+
if (!metadata.width || !metadata.height) {
|
|
41
|
+
throw new Error(`Unable to read image dimensions from ${filePath}. File may be corrupted or not a supported image format.`);
|
|
42
|
+
}
|
|
43
|
+
const longestSide = Math.max(metadata.width, metadata.height);
|
|
44
|
+
if (longestSide <= maxDimension) {
|
|
45
|
+
return null; // no resize needed
|
|
46
|
+
}
|
|
47
|
+
const scaleFactor = maxDimension / longestSide;
|
|
48
|
+
const resizedWidth = Math.round(metadata.width * scaleFactor);
|
|
49
|
+
const resizedHeight = Math.round(metadata.height * scaleFactor);
|
|
50
|
+
await sharp(filePath)
|
|
51
|
+
.resize(resizedWidth, resizedHeight, { fit: "inside", withoutEnlargement: true })
|
|
52
|
+
.png({ compressionLevel: PNG_COMPRESSION_LEVEL })
|
|
53
|
+
.toFile(outputPath);
|
|
54
|
+
return {
|
|
55
|
+
originalWidth: metadata.width,
|
|
56
|
+
originalHeight: metadata.height,
|
|
57
|
+
resizedWidth,
|
|
58
|
+
resizedHeight,
|
|
59
|
+
scaleFactor: Math.round(scaleFactor * 1000) / 1000,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export async function tileImage(filePath, tileSize, outputDir, tokensPerTile = TOKENS_PER_TILE, maxDimension) {
|
|
38
63
|
const resolvedPath = path.resolve(filePath);
|
|
39
64
|
try {
|
|
40
65
|
await fs.access(resolvedPath);
|
|
@@ -42,56 +67,88 @@ export async function tileImage(filePath, tileSize, outputDir, tokensPerTile = T
|
|
|
42
67
|
catch {
|
|
43
68
|
throw new Error(`File not found: ${resolvedPath}. Verify the file path is correct and the file exists.`);
|
|
44
69
|
}
|
|
45
|
-
const imageMetadata = await getImageMetadata(resolvedPath);
|
|
46
|
-
const grid = calculateGrid(imageMetadata.width, imageMetadata.height, tileSize, tokensPerTile);
|
|
47
|
-
if (grid.totalTiles > MAX_TOTAL_TILES) {
|
|
48
|
-
throw new Error(`Tiling would produce ${grid.totalTiles} tiles (${grid.cols}×${grid.rows}), exceeding the maximum of ${MAX_TOTAL_TILES}. ` +
|
|
49
|
-
`Use a larger tile size or a smaller image.`);
|
|
50
|
-
}
|
|
51
70
|
const resolvedOutputDir = path.resolve(outputDir);
|
|
52
71
|
await fs.mkdir(resolvedOutputDir, { recursive: true });
|
|
53
|
-
|
|
54
|
-
let
|
|
72
|
+
let sourcePath = resolvedPath;
|
|
73
|
+
let resizeInfo = null;
|
|
74
|
+
let resizedTempPath = null;
|
|
75
|
+
if (maxDimension !== undefined) {
|
|
76
|
+
const tempPath = path.join(resolvedOutputDir, `__resized_${randomUUID()}.png`);
|
|
77
|
+
resizeInfo = await resizeImage(resolvedPath, maxDimension, tempPath);
|
|
78
|
+
if (resizeInfo) {
|
|
79
|
+
sourcePath = tempPath;
|
|
80
|
+
resizedTempPath = tempPath;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
55
83
|
try {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
col,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
const imageMetadata = await getImageMetadata(sourcePath);
|
|
85
|
+
const grid = calculateGrid(imageMetadata.width, imageMetadata.height, tileSize, tokensPerTile);
|
|
86
|
+
if (grid.totalTiles > MAX_TOTAL_TILES) {
|
|
87
|
+
throw new Error(`Tiling would produce ${grid.totalTiles} tiles (${grid.cols}×${grid.rows}), exceeding the maximum of ${MAX_TOTAL_TILES}. ` +
|
|
88
|
+
`Use a larger tile size or a smaller image.`);
|
|
89
|
+
}
|
|
90
|
+
const tiles = [];
|
|
91
|
+
let index = 0;
|
|
92
|
+
try {
|
|
93
|
+
for (let row = 0; row < grid.rows; row++) {
|
|
94
|
+
for (let col = 0; col < grid.cols; col++) {
|
|
95
|
+
const x = col * tileSize;
|
|
96
|
+
const y = row * tileSize;
|
|
97
|
+
const tileWidth = Math.min(tileSize, imageMetadata.width - x);
|
|
98
|
+
const tileHeight = Math.min(tileSize, imageMetadata.height - y);
|
|
99
|
+
const filename = `tile_${String(row).padStart(3, "0")}_${String(col).padStart(3, "0")}.png`;
|
|
100
|
+
const tilePath = path.join(resolvedOutputDir, filename);
|
|
101
|
+
await sharp(sourcePath)
|
|
102
|
+
.extract({ left: x, top: y, width: tileWidth, height: tileHeight })
|
|
103
|
+
.png({ compressionLevel: PNG_COMPRESSION_LEVEL })
|
|
104
|
+
.toFile(tilePath);
|
|
105
|
+
tiles.push({
|
|
106
|
+
index,
|
|
107
|
+
row,
|
|
108
|
+
col,
|
|
109
|
+
x,
|
|
110
|
+
y,
|
|
111
|
+
width: tileWidth,
|
|
112
|
+
height: tileHeight,
|
|
113
|
+
filename,
|
|
114
|
+
filePath: tilePath,
|
|
115
|
+
});
|
|
116
|
+
index++;
|
|
117
|
+
}
|
|
80
118
|
}
|
|
81
119
|
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
for (const tile of tiles) {
|
|
122
|
+
await fs.unlink(tile.filePath).catch(() => { });
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
const result = {
|
|
127
|
+
sourceImage: imageMetadata,
|
|
128
|
+
grid,
|
|
129
|
+
outputDir: resolvedOutputDir,
|
|
130
|
+
tiles,
|
|
131
|
+
};
|
|
132
|
+
if (resizeInfo) {
|
|
133
|
+
result.resize = resizeInfo;
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
82
136
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
137
|
+
finally {
|
|
138
|
+
if (resizedTempPath) {
|
|
139
|
+
try {
|
|
140
|
+
await fs.unlink(resizedTempPath);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
// ENOENT = already gone, safe to ignore.
|
|
144
|
+
// Anything else = orphaned temp file, surface it.
|
|
145
|
+
if (err.code !== "ENOENT") {
|
|
146
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
147
|
+
console.warn(`[image-tiler] Failed to clean up temp file ${resizedTempPath}: ${msg}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
86
150
|
}
|
|
87
|
-
throw error;
|
|
88
151
|
}
|
|
89
|
-
return {
|
|
90
|
-
sourceImage: imageMetadata,
|
|
91
|
-
grid,
|
|
92
|
-
outputDir: resolvedOutputDir,
|
|
93
|
-
tiles,
|
|
94
|
-
};
|
|
95
152
|
}
|
|
96
153
|
export async function readTileAsBase64(tilePath) {
|
|
97
154
|
const buffer = await fs.readFile(tilePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../../src/services/image-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACxC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,0DAA0D,CAC3G,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,GAAG,mBAAmB,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,2BAA2B,mBAAmB,MAAM;YACzG,iCAAiC,CAClC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,SAAS;QACpC,QAAQ,EAAE,KAAK,CAAC,IAAI;QACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,gBAAwB,eAAe;IAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;IAE/B,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,QAAQ;QACR,eAAe,EAAE,UAAU,GAAG,aAAa;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,QAAgB,EAChB,SAAiB,EACjB,gBAAwB,eAAe;
|
|
1
|
+
{"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../../src/services/image-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-image.d.ts","sourceRoot":"","sources":["../../src/tools/tile-image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"tile-image.d.ts","sourceRoot":"","sources":["../../src/tools/tile-image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgDzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0J7D"}
|
package/dist/tools/tile-image.js
CHANGED
|
@@ -24,6 +24,7 @@ Args:
|
|
|
24
24
|
- filePath (string, required): Absolute or relative path to the image file
|
|
25
25
|
- model (string, optional): Target vision model — ${modelList} (default: "${DEFAULT_MODEL}")
|
|
26
26
|
- tileSize (number, optional): Override tile size in pixels. If omitted, uses the model's optimal default. Clamped to the model's max with a warning if exceeded.
|
|
27
|
+
- maxDimension (number, optional): Max dimension in px (256-65536). When set, the image is resized so its longest side fits within this value before tiling. Reduces token consumption for large images. No-op if the image is already within bounds. Defaults to 10000px. Set to 0 to disable auto-downscaling.
|
|
27
28
|
- outputDir (string, optional): Custom output directory for tiles
|
|
28
29
|
|
|
29
30
|
Returns:
|
|
@@ -36,6 +37,9 @@ Examples:
|
|
|
36
37
|
- Tile for Claude (default): filePath="/path/to/screenshot.png"
|
|
37
38
|
${exampleLines}
|
|
38
39
|
- Custom tile size: filePath="/path/to/image.png", tileSize=800
|
|
40
|
+
- Auto-downscale (default 10000px): images over 10000px on the longest side are automatically downscaled
|
|
41
|
+
- Custom downscale limit: filePath="/path/to/large-screenshot.png", maxDimension=2048
|
|
42
|
+
- Disable downscaling: filePath="/path/to/image.png", maxDimension=0
|
|
39
43
|
- Custom output: filePath="/path/to/image.png", outputDir="/tmp/my-tiles"`;
|
|
40
44
|
})();
|
|
41
45
|
export function registerTileImageTool(server) {
|
|
@@ -49,7 +53,7 @@ export function registerTileImageTool(server) {
|
|
|
49
53
|
idempotentHint: true,
|
|
50
54
|
openWorldHint: false,
|
|
51
55
|
},
|
|
52
|
-
}, async ({ filePath, model, tileSize, outputDir }) => {
|
|
56
|
+
}, async ({ filePath, model, tileSize, maxDimension, outputDir }) => {
|
|
53
57
|
try {
|
|
54
58
|
const ext = path.extname(filePath).toLowerCase().replace(".", "");
|
|
55
59
|
if (ext && !SUPPORTED_FORMATS.includes(ext)) {
|
|
@@ -77,7 +81,7 @@ export function registerTileImageTool(server) {
|
|
|
77
81
|
}
|
|
78
82
|
const basename = path.basename(filePath, path.extname(filePath));
|
|
79
83
|
const resolvedOutputDir = outputDir || path.join(path.dirname(path.resolve(filePath)), "tiles", basename);
|
|
80
|
-
const result = await tileImage(filePath, effectiveTileSize, resolvedOutputDir, config.tokensPerTile);
|
|
84
|
+
const result = await tileImage(filePath, effectiveTileSize, resolvedOutputDir, config.tokensPerTile, maxDimension === 0 ? undefined : maxDimension);
|
|
81
85
|
let previewPath;
|
|
82
86
|
try {
|
|
83
87
|
previewPath = await generatePreview(result, filePath, model);
|
|
@@ -86,12 +90,12 @@ export function registerTileImageTool(server) {
|
|
|
86
90
|
const msg = previewError instanceof Error ? previewError.message : String(previewError);
|
|
87
91
|
warnings.push(`Preview generation failed: ${msg}`);
|
|
88
92
|
}
|
|
89
|
-
const summaryLines = [
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
const summaryLines = [];
|
|
94
|
+
if (result.resize) {
|
|
95
|
+
const r = result.resize;
|
|
96
|
+
summaryLines.push(`Downscaled from ${r.originalWidth}×${r.originalHeight} → ${r.resizedWidth}×${r.resizedHeight} (${r.scaleFactor}x) before tiling`);
|
|
97
|
+
}
|
|
98
|
+
summaryLines.push(`Tiled ${result.sourceImage.width}×${result.sourceImage.height} ${result.sourceImage.format} image for ${config.label}`, `→ ${result.grid.cols}×${result.grid.rows} grid = ${result.grid.totalTiles} tiles of ${result.grid.tileSize}px`, `→ Estimated tokens: ~${result.grid.estimatedTokens.toLocaleString()} (all tiles, ${config.tokensPerTile}/tile)`, `→ Saved to: ${result.outputDir}`);
|
|
95
99
|
if (previewPath) {
|
|
96
100
|
summaryLines.push(`→ Preview: preview.html (open in browser to visualize the grid)`);
|
|
97
101
|
}
|
|
@@ -115,6 +119,9 @@ export function registerTileImageTool(server) {
|
|
|
115
119
|
filePath: t.filePath,
|
|
116
120
|
})),
|
|
117
121
|
};
|
|
122
|
+
if (result.resize) {
|
|
123
|
+
structuredOutput.resize = result.resize;
|
|
124
|
+
}
|
|
118
125
|
if (previewPath) {
|
|
119
126
|
structuredOutput.previewPath = previewPath;
|
|
120
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-image.js","sourceRoot":"","sources":["../../src/tools/tile-image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEjG,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE;IACnC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,QAAQ,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,eAAe,cAAc,CAAC,CAAC,aAAa,cAAc,CAAC;IACjG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,GAAG,CACvE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,2CAA2C,CAAC,GAAG,CAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO;;WAEE,aAAa,CAAC,MAAM;EAC7B,UAAU;;;;qBAIS,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;sDAIK,SAAS,eAAe,aAAa
|
|
1
|
+
{"version":3,"file":"tile-image.js","sourceRoot":"","sources":["../../src/tools/tile-image.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -23,10 +23,18 @@ export interface TileInfo {
|
|
|
23
23
|
filename: string;
|
|
24
24
|
filePath: string;
|
|
25
25
|
}
|
|
26
|
+
export interface ResizeInfo {
|
|
27
|
+
originalWidth: number;
|
|
28
|
+
originalHeight: number;
|
|
29
|
+
resizedWidth: number;
|
|
30
|
+
resizedHeight: number;
|
|
31
|
+
scaleFactor: number;
|
|
32
|
+
}
|
|
26
33
|
export interface TileImageResult {
|
|
27
34
|
sourceImage: ImageMetadata;
|
|
28
35
|
grid: TileGridInfo;
|
|
29
36
|
outputDir: string;
|
|
30
37
|
tiles: TileInfo[];
|
|
38
|
+
resize?: ResizeInfo;
|
|
31
39
|
}
|
|
32
40
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,aAAa,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,aAAa,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB"}
|
package/package.json
CHANGED