# Skill: Icon explainer

For a list, a process or a comparison: every step gets an icon card and a short label, so a viewer who
joined halfway still knows where they are. The icons come from open-source sets and are free.

**Price:** 120–140 credits per finished minute · 30 seconds ≈ 62–75 credits
**Uses:** `/v1/stock/search` · `/v1/stock/icon` · `/v1/studio/remove-silence` · `/v1/studio/edit` — nothing is generated by a model.

Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <key>` · Docs: `/docs`
Put the same `X-Tag: <job>` on every call; `GET /v1/usage?tag=<job>` then prints the bill.

---

## 1. Cut and transcribe

As in any skill: `POST /v1/studio/remove-silence` (`min_pause_ms: 400`, `padding_ms: 80`), then
`POST /v1/speech/transcripts` and `GET /v1/speech/transcripts/{id}/sentences`.

## 2. Find the steps

From the transcript, pull the 3–6 points the speaker actually enumerates ("first… then… and the last
thing"). Each becomes: an icon, a 2–4 word Hebrew label, and a moment.

## 3. Icons → PNG

```
GET /v1/stock/search?q=rocket&kind=icon&limit=6
POST /v1/stock/icon { "icon": "mdi:rocket-launch", "color": "#111111", "size": 512, "background": "#FFE600", "padding": 16 }
```

The search gives ids like `mdi:rocket-launch` with the set's licence; `/v1/stock/icon` returns a
transparent PNG our renderer can use (an SVG cannot go into a video). Keep one colour scheme for all the
icons in a video — mixing sets looks accidental. Most sets (Material Symbols, MDI, Tabler, Lucide) are MIT
or Apache and need no credit; the search says so per icon.

## 4. Render

```jsonc
POST /v1/studio/edit
{
  "video_url": "<cut url>",
  "transcript_id": "<id>",
  "captions": { "style": { "preset": "classic", "size": 6.6, "active_color": "#FFE600",
    "max_words": 4, "max_lines": 2, "position": "bottom", "margin": 16, "side_margin": 7 } },
  "hook": { "text": "<the promise, e.g. 5 טעויות שכולם עושים>", "duration": 3.5,
    "style": { "preset": "black", "font": "Rubik", "weight": 900, "size": 6.4, "margin": 11 } },
  "overlays": [
    { "url": "<icon png>", "type": "image", "start": 5.0, "duration": 2.4, "mode": "pip",
      "size": 26, "x": 76, "y": 22, "rotate": -4, "float": 1.2, "shadow": true, "fade_ms": 150 }
  ],
  "texts": [
    { "text": "1. לבחור פלטפורמה", "start": 5.0, "duration": 2.4, "preset": "pill", "style": { "y": 34, "x": 40 } }
  ],
  "audio": { "normalize": true },
  "output": { "aspect_ratio": "9:16", "resolution": "1080", "fit": "crop", "quality": "high" }
}
```

Put the icon and its label on the same seconds, on the same side, and keep every step in the same place on
screen — the repetition is what makes it read as a list. `GET /v1/studio/text-styles` lists the label looks.

## Licences — read this before you ship

`GET /v1/stock/search` returns, for every result: `license`, `attribution_required` and a ready
`attribution` line. Two ways to stay clean:

- **Easiest:** add `&attribution=not-required`. You then get only CC0 / public-domain / Pexels / Pixabay
  results, and nothing has to appear on screen.
- **Otherwise:** when `attribution_required` is true, put the credit on screen while the picture is up —
  a `texts` element, preset `small`, `y: 92`, same `start` and `duration` as the overlay. Keep the
  `page_url` in your records.

Never use a result whose licence you did not check. Sources are filtered to commercial use, but "commercial"
and "no credit needed" are not the same thing.

**How to read the price.** Renders are billed per second of output, so cutting and captioning scale with
length. Everything that is *generated* — an image, a clip, a music track — is billed per asset, no matter how
long the video is. That is why half a minute is not half the price: a 30-second video with the same four
images and one music track costs nearly what a 60-second one costs. Real numbers, not estimates, come from
`GET /v1/usage?tag=<your tag>` after the job.
