# Skill: effect/icon-tiles — "אריחי אייקונים" (Icon tiles)

Small tiles build one per spoken noun, each line icon drawing itself in, a label under it.
אריחים קטנים נבנים אחד לכל מילה שנאמרת, כל אייקון קו מצייר את עצמו ותווית מתחתיו.

Category: Overlays & graphics · שכבות וגרפיקה · a real preview: https://media.gpt.org.il/lookbook/effects/icon-tiles.mp4?v=mv19exzc
Price: **60 credits per finished minute**: the render itself — 1 credit per second of 1080p output. Combined with captions, a hook or other effects: still one render, nothing more for combining.

Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <API key>` · Docs: `/docs` (group "Video Effects")
Send `X-Tag: <job name>` on every call of one video; `GET /v1/usage?tag=<job name>` returns what it cost.
**Files are kept 24 hours** — download the finished video.

---

## 1. On its own — one call

```jsonc
POST /v1/effects/icon-tiles             // x-wait-ms: 110000
{
  "video_url": "https://media.gpt.org.il/samples/sample-he.mp4",
  "start": 0.3,
  "duration": 3.6,
  "params": {
    "y": 12,
    "tile_size": 16,
    "stagger_ms": 750
  }
}
```

A normal render: `status: processing` → poll `GET /v1/executions/{id}` until `completed`, then read `output.url`.

When it plays: a stretch: `start` + `duration` (seconds of the finished video), or `at` (a word id) + `duration`, or `during` { from, to } (word ids).

## 2. With captions, a hook and other effects — the same render

```jsonc
POST /v1/studio/edit               // x-wait-ms: 110000
{
  "video_url": "<the video>",
  "language_code": "he",
  "captions": {
    "style": "classic"
  },
  "effects": [
    {
      "id": "icon-tiles",
      "params": {
        "y": 12,
        "tile_size": 16,
        "stagger_ms": 750
      },
      "start": 0.3,
      "duration": 3.6
    }
  ],
  "audio": {
    "normalize": true
  },
  "output": {
    "aspect_ratio": "9:16",
    "resolution": "1080",
    "fit": "crop",
    "quality": "high"
  }
}
```

`effects` is a list: add more entries for more effects. The engine applies them by pipeline stage (cuts and time →
camera → grade and looks → overlays → text and captions → sound), never by their order in the list. An edit has one
`transition`, one `color` grade, one `music` bed, one `speed` and one caption style: two effects that set the same
one are refused with a message that names them.

## 3. Params

| param | default | range / options | what it does |
|---|---|---|---|
| `items` | `[{"icon":"chat","label":"כתוביות"},{"icon":"chart","label":"גרפיקות"},{"icon":"sparkle","label":"אפקטים"}]` | list | The tiles, in reading order |
| `tile_size` | `14` | 6–40 | Tile size, % of the frame width |
| `tile_color` | `"#0D203C"` | string | The tile |
| `label_color` | `"#FFFFFF"` | string | The labels |
| `stroke_color` | `"#8DC0D4"` | string | The line colour |
| `stroke` | `1.8` | 0.5–4 | Line weight in the icon's 24-unit grid (2 = a standard outline icon) |
| `glow` | `0` | 0–20 | A soft glow round the lines, px at 1080 wide (0 = none) |
| `layout` | `"arc"` | `arc` · `row` · `column` | arc = a row whose middle rises · row · column |
| `order` | `"reading"` | `reading` · `rtl` · `ltr` | Which side the first tile is on (reading = right for Hebrew labels) |
| `x` | `50` | 5–95 | The group's centre, % from the left |
| `y` | `13` | 5–95 | The group's height, % from the top |
| `stagger_ms` | `650` | 0–3000 | Between one tile and the next (items without a word), ms |
| `draw_ms` | `260` | 0–1500 | How long an icon takes to draw itself, ms |
| `placeholder` | `true` | boolean | A grey placeholder flashes before each tile |
| `exit` | `"grey"` | `grey` · `fade` · `none` | How they leave: turn grey, then go · fade · stay to the end |

GET `/v1/effects/icon-tiles` returns the same as JSON (with the full body schema). Every field has a default; numbers
outside their range are refused with the field's name.
