# Skill: Archive story

For history, art, culture and "the story behind…" clips: public-domain images from museum and archive
collections, each held for 3–4 seconds with a slow push-in, so the pictures carry the story while the
narration runs underneath.

**Price:** 120–135 credits per finished minute · 30 seconds ≈ 62–72 credits
**Uses:** `/v1/stock/search` · `/v1/stock/save` · `/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 gently, then transcribe

```jsonc
POST /v1/studio/remove-silence
{ "video_url": "<source>", "language_code": "he", "min_pause_ms": 600, "padding_ms": 120,
  "remove_fillers": false, "output": { "resolution": "source", "aspect_ratio": "original", "quality": "high" } }
```

Storytelling needs its pauses. Cut only real dead air.

## 2. Find the pictures

```
GET /v1/stock/search?q=ancient%20map%20jerusalem&kind=image&limit=8&source=met-museum
GET /v1/stock/search?q=first%20telephone&kind=image&limit=8&attribution=not-required
```

`source=met-museum` is the Metropolitan Museum: CC0, no credit needed, excellent for art and objects.
Wikimedia covers everything else — there, prefer results whose `license` says public domain, or keep the
credit line. Aim for one picture per 6–10 seconds of narration.

Save each one: `POST /v1/stock/save { "url": "…" }`.

## 3. Render

```jsonc
POST /v1/studio/edit
{
  "video_url": "<cut url>",
  "transcript_id": "<id>",
  "captions": { "style": { "font": "Assistant", "weight": 700, "size": 5.2, "color": "#FFFFFF",
    "outline": 0, "shadow": 7, "background": "#00000080", "animation": "fade",
    "max_words": 7, "max_lines": 2, "position": "bottom", "margin": 14, "side_margin": 8 } },
  "hook": { "text": "<the question the story answers>", "duration": 4.0,
    "style": { "preset": "clean", "font": "Assistant", "weight": 700, "size": 4.8, "margin": 9 } },
  "overlays": [
    { "url": "<saved image>", "type": "image", "start": 5.0, "duration": 3.6, "mode": "full", "fade_ms": 400 },
    { "url": "<saved image>", "type": "image", "start": 13.0, "duration": 3.6, "mode": "full", "fade_ms": 400 }
  ],
  "zoom": [
    { "start": 5.0, "end": 8.6, "to": 1.12, "ease": "smooth" },
    { "start": 13.0, "end": 16.6, "to": 1.12, "ease": "smooth" }
  ],
  "color": { "preset": "warm", "vignette": 0.25 },
  "texts": [
    { "text": "המוזיאון המטרופוליטן · נחלת הכלל", "start": 5.0, "duration": 3.6, "preset": "small", "style": { "y": 93 } }
  ],
  "audio": { "normalize": true },
  "output": { "aspect_ratio": "9:16", "resolution": "1080", "fit": "crop", "quality": "high" }
}
```

Long fades (400 ms) and a zoom on every picture are what separate this from a slideshow. A warm grade with a
light vignette makes archive material sit together even when the sources do not match.

## 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.
