@pinepaper.studio/mcp-server 1.6.12 → 1.6.14
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.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.hi.md +1 -1
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +341 -4
- package/README.pt-BR.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/agent/export-manager.d.ts.map +1 -1
- package/dist/agent/export-manager.js +9 -7
- package/dist/agent/export-manager.js.map +1 -1
- package/dist/assets/repositories/iconify.d.ts +0 -5
- package/dist/assets/repositories/iconify.d.ts.map +1 -1
- package/dist/assets/repositories/iconify.js +17 -5
- package/dist/assets/repositories/iconify.js.map +1 -1
- package/dist/browser/puppeteer-controller.d.ts +16 -0
- package/dist/browser/puppeteer-controller.d.ts.map +1 -1
- package/dist/browser/puppeteer-controller.js +32 -2
- package/dist/browser/puppeteer-controller.js.map +1 -1
- package/dist/build-info.json +5 -0
- package/dist/design/design-systems.d.ts +27 -2
- package/dist/design/design-systems.d.ts.map +1 -1
- package/dist/design/design-systems.js +20 -0
- package/dist/design/design-systems.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/ontology/upstream-vocabulary.d.ts +23 -0
- package/dist/ontology/upstream-vocabulary.d.ts.map +1 -0
- package/dist/ontology/upstream-vocabulary.js +1172 -0
- package/dist/ontology/upstream-vocabulary.js.map +1 -0
- package/dist/ontology/vocabulary.d.ts.map +1 -1
- package/dist/ontology/vocabulary.js +19 -0
- package/dist/ontology/vocabulary.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +299 -75
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/engine-methods.d.ts.map +1 -1
- package/dist/tools/engine-methods.js +28 -2
- package/dist/tools/engine-methods.js.map +1 -1
- package/dist/tools/engine-surface.d.ts +1 -1
- package/dist/tools/engine-surface.d.ts.map +1 -1
- package/dist/tools/engine-surface.js +18 -12
- package/dist/tools/engine-surface.js.map +1 -1
- package/dist/tools/handlers/camera.d.ts.map +1 -1
- package/dist/tools/handlers/camera.js +17 -2
- package/dist/tools/handlers/camera.js.map +1 -1
- package/dist/tools/handlers/font.d.ts.map +1 -1
- package/dist/tools/handlers/font.js +48 -3
- package/dist/tools/handlers/font.js.map +1 -1
- package/dist/tools/handlers/maps.d.ts.map +1 -1
- package/dist/tools/handlers/maps.js +16 -0
- package/dist/tools/handlers/maps.js.map +1 -1
- package/dist/tools/handlers.d.ts +24 -3
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +645 -27
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/minimal-descriptions.d.ts.map +1 -1
- package/dist/tools/minimal-descriptions.js +2 -0
- package/dist/tools/minimal-descriptions.js.map +1 -1
- package/dist/tools/shape-params.d.ts +13 -2
- package/dist/tools/shape-params.d.ts.map +1 -1
- package/dist/tools/shape-params.js +80 -2
- package/dist/tools/shape-params.js.map +1 -1
- package/dist/tools/stick-vocabulary.d.ts +1 -1
- package/dist/tools/stick-vocabulary.js +1 -1
- package/dist/tools/toolkits.d.ts.map +1 -1
- package/dist/tools/toolkits.js +12 -1
- package/dist/tools/toolkits.js.map +1 -1
- package/dist/types/code-generator.d.ts +27 -1
- package/dist/types/code-generator.d.ts.map +1 -1
- package/dist/types/code-generator.js +2871 -316
- package/dist/types/code-generator.js.map +1 -1
- package/dist/types/schemas.d.ts +1595 -271
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +269 -31
- package/dist/types/schemas.js.map +1 -1
- package/dist/utils/a11y.d.ts +67 -0
- package/dist/utils/a11y.d.ts.map +1 -0
- package/dist/utils/a11y.js +117 -0
- package/dist/utils/a11y.js.map +1 -0
- package/dist/utils/ad-package.d.ts +44 -0
- package/dist/utils/ad-package.d.ts.map +1 -0
- package/dist/utils/ad-package.js +121 -0
- package/dist/utils/ad-package.js.map +1 -0
- package/dist/utils/scc.d.ts +41 -0
- package/dist/utils/scc.d.ts.map +1 -0
- package/dist/utils/scc.js +185 -0
- package/dist/utils/scc.js.map +1 -0
- package/dist/utils/zip.d.ts +7 -0
- package/dist/utils/zip.d.ts.map +1 -0
- package/dist/utils/zip.js +82 -0
- package/dist/utils/zip.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +31 -1
- package/dist/version.js.map +1 -1
- package/manifest.json +9 -1
- package/package.json +6 -4
package/README.de.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
Der PinePaper MCP-Server lässt KI-Assistenten über das Model Context Protocol Grafiken in [PinePaper Studio](https://pinepaper.studio) erstellen und animieren. Funktioniert mit jeder KI, die MCP-Tool-Aufrufe unterstützt (Claude, GPT, Gemini, lokale Modelle usw.).
|
|
16
16
|
|
|
17
|
-
Der Server bietet **
|
|
17
|
+
Der Server bietet **154 Tools**: Zeichnen, Animation, Diagramme, Karten, Typografie, Physik, Bildbearbeitung, Datenvisualisierung und Export:
|
|
18
18
|
|
|
19
19
|
- Text, Formen, Geometrie und komplexe Grafiken erstellen
|
|
20
20
|
- Mit deklarativen **Relationen** animieren statt mit Keyframes
|
package/README.es.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
El servidor MCP de PinePaper permite a los asistentes de IA crear y animar gráficos en [PinePaper Studio](https://pinepaper.studio) a través del Model Context Protocol. Funciona con cualquier IA que soporte llamadas a herramientas MCP (Claude, GPT, Gemini, modelos locales, etc.).
|
|
16
16
|
|
|
17
|
-
Expone **
|
|
17
|
+
Expone **154 herramientas**: dibujo, animación, diagramas, mapas, tipografía, física, edición de imágenes, visualización de datos y exportación:
|
|
18
18
|
|
|
19
19
|
- Crear texto, formas, geometría y gráficos complejos
|
|
20
20
|
- Animar con **relaciones** declarativas en lugar de fotogramas clave
|
package/README.fr.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
Le serveur MCP PinePaper permet aux assistants IA de créer et d'animer des graphiques dans [PinePaper Studio](https://pinepaper.studio) via le Model Context Protocol. Compatible avec toute IA gérant les appels d'outils MCP (Claude, GPT, Gemini, modèles locaux, etc.).
|
|
16
16
|
|
|
17
|
-
Il expose **
|
|
17
|
+
Il expose **154 outils** : dessin, animation, diagrammes, cartes, typographie, physique, retouche d'image, visualisation de données et export :
|
|
18
18
|
|
|
19
19
|
- Créer du texte, des formes, de la géométrie et des graphiques complexes
|
|
20
20
|
- Animer avec des **relations** déclaratives plutôt que des images clés
|
package/README.hi.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
PinePaper MCP सर्वर AI असिस्टेंट्स को Model Context Protocol के ज़रिए [PinePaper Studio](https://pinepaper.studio) में ग्राफ़िक्स बनाने और एनिमेट करने देता है। MCP टूल कॉलिंग वाले किसी भी AI (Claude, GPT, Gemini, लोकल मॉडल आदि) के साथ काम करता है।
|
|
16
16
|
|
|
17
|
-
सर्वर **
|
|
17
|
+
सर्वर **154 टूल** देता है — ड्रॉइंग, एनिमेशन, डायग्राम, नक्शे, टाइपोग्राफ़ी, फिज़िक्स, इमेज एडिटिंग, डेटा विज़ुअलाइज़ेशन और एक्सपोर्ट:
|
|
18
18
|
|
|
19
19
|
- टेक्स्ट, आकृतियाँ, ज्यामिति और जटिल ग्राफ़िक्स बनाना
|
|
20
20
|
- कीफ़्रेम की जगह व्यवहार बताने वाले **रिलेशन** से एनिमेशन
|
package/README.ja.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
PinePaper MCP サーバーは、MCP 経由で AI アシスタントが [PinePaper Studio](https://pinepaper.studio) 上にグラフィックを作成・アニメーションさせるためのサーバーです。MCP ツールコールに対応した AI(Claude、GPT、Gemini、ローカルモデルなど)で動作します。
|
|
16
16
|
|
|
17
|
-
**
|
|
17
|
+
**154 個のツール**を提供 — 描画・アニメーション・図・地図・タイポグラフィ・物理・画像編集・データ可視化・エクスポート:
|
|
18
18
|
|
|
19
19
|
- テキスト、図形、ジオメトリ、複雑なグラフィックの作成
|
|
20
20
|
- キーフレームではなく、ふるまいを宣言する**リレーション**でアニメーション
|
package/README.ko.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
PinePaper MCP 서버는 AI 어시스턴트가 MCP를 통해 [PinePaper Studio](https://pinepaper.studio)에서 그래픽을 만들고 애니메이션하게 해줍니다. MCP 툴 콜을 지원하는 모든 AI(Claude, GPT, Gemini, 로컬 모델 등)와 호환됩니다.
|
|
16
16
|
|
|
17
|
-
**
|
|
17
|
+
**154개의 툴** 제공 — 드로잉, 애니메이션, 다이어그램, 지도, 타이포그래피, 물리, 이미지 편집, 데이터 시각화, 내보내기:
|
|
18
18
|
|
|
19
19
|
- 텍스트·도형·기하·복잡한 그래픽 생성
|
|
20
20
|
- 키프레임 대신 행동을 선언하는 **릴레이션**으로 애니메이션
|
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
PinePaper MCP Server enables AI assistants to create and animate graphics in [PinePaper Studio](https://pinepaper.studio) via the Model Context Protocol (MCP). Works with any AI that supports MCP tool calling (Claude, GPT, Gemini, local models, etc.).
|
|
27
27
|
|
|
28
|
-
The server exposes **
|
|
28
|
+
The server exposes **154 tools** across drawing, animation, diagrams, maps, typography, physics, image editing, data visualization, and export. Using natural language, you can:
|
|
29
29
|
|
|
30
30
|
- Create geometric shapes, text collages, diagrams, and data charts
|
|
31
31
|
- Apply 37+ character-level text effects and 28+ vertex deformation presets
|
|
@@ -36,7 +36,7 @@ The server exposes **152 tools** across drawing, animation, diagrams, maps, typo
|
|
|
36
36
|
|
|
37
37
|
## Running it: local or hosted
|
|
38
38
|
|
|
39
|
-
**Local is free and complete.** Every one of the
|
|
39
|
+
**Local is free and complete.** Every one of the 154 tools works when you run
|
|
40
40
|
this server yourself. There is no reduced tier and nothing held back.
|
|
41
41
|
|
|
42
42
|
What it needs:
|
|
@@ -217,6 +217,341 @@ If you do not want an agent executing anything, `code` mode is a first-class pat
|
|
|
217
217
|
- Puppeteer mode launches Chrome with `--no-sandbox` and `--disable-setuid-sandbox`. That is routine for headless automation and it does weaken Chrome's own process sandbox. If that matters where you are running it, use `code` mode or put the server in a container.
|
|
218
218
|
- Puppeteer itself is an **optional** peer dependency, kept out of the default tree precisely because a headless browser plus an install script is what scanners flag hardest. Install it only if you want the executing mode.
|
|
219
219
|
|
|
220
|
+
## What's new in 1.6.14
|
|
221
|
+
|
|
222
|
+
Many of the features below rely on newer studio capabilities. Where a studio
|
|
223
|
+
lacks one, the result says so — the call never quietly claims what it could
|
|
224
|
+
not do.
|
|
225
|
+
|
|
226
|
+
### New: ads, variants and broadcast deliverables
|
|
227
|
+
|
|
228
|
+
- **`html5-ad`** export: a display-network zip (`index.html` with the
|
|
229
|
+
`ad.size` meta and a `clickTag` click target — the whole ad or a CTA's box)
|
|
230
|
+
plus a backup PNG beside it. The result checks the zip against a size budget
|
|
231
|
+
(`ad.maxBytes`, default 150 KB) and lists any external requests.
|
|
232
|
+
- **`playable`** export: a single-file MRAID playable whose CTA
|
|
233
|
+
(`ad.ctaItemId`) opens the store link through `mraid.open`, leaving the rest
|
|
234
|
+
of the ad interactive.
|
|
235
|
+
- **`pinepaper_render_batch`**: one creative per row of data — each row's item
|
|
236
|
+
changes or template params, then an export — with per-row files, warnings and
|
|
237
|
+
failures.
|
|
238
|
+
- **`scc`** captions: CEA-608 (broadcast) from the same timed text as SRT / VTT,
|
|
239
|
+
with notes on anything cut, dropped or timed late.
|
|
240
|
+
- **`pinepaper_accessibility_check`**: text contrast (WCAG AA) and flashing
|
|
241
|
+
(more than three flashes a second) as a quick screen before delivery.
|
|
242
|
+
|
|
243
|
+
### New: text that fits its box
|
|
244
|
+
|
|
245
|
+
- **`fit`** on text (`create_item`, `modify_item`, batch):
|
|
246
|
+
`{maxWidth, maxHeight?, minFontSize?, maxFontSize?, wrap?, hold?}` sizes the
|
|
247
|
+
text to the box, and later content changes refit it — the variant /
|
|
248
|
+
translation workflow. It holds the anchored edge (`top-*` holds the top);
|
|
249
|
+
`fit: null` stops fitting. The result's `textFit` gives the size, line count
|
|
250
|
+
and whether it fits.
|
|
251
|
+
- **Overflow in every export.** `fidelity` lists `text_overflow` for text past
|
|
252
|
+
its box or off the frame — the check to run before rendering a batch.
|
|
253
|
+
- **`direction`** (`auto` | `ltr` | `rtl`) for Arabic, Hebrew and other RTL
|
|
254
|
+
paragraphs; `auto` is reported with the way it resolved.
|
|
255
|
+
- **`tabularFigures`** for counters and prices that should not jitter, and
|
|
256
|
+
**`strokePosition: 'outside'`** for thick caption outlines that keep the
|
|
257
|
+
letterform.
|
|
258
|
+
- Weight, italic, line spacing, and fonts from the catalogue or Google Fonts
|
|
259
|
+
(`pinepaper_font` gained a `load` action) now reach the text, loaded before
|
|
260
|
+
it is drawn.
|
|
261
|
+
|
|
262
|
+
### New: export formats and controls
|
|
263
|
+
|
|
264
|
+
- **`apng`** — animation with full transparency, for overlays and stickers.
|
|
265
|
+
- **`jpg` / `webp`** stills for byte-budgeted ad specs; **`srt` / `vtt`**
|
|
266
|
+
captions from the scene's timed text; **multi-page PDF**, one page per saved
|
|
267
|
+
scene, with a searchable text layer and print options (paper
|
|
268
|
+
size, orientation, bleed, trim marks, dpi).
|
|
269
|
+
- **`region`** exports a part of the canvas — carousel slices, sheets of cards.
|
|
270
|
+
A cell leaves out a neighbour's overflowing items and names the items that
|
|
271
|
+
cross its edge.
|
|
272
|
+
- **`time`** renders a still at a chosen moment rather than wherever the
|
|
273
|
+
playhead is.
|
|
274
|
+
- **GIF** `loop` play count and a `maxBytes` budget (re-encoded smaller, with
|
|
275
|
+
each attempt reported).
|
|
276
|
+
- **Broadcast MP4** — `broadcast: true` (BT.709, limited range, constant
|
|
277
|
+
bitrate), `bitrate` / `minBitrate`, and `broadcastHeadroom`. The result
|
|
278
|
+
reports the achieved bitrate and the measured luma; when the file would fail
|
|
279
|
+
broadcast QC, `fidelity` says so and gives the command that fixes it.
|
|
280
|
+
- **NTSC rates** (29.97, 59.94, …) with a note when a duration overruns at
|
|
281
|
+
them, and a warning when H.264 rounds an odd side up by a pixel.
|
|
282
|
+
- New platform presets `print-a4-landscape` and `print-letter-landscape`.
|
|
283
|
+
|
|
284
|
+
### New: tools and parameters
|
|
285
|
+
|
|
286
|
+
- **`pinepaper_lasso`** gained `cut`: cut a subject out along a polygon, no custom code.
|
|
287
|
+
- **Generator regions** can be shaped (rounded rect, ellipse, circle, polygon,
|
|
288
|
+
star, or an existing path) and named with `region.id`; the same generator in
|
|
289
|
+
several boxes gives several instances.
|
|
290
|
+
- **`modify_item`** takes `skewX` / `skewY` and an affine `matrix` (mockups).
|
|
291
|
+
- **Pixel-art rasters** (`smoothing: 'off'`), a **globe `disable`** action,
|
|
292
|
+
**keyed audio gain**, and **widget HTML** `lang`, `dir` and `alt`.
|
|
293
|
+
- `bornAt` / `ttl` now work as a visibility window in local renders, so shots
|
|
294
|
+
hand over cleanly on the boundary.
|
|
295
|
+
- `serverInfo.version` names the exact build (`1.6.14+<sha>`).
|
|
296
|
+
|
|
297
|
+
### Fixed: properties that were silently ignored
|
|
298
|
+
|
|
299
|
+
`create_item` and `modify_item` now name any property they could not act on,
|
|
300
|
+
with a suggestion for common misspellings. Beyond that, these used to be
|
|
301
|
+
dropped and now work: no-fill (`null` / `'transparent'` / `'none'`), dashes,
|
|
302
|
+
caps and joins on every shape, `color` on closed paths, a top-level `anchor`,
|
|
303
|
+
path coordinates kept when no position is given, mesh colour on 3D shapes,
|
|
304
|
+
`template_params` naming undeclared params, chart data in the documented
|
|
305
|
+
shape, and gradients that cannot be read (now refused, not drawn as nothing).
|
|
306
|
+
|
|
307
|
+
### Fixed: tools that reported success for the wrong thing
|
|
308
|
+
|
|
309
|
+
- Batch create / modify / execute now behave exactly like their single-item
|
|
310
|
+
tools, with one undo step per batch.
|
|
311
|
+
- `moves_along_path` follows the path you name (or refuses); relations to an
|
|
312
|
+
id not on the canvas are refused.
|
|
313
|
+
- Uploaded media: the id you are given is the one other tools accept, audio
|
|
314
|
+
levels reach the mix, `data:` and server-side URLs upload in production,
|
|
315
|
+
and clearing the canvas removes uploaded media too.
|
|
316
|
+
- A platform preset no longer stretches a canvas of another aspect ratio.
|
|
317
|
+
- `camera_animate` no longer claims pitch / yaw as 3D perspective, and its
|
|
318
|
+
`duration` is optional.
|
|
319
|
+
- Nine tools' published schemas disagreed with what they accepted; a guard
|
|
320
|
+
now keeps them in step.
|
|
321
|
+
|
|
322
|
+
### New: a whole music bed in one call
|
|
323
|
+
|
|
324
|
+
`pinepaper_sound` gained a `sequence` action taking `[{t, spec|preset, note?,
|
|
325
|
+
duration?}]`. Every cue used to be its own call — a 112-cue bed cost 112 round
|
|
326
|
+
trips — and nothing about the work needed one each. Failures come back by
|
|
327
|
+
index, because a bed where three of a hundred cues didn't sound is neither a
|
|
328
|
+
success nor a failure.
|
|
329
|
+
|
|
330
|
+
### Fixed: create_scene drew the wrong shape for six of its ten types
|
|
331
|
+
|
|
332
|
+
It built shapes itself instead of asking the engine — a hand-written branch per
|
|
333
|
+
type covering circle, rectangle, star and text, and **a 30px circle for
|
|
334
|
+
everything else**. So `ellipse`, `triangle`, `polygon`, `path`, `line` and
|
|
335
|
+
`arc` silently came out as a small blue circle, and any property that branch
|
|
336
|
+
didn't name was dropped (which is why an ellipse ignored `width`/`height` while
|
|
337
|
+
the same values worked through `agent_batch_execute`).
|
|
338
|
+
|
|
339
|
+
It now creates items the same way every other tool does, so all 28 item types
|
|
340
|
+
work, along with every property they accept. Two related corrections: scene
|
|
341
|
+
relations accepted 8 types while the catalogue documented ~90 — following the
|
|
342
|
+
documentation failed validation — and scene animations gained `startTime`, so a
|
|
343
|
+
scene can be staggered instead of everything moving from frame zero.
|
|
344
|
+
|
|
345
|
+
### Fixed: layered-character import described the wrong manifest
|
|
346
|
+
|
|
347
|
+
The docs implied a `layers[]` array; the engine reads `info.parts` keyed by tag.
|
|
348
|
+
An array imports nothing. The description also implied `pinepaper_animate`
|
|
349
|
+
could blink — only an `expresses` relation drives blink/smile/talk, and asking
|
|
350
|
+
`animate` for it is a silent no-op.
|
|
351
|
+
|
|
352
|
+
### Fixed: PDF export failed on every scene
|
|
353
|
+
|
|
354
|
+
`pinepaper_agent_export` with `format: "pdf"` died with "parameter 1 is not of
|
|
355
|
+
type 'Blob'" — an error naming `FileReader` and nothing about PDFs. The engine
|
|
356
|
+
resolves a record `{blob, width, height, format}` and this passed the whole
|
|
357
|
+
record where a `Blob` was expected. It now accepts either shape, reports the
|
|
358
|
+
page geometry the record carries, and when something really is not a file it
|
|
359
|
+
says so about the PDF rather than about `FileReader`.
|
|
360
|
+
|
|
361
|
+
### Fixed: the validator's own findings were being swallowed
|
|
362
|
+
|
|
363
|
+
`pinepaper_validate` answers `{success: true, ok: false, diagnostics: [...]}` —
|
|
364
|
+
the call worked and the *scene* has problems, which is the whole point of the
|
|
365
|
+
tool. An internal guard treated `ok: false` as a tool failure, so the result
|
|
366
|
+
became "the studio reported failure without naming a reason" and the
|
|
367
|
+
diagnostics were discarded. A refusal that carries diagnostics now names them.
|
|
368
|
+
|
|
369
|
+
### Changed: export fidelity is always reported
|
|
370
|
+
|
|
371
|
+
It used to appear only when there was something to lose, so that an empty list
|
|
372
|
+
could not be misread as "this format is lossless". That traded one misreading
|
|
373
|
+
for a worse one — you could not tell "checked, nothing lost" from "never
|
|
374
|
+
checked". All three states are explicit now, and the caveat lives in a note
|
|
375
|
+
rather than in the absence.
|
|
376
|
+
|
|
377
|
+
`pinepaper_agent_export` also points at `pinepaper_capture_frames` as the cheap
|
|
378
|
+
way to confirm a scene is actually moving **before** committing to a render.
|
|
379
|
+
|
|
380
|
+
### Fixed: documentation that described the wrong contract
|
|
381
|
+
|
|
382
|
+
- **`solveOde` state variables are positional** — `t`, `y0`, `y1`, `y2` …
|
|
383
|
+
matching `initialState`. There is no `x` or `y`, so the natural way to write
|
|
384
|
+
a Lorenz system failed with "Undefined symbol y". The working form is now in
|
|
385
|
+
the description.
|
|
386
|
+
- **`moves_along_path` with `params.equation`** only works on the relation's
|
|
387
|
+
signal path. Easing `bounce` is piecewise and leaves that path, which
|
|
388
|
+
silently discards the equation and leaves the item where it started.
|
|
389
|
+
- **`grid.blocked` in `pathfind`** is a **mask**, one entry per cell, not a
|
|
390
|
+
list of blocked indices. Both are arrays of numbers, so the wrong one used to
|
|
391
|
+
produce a plausible "no path" instead of an error; the length is now checked.
|
|
392
|
+
|
|
393
|
+
## What's new in 1.6.13
|
|
394
|
+
|
|
395
|
+
### Fixed: WebGL was switched off, so every shader feature silently did nothing
|
|
396
|
+
|
|
397
|
+
The browser was launched with `--disable-gpu`, carried in as a headless
|
|
398
|
+
convention. With it, `webgl1` and `webgl2` both report **false** in the page —
|
|
399
|
+
so `pinepaper_world3d`, `drawShaderArt`, `drawFormulaArt` and every shader aura
|
|
400
|
+
(`liquid_metal`, `caustics`, `heatmap`, `gem_smoke`, `electric_arc`, `vortex`)
|
|
401
|
+
could not run. Worse, some of them reported `success: true` and rendered
|
|
402
|
+
nothing.
|
|
403
|
+
|
|
404
|
+
The flag is gone, so Chrome uses the real GPU where there is one, and
|
|
405
|
+
`--enable-unsafe-swiftshader` covers machines without: Chrome no longer falls
|
|
406
|
+
back to software GL on its own, so without it a headless server gets no WebGL
|
|
407
|
+
at all rather than a slow one. Measured on the same machine, only the flags
|
|
408
|
+
differing: false/false before, WebGL 1 and 2 both available after.
|
|
409
|
+
|
|
410
|
+
### Fixed: sixteen parameters that were accepted and then ignored
|
|
411
|
+
|
|
412
|
+
A stress-test pass across six designs found the same failure repeatedly — a
|
|
413
|
+
parameter the schema takes, validates, and drops before it reaches the engine.
|
|
414
|
+
All of them now either work or say why not:
|
|
415
|
+
|
|
416
|
+
- **Choropleth maps** rendered near-black: `colorScale: "greens"` was sent
|
|
417
|
+
where the engine indexes a two-stop `['#from', '#to']` ramp, so it indexed a
|
|
418
|
+
string. `minValue`/`maxValue`/`showLegend` weren't mapped either.
|
|
419
|
+
- **Region highlights** came out default blue — the colour was stripped, and
|
|
420
|
+
the engine reads `style.fill`.
|
|
421
|
+
- **`pinepaper_map load`** documented an `options` parameter the schema threw
|
|
422
|
+
away, so `{style: "dark"}` never arrived.
|
|
423
|
+
- **Mask keyframe `time`** was capped at 0–1 while the engine reads **seconds**
|
|
424
|
+
— a keyframe at 2.0s was a validation error.
|
|
425
|
+
- **Animated masks (mode 3)** passed the animation preset where the mask
|
|
426
|
+
*shape* goes, so the keyframes drove the wrong geometry.
|
|
427
|
+
- **Sound cues** needed two calls each because `visual.startTime` was stripped;
|
|
428
|
+
one call places a cue now.
|
|
429
|
+
- **`text_effect`** gained `startAt` and `hideAfter` — every effect played from
|
|
430
|
+
t=0, so in a multi-shot video they all fired on the opening frame.
|
|
431
|
+
- **`import_asset` by URL** is implemented rather than refused.
|
|
432
|
+
- **`drawShaderArt`** documented `fragmentSource` without mentioning that it is
|
|
433
|
+
ignored unless you pass `preset: "custom"`, and that the shader is GLSL ES
|
|
434
|
+
3.00 (`in v_uv` / `out outColor`), not `gl_FragColor`.
|
|
435
|
+
- **Asset search** showed `[object Object]` as the author, and claimed
|
|
436
|
+
"Various Licenses" for icons whose licence it had simply failed to read.
|
|
437
|
+
|
|
438
|
+
Where the engine genuinely cannot do the thing, the tool now refuses by name
|
|
439
|
+
instead of accepting the parameter and ignoring it: right-to-left text has no
|
|
440
|
+
engine support, and a connector id you supply is dropped by the engine, so the
|
|
441
|
+
result tells you which id you actually got.
|
|
442
|
+
|
|
443
|
+
### Fixed: one 3D colour broke every export in the session
|
|
444
|
+
|
|
445
|
+
`pinepaper_world3d add_object` with `color: "#ef4444"` reported success and
|
|
446
|
+
then made **every later MP4 export fail** with a WebGL error, because the
|
|
447
|
+
colour goes to a shader uniform that needs three floats. Hex is what every
|
|
448
|
+
other tool here takes, so the conversion happens for you now — as does
|
|
449
|
+
`[255, 0, 0]`, the other common form.
|
|
450
|
+
|
|
451
|
+
### Fixed: an unknown item id reported success
|
|
452
|
+
|
|
453
|
+
`pinepaper_keyframe_animate` on an id that doesn't exist returned success and
|
|
454
|
+
animated nothing — the engine warns through a console this tool cannot read.
|
|
455
|
+
It now refuses and names the id.
|
|
456
|
+
|
|
457
|
+
### Fixed: photos could not be imported from a URL at all
|
|
458
|
+
|
|
459
|
+
1.6.12 stopped an imported image from tainting the canvas, and in doing so made
|
|
460
|
+
URL imports impossible on pinepaper.studio. The studio sends
|
|
461
|
+
`connect-src 'self' …`, so the page may not fetch any third-party host — the
|
|
462
|
+
old code got around this by *loading* the image instead, which is exactly what
|
|
463
|
+
tainted the canvas.
|
|
464
|
+
|
|
465
|
+
The fetch now happens in the MCP server, which has no such restriction, and the
|
|
466
|
+
page is handed a `data:` URL. Nothing to fetch, nothing to taint, and the
|
|
467
|
+
picture actually arrives. `pinepaper_import_svg` resolves its document the same
|
|
468
|
+
way, so embedded remote images are kept rather than dropped.
|
|
469
|
+
|
|
470
|
+
Large photos are handed over **beside** the generated code rather than inside
|
|
471
|
+
it. A 3000×800 image inlined as a data URL made ~630KB of JavaScript, which the
|
|
472
|
+
engine's code governor could not rewrite — it gave up and took the return value
|
|
473
|
+
with it, so the import reported success with no item id while smaller photos
|
|
474
|
+
worked fine.
|
|
475
|
+
|
|
476
|
+
### Fixed: the caption system was invisible to the agents told to use it
|
|
477
|
+
|
|
478
|
+
`pinepaper_text_style` and `pinepaper_execute_custom_code` were callable but
|
|
479
|
+
absent from `tools/list` in the default toolkit — while `pinepaper_text_effect`,
|
|
480
|
+
`pinepaper_design_medium`, `pinepaper_keyframe_animate` and
|
|
481
|
+
`pinepaper_execute_generator` all tell an agent to use them. So the whole
|
|
482
|
+
15-style caption system was reachable only by someone who already knew the name.
|
|
483
|
+
Profiles filter by tag, so these fell out because of the group they belong to,
|
|
484
|
+
not because anyone decided they were unnecessary.
|
|
485
|
+
|
|
486
|
+
The default toolkit now lists everything its own descriptions point at, and
|
|
487
|
+
`pinepaper_text_style` accepts `list` as well as `list_styles`, because
|
|
488
|
+
`pinepaper_text_effect` spells the same action `list`.
|
|
489
|
+
|
|
490
|
+
Its description also now carries what a real render found: over photographs,
|
|
491
|
+
pass a palette — `chrome`, `cutout` and `glitch` are off-brief at the default
|
|
492
|
+
and `neon` needs one on dark images — and `glitch` at 80px monospace overflows
|
|
493
|
+
a 1920 canvas at 36 characters.
|
|
494
|
+
|
|
495
|
+
### Fixed: exports sized by the renderer instead of by your request
|
|
496
|
+
|
|
497
|
+
Three tools reported a pixel count that came from how the browser happened to
|
|
498
|
+
be rendering, not from what you asked for:
|
|
499
|
+
|
|
500
|
+
- `framing: "camera"` produced **2234×1472** whatever the canvas was — a
|
|
501
|
+
1920×1080 board and a 3840×2160 board both landed there.
|
|
502
|
+
- `format: "png"` ignored `platform` completely: both `youtube-thumbnail`
|
|
503
|
+
(1280×720) and `auto` on a 1920×1080 canvas returned **3000×1688**, which is
|
|
504
|
+
the board scaled by 150/96 DPI.
|
|
505
|
+
- `pinepaper_agent_end_job` reported the canvas as 2233×1472.
|
|
506
|
+
|
|
507
|
+
None of those ratios is the device pixel ratio, so the number could not be
|
|
508
|
+
divided back out afterwards — which is why it forced ffmpeg and `sips`
|
|
509
|
+
workarounds rather than a quick correction. All three now read the canvas size
|
|
510
|
+
you set, and PNG reports the dimensions it actually produced.
|
|
511
|
+
|
|
512
|
+
### Fixed: `size` on an effect is a multiplier, not pixels
|
|
513
|
+
|
|
514
|
+
Every effect scales from the item's own bounds and `size` multiplies that, so
|
|
515
|
+
`size: 30` asks for a disc thousands of pixels across and gets one, reporting
|
|
516
|
+
success. Typical values are 1.5 to 3. The parameter was not in the tool's
|
|
517
|
+
schema at all, so "pixels" was the only natural reading; it is documented now.
|
|
518
|
+
|
|
519
|
+
### Fixed: cutout styles and the lasso called into nothing
|
|
520
|
+
|
|
521
|
+
`pinepaper_cutout_style` called `app.imageTools.applyCutoutStyle`, which has
|
|
522
|
+
never existed — so it reported success with the real error nested inside. It
|
|
523
|
+
now uses the engine's actual cutout API and resolves the item id first.
|
|
524
|
+
|
|
525
|
+
`pinepaper_lasso` has no headless form at all: the lasso is a mouse tool whose
|
|
526
|
+
extraction is driven by strokes a user draws. It now says so and points at
|
|
527
|
+
`pinepaper_extract_object`, instead of failing with
|
|
528
|
+
`undefined is not a function`.
|
|
529
|
+
|
|
530
|
+
### Fixed: results that were too big to read
|
|
531
|
+
|
|
532
|
+
An error carried the whole generated script in its details — ~12KB of
|
|
533
|
+
JavaScript in front of a one-line failure. It now carries the script's size and
|
|
534
|
+
a switch (`PINEPAPER_ECHO_CODE=1`) to get it back.
|
|
535
|
+
|
|
536
|
+
`pinepaper_agent_end_job` returned a 263,000-character screenshot inline, which
|
|
537
|
+
is over the tool-result limit of the clients reading it, so an agent could not
|
|
538
|
+
read its own verification step. The threshold for saving to a file instead was
|
|
539
|
+
set against the bridge's limits rather than the caller's, and is now low enough
|
|
540
|
+
that this cannot happen.
|
|
541
|
+
|
|
542
|
+
### Fixed: map tools that called into nothing
|
|
543
|
+
|
|
544
|
+
Nine tools called engine methods that have never existed on any studio —
|
|
545
|
+
`pan_map`, `zoom_map`, `export_map`, `add_map_labels`, `animate_map_wave`,
|
|
546
|
+
region-at-point, history `get_state`, `trigger_action`, and the relation lookup
|
|
547
|
+
used by scene analysis. The last one was the quiet one: it was guarded, so it
|
|
548
|
+
never threw — it just reported every scene as having **no relations**, always.
|
|
549
|
+
|
|
550
|
+
Where the engine has the same capability under another name, they now call it.
|
|
551
|
+
Where it has no such capability at all — there is no lat/lon pan, no numeric
|
|
552
|
+
zoom level, and no region hit test — the tool now says so by name and points at
|
|
553
|
+
what does work, instead of failing with `undefined is not a function`.
|
|
554
|
+
|
|
220
555
|
## What's new in 1.6.12
|
|
221
556
|
|
|
222
557
|
### Fixed: images could not be imported at all
|
|
@@ -772,7 +1107,7 @@ Fourteen new tools (121 → 135) and new actions across the surface — the rele
|
|
|
772
1107
|
|
|
773
1108
|
## Toolkits & Token Budget
|
|
774
1109
|
|
|
775
|
-
|
|
1110
|
+
154 tools is a lot of context. The server ships a **toolkit** system that serves only the tools a given client needs, plus a **verbosity** system that controls how long each tool description is.
|
|
776
1111
|
|
|
777
1112
|
**Toolkit profiles** (`PINEPAPER_TOOLKIT`):
|
|
778
1113
|
|
|
@@ -977,7 +1312,7 @@ Generate instruction/code pairs for LLM fine-tuning:
|
|
|
977
1312
|
|
|
978
1313
|
## Tools Reference
|
|
979
1314
|
|
|
980
|
-
All
|
|
1315
|
+
All 154 tools, grouped by the tag used for toolkit filtering.
|
|
981
1316
|
|
|
982
1317
|
### Canvas (`canvas`)
|
|
983
1318
|
| Tool | Description |
|
|
@@ -1098,6 +1433,7 @@ All 152 tools, grouped by the tag used for toolkit filtering.
|
|
|
1098
1433
|
| `pinepaper_scene_diff` | What changed between two scene states |
|
|
1099
1434
|
| `pinepaper_audio_beats` | Detect beats; bake an item's animation onto them |
|
|
1100
1435
|
| `pinepaper_template_params` | Templates with typed, coerced inputs |
|
|
1436
|
+
| `pinepaper_render_batch` | One creative per data row: apply the row, export it |
|
|
1101
1437
|
|
|
1102
1438
|
### Image Processing (`image_processing`)
|
|
1103
1439
|
| Tool | Description |
|
|
@@ -1195,6 +1531,7 @@ All 152 tools, grouped by the tag used for toolkit filtering.
|
|
|
1195
1531
|
| `pinepaper_analyze_design` | Analyze design quality |
|
|
1196
1532
|
| `pinepaper_validate_design` | Validate against design rules |
|
|
1197
1533
|
| `pinepaper_validate` | General validation |
|
|
1534
|
+
| `pinepaper_accessibility_check` | Text contrast and flashing (WCAG), as a heuristic screen |
|
|
1198
1535
|
| `pinepaper_validate_scene` | Validate scene integrity |
|
|
1199
1536
|
| `pinepaper_instantiate_ontology` | Compile a pp: design graph into a scene |
|
|
1200
1537
|
| `pinepaper_lint_scene` | Relational-density audit + structural-relation suggestions |
|
package/README.pt-BR.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
O servidor MCP do PinePaper permite que assistentes de IA criem e animem gráficos no [PinePaper Studio](https://pinepaper.studio) via Model Context Protocol. Funciona com qualquer IA que suporte chamadas de ferramenta MCP (Claude, GPT, Gemini, modelos locais etc.).
|
|
16
16
|
|
|
17
|
-
São **
|
|
17
|
+
São **154 ferramentas**: desenho, animação, diagramas, mapas, tipografia, física, edição de imagens, visualização de dados e exportação:
|
|
18
18
|
|
|
19
19
|
- Criar texto, formas, geometria e gráficos complexos
|
|
20
20
|
- Animar com **relações** declarativas em vez de keyframes
|
package/README.zh-CN.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
PinePaper MCP 服务器让 AI 助手通过 MCP 协议在 [PinePaper Studio](https://pinepaper.studio) 中创建和驱动图形动画。兼容任何支持 MCP 工具调用的 AI(Claude、GPT、Gemini、本地模型等)。
|
|
16
16
|
|
|
17
|
-
服务器提供 **
|
|
17
|
+
服务器提供 **154 个工具**,覆盖绘图、动画、图表、地图、排版、物理、图像编辑、数据可视化与导出:
|
|
18
18
|
|
|
19
19
|
- 创建文本、形状、几何图形与复杂图稿
|
|
20
20
|
- 用行为驱动的**关系(relations)**做动画,而不是逐帧关键帧
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-manager.d.ts","sourceRoot":"","sources":["../../src/agent/export-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EAEd,eAAe,EACf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAMpB;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc;IAI7C;;OAEG;IACH,aAAa,IAAI,QAAQ,EAAE;IAI3B;;OAEG;IACH,oBAAoB,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"export-manager.d.ts","sourceRoot":"","sources":["../../src/agent/export-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EAEd,eAAe,EACf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAMpB;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc;IAI7C;;OAEG;IACH,aAAa,IAAI,QAAQ,EAAE;IAI3B;;OAEG;IACH,oBAAoB,IAAI,MAAM;IA8G9B;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,oBAAoB,EAAE;IAqElE;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE;IA0BzD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,GAAG,YAAY;IAU7E;;OAEG;IACH,kBAAkB,CAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA;KAAO,GACxD,MAAM;IA4BT;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoC7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0C/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;CAWtD;AAQD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAKrD"}
|
|
@@ -112,14 +112,16 @@ export class SmartExportManager {
|
|
|
112
112
|
|
|
113
113
|
// Check for relations
|
|
114
114
|
if (app.relationRegistry) {
|
|
115
|
-
|
|
116
|
-
analysis
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
115
|
+
// getAll() has never existed on the registry, so this always took the
|
|
116
|
+
// empty fallback and every analysis reported NO relations. getStats() is
|
|
117
|
+
// the real accessor and answers both questions: associationsByType is
|
|
118
|
+
// keyed by relation type, and activeItems counts the items carrying one.
|
|
119
|
+
const relStats = typeof app.relationRegistry.getStats === 'function'
|
|
120
|
+
? app.relationRegistry.getStats()
|
|
121
|
+
: null;
|
|
122
|
+
Object.keys((relStats && relStats.associationsByType) || {}).forEach(t => relationSet.add(t));
|
|
122
123
|
analysis.relationTypes = Array.from(relationSet);
|
|
124
|
+
analysis.hasRelations = !!relStats && (relStats.activeItems > 0 || analysis.relationTypes.length > 0);
|
|
123
125
|
|
|
124
126
|
// Relations imply animations
|
|
125
127
|
if (analysis.hasRelations) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-manager.js","sourceRoot":"","sources":["../../src/agent/export-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,SAAS,CAAC,QAAkB;QAC1B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAe,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO
|
|
1
|
+
{"version":3,"file":"export-manager.js","sourceRoot":"","sources":["../../src/agent/export-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,SAAS,CAAC,QAAkB;QAC1B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAe,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0GN,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAyB;QACvC,MAAM,eAAe,GAA2B,EAAE,CAAC;QAEnD,+BAA+B;QAC/B,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,mBAAmB;YACnB,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACpE,iDAAiD;gBACjD,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,4DAA4D;oBACpE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC7E,CAAC,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,WAAW;oBACrB,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,4DAA4D;iBACrE,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,kDAAkD;gBAClD,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,+CAA+C;iBACxD,CAAC,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,SAAS;oBACnB,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,6CAA6C;oBACrD,QAAQ,EAAE,CAAC,2BAA2B,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACjE,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,6CAA6C;iBACtD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,WAAW;oBACrB,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,mCAAmC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;YAChE,eAAe,CAAC,IAAI,CAAC;gBACnB,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,oCAAoC;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAyB;QAC1C,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC9C,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;QAEnC,iBAAiB;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QAED,0BAA0B;QAC1B,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAED,4BAA4B;QAC5B,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACxE,CAAC;QAED,0BAA0B;QAC1B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAkB,EAAE,QAAyB;QAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,QAAwB,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC,OAAO,CAAC,MAAsB,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,QAAkB,EAClB,MAAoB,EACpB,UAAuD,EAAE;QAEzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC;QAE9C,uBAAuB;QACvB,MAAM,eAAe,GAAG;YACtB,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;YAC7C,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;YAClD,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;SAC/C,CAAC,OAAO,CAAC,CAAC;QAEX,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtC,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACzD,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;YACtF,KAAK,KAAK,CAAC;YACX,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACtF,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACzD;gBACE,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,OAAO;;;;;;;;;;;;;;KAcN,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,GAAW;QACvC,OAAO;;;;;gFAKqE,GAAG;8DACrB,GAAG;;;;;;aAMpD,GAAG;;;;;;;;;;;;;;;KAeX,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,GAAW,EAAE,QAAgB;QACzD,OAAO;;;;;;;;4EAQiE,GAAG;;;+EAGA,GAAG;;;;;;;;;;;;;;;;;;;;;KAqB7E,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,MAAsB,EACtB,GAAW,EACX,WAA8C;QAE9C,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QAE/D,OAAO;;;uCAG4B,MAAM,CAAC,WAAW,EAAE;;;;;+DAKI,MAAM,aAAa,GAAG;;;oEAGjB,MAAM,WAAW,GAAG;;;;uCAIjD,MAAM,CAAC,WAAW,EAAE;;;;;;;;mBAQxC,MAAM;;qBAEJ,QAAQ;;;;;;;KAOxB,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,GAAW;QACvC,OAAO;;;;;;;WAOA,GAAG;;;;;;;;;;;;;eAaC,GAAG;;;;;;KAMb,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,QAAkB;QAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO;yBACc,QAAQ;;WAEtB,MAAM,CAAC,UAAU,CAAC,KAAK;YACtB,MAAM,CAAC,UAAU,CAAC,MAAM;;+BAEL,QAAQ,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;KACrF,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;CACF;AAED,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,IAAI,qBAAqB,GAA8B,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC"}
|
|
@@ -5,11 +5,6 @@
|
|
|
5
5
|
* Repository info: 200,000+ icons from various icon sets with different licenses
|
|
6
6
|
*/
|
|
7
7
|
import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Iconify adapter
|
|
10
|
-
*
|
|
11
|
-
* Uses the Iconify API to search and download icons from multiple icon sets
|
|
12
|
-
*/
|
|
13
8
|
export declare class IconifyAdapter implements AssetRepository {
|
|
14
9
|
name: string;
|
|
15
10
|
private apiUrl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAoCxF,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoDlE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C1D;;OAEG;IACH,OAAO,CAAC,YAAY;CAqErB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Uses the Iconify API to search and download icons from multiple icon sets
|
|
11
11
|
*/
|
|
12
|
+
/** Iconify gives a collection author as a string OR {name, url}. */
|
|
13
|
+
function authorName(author) {
|
|
14
|
+
if (!author)
|
|
15
|
+
return undefined;
|
|
16
|
+
return typeof author === 'string' ? author : author.name;
|
|
17
|
+
}
|
|
12
18
|
export class IconifyAdapter {
|
|
13
19
|
name = 'iconify';
|
|
14
20
|
apiUrl = 'https://api.iconify.design';
|
|
@@ -51,7 +57,7 @@ export class IconifyAdapter {
|
|
|
51
57
|
downloadUrl: `https://api.iconify.design/${iconName}.svg`,
|
|
52
58
|
license,
|
|
53
59
|
tags: [query, collection],
|
|
54
|
-
author: collectionInfo?.author,
|
|
60
|
+
author: authorName(collectionInfo?.author),
|
|
55
61
|
});
|
|
56
62
|
}
|
|
57
63
|
return results;
|
|
@@ -131,8 +137,8 @@ export class IconifyAdapter {
|
|
|
131
137
|
repository: this.name,
|
|
132
138
|
title: assetId.replace('iconify_', ''),
|
|
133
139
|
license: {
|
|
134
|
-
type: '
|
|
135
|
-
name: '
|
|
140
|
+
type: 'Unknown',
|
|
141
|
+
name: 'not read — check the icon set on iconify.design before relying on it',
|
|
136
142
|
requiresAttribution: true,
|
|
137
143
|
allowsCommercial: false,
|
|
138
144
|
},
|
|
@@ -144,9 +150,15 @@ export class IconifyAdapter {
|
|
|
144
150
|
*/
|
|
145
151
|
parseLicense(collectionInfo) {
|
|
146
152
|
if (!collectionInfo?.license) {
|
|
153
|
+
// NOT KNOWING IS NOT THE SAME AS "MIXED".
|
|
154
|
+
//
|
|
155
|
+
// This reported "Various Licenses" with allowsCommercial: false for an
|
|
156
|
+
// icon whose collection is Apache-2.0 — two assertions about a licence
|
|
157
|
+
// it had simply failed to read. An unknown licence should say it is
|
|
158
|
+
// unknown and name where to check.
|
|
147
159
|
return {
|
|
148
|
-
type: '
|
|
149
|
-
name: '
|
|
160
|
+
type: 'Unknown',
|
|
161
|
+
name: 'not read — check the icon set on iconify.design before relying on it',
|
|
150
162
|
requiresAttribution: true,
|
|
151
163
|
allowsCommercial: false,
|
|
152
164
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"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"}
|