carouselbot 0.3.5 → 0.3.6

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.
@@ -23,7 +23,7 @@ Read this before creating or editing slides. Use it as a compact quality bar, th
23
23
  - Use rotation sparingly. Small intentional angles can add energy; arbitrary angles make carousels feel inconsistent.
24
24
  - Reuse a small palette and consistent type scale across the project.
25
25
  - For an installed Mac font, select an exact face with `list_local_fonts`, import its opaque ID with `import_font`, and apply only the returned project `fontId`. Reuse project faces through `list_project_fonts`; never guess family strings.
26
- - Use `fontWeight` (or the matching `wght` axis) for variable weight. Do not newly apply `wdth`, `opsz`, `slnt`, or custom axes until exported-canvas parity is available.
26
+ - Use numeric `fontWeight`, including 550 or 725, for variable weight. Built-in TikTok Sans supports 100–900; imported variable faces use their wght range. Static fonts select an exact matching imported family face or report FONT_FACE_MISMATCH; they cannot interpolate arbitrary weights. `inspect_editor` reports effectiveFontWeight and supportedWeights for each text layer. Check every title and body layer separately. Do not newly apply `wdth`, `opsz`, `slnt`, or custom axes until exported-canvas parity is available.
27
27
  - Keep ordinary typography as editable text layers, including typography that uses an imported font. Never generate or import a text-only PNG/SVG and place it with `add_image` just to imitate a font. If the requested face cannot be imported, keep the copy editable in an available face and report the substitution instead of baking the words into pixels.
28
28
 
29
29
  ## Working method
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carouselbot",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Local-first MCP companion for the hosted CarouselBot editor",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -57,7 +57,7 @@ When the user asks for a font installed on their Mac, use the deterministic two-
57
57
 
58
58
  If listing returns `FONT_PERMISSION_REQUIRED`, ask the user to open the real CarouselBot tab and choose **Allow local fonts** from the text font control, then retry. Do not bypass this with browser automation. Font paths and bytes are intentionally unavailable to agents. If rendering reports `FONT_UNAVAILABLE`, preserve the editable text, report the missing face, and ask the user to replace or re-import it rather than accepting fallback pixels.
59
59
 
60
- Use `fontWeight` or `fontVariationSettings.wght` when varying an imported face. Preserve existing non-weight variable settings, but do not newly apply `wdth`, `opsz`, `slnt`, or custom axes until CarouselBot advertises exact exported-canvas parity for them.
60
+ Use numeric `fontWeight` or `fontVariationSettings.wght` when varying a face, including intermediate values such as 550 and 725. Built-in TikTok Sans supports 100–900; imported variable fonts use their wght range. For static fonts the editor automatically selects a matching imported family face, otherwise returns FONT_FACE_MISMATCH. Inspect effectiveFontWeight and supportedWeights; do not infer a visual change from the requested number alone. Titles and body copy are independent layers: inspect and update all requested layers. Preserve existing non-weight variable settings, but do not newly apply `wdth`, `opsz`, `slnt`, or custom axes until CarouselBot advertises exact exported-canvas parity for them.
61
61
 
62
62
  All ordinary words must remain CarouselBot text layers, including words styled with a local font. Never generate or import a text-only PNG/SVG and place it as an image merely to imitate a font. If an exact face cannot be listed, imported, or rendered, keep the copy editable in an available face and tell the user what was substituted. Use image layers only for photographs, illustrations, logos, screenshots, and deliberate artwork that CarouselBot cannot represent as editable layers.
63
63
 
@@ -41,7 +41,7 @@ const textFields = {
41
41
  color: color.optional(), background: z.enum(["white", "black"]).optional(),
42
42
  backgroundShape: z.enum(["lines", "full"]).optional(), align: z.enum(["left", "center", "right"]).optional(),
43
43
  fontId,
44
- fontWeight: z.number().int().min(1).max(1000).optional(),
44
+ fontWeight: z.number().int().min(1).max(1000).optional().describe("Numeric weight, including intermediate values such as 550 or 725. Variable fonts clamp to their wght range; built-in TikTok Sans supports 100–900. Static fonts automatically select a matching imported family face; unavailable weights return FONT_FACE_MISMATCH. Changing body text does not change separate title layers."),
45
45
  fontStyle: z.enum(["normal", "italic"]).optional(),
46
46
  fontVariationSettings: z.record(z.string().regex(/^[A-Za-z0-9]{4}$/), z.number()).optional()
47
47
  .describe("Variable-font axis settings. Only wght currently has guaranteed DOM, fitting, and exported-canvas parity; preserve but do not newly apply other axes."),