# Create audio-only HLS streams

Package audio content as adaptive HLS for streaming playback

Long audio files as a single download are slow to start and waste bandwidth when listeners skip ahead. "Wavelength" (a podcast and music platform like Spotify) packages audio as HLS so playback starts instantly and seeks are efficient.

## API

<CodeGroup labels={["CLI", "TypeScript", "Python", "curl"]}>
```bash
ittybit adaptive \
  -i https://wavelength-app.com/episodes/ep-87.wav \
  --format hls
```

```typescript
const task = {
  input: 'https://wavelength-app.com/episodes/ep-87.wav',
  kind: 'adaptive_video',
  options: {
    format: 'hls',
  },
};

const res = await fetch('https://api.ittybit.com/jobs', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.ITTYBIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(task),
});
const data = await res.json();
```

```python

task = {
    "input": "https://wavelength-app.com/episodes/ep-87.wav",
    "kind": "adaptive_video",
    "options": {
        "format": "hls",
    },
}

res = requests.post(
    "https://api.ittybit.com/jobs",
    headers={"Authorization": f"Bearer {api_key}"},
    json=task,
)
data = res.json()
```

```bash
TASK='{
  "input": "https://wavelength-app.com/episodes/ep-87.wav",
  "kind": "adaptive_video",
  "options": {
    "format": "hls"
  }
}'

curl -X POST https://api.ittybit.com/jobs \
  -H "Authorization: Bearer $ITTYBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$TASK"
```

</CodeGroup>

When the input has no video track, the output is an audio-only HLS package with segmented AAC and an `.m3u8` manifest. The `kind` stays `adaptive_video` because HLS packaging is the same process regardless of whether video tracks are present.

## CLI

```bash
ittybit adaptive \
  -i ep-87.wav \
  -o ep-87.m3u8
```

## From video input

Extract audio-only HLS from a video file by disabling the video track:

```bash
ittybit adaptive \
  -i interview-raw.mp4 \
  -o interview-audio.m3u8 \
  --mute-video
```

Useful when the video is just a static recording screen and only the audio matters.

## Multiple bitrates

Provide quality variants so the player adapts to bandwidth. This matters for listeners on cellular connections:

```json
{
  "input": "https://wavelength-app.com/episodes/ep-87.wav",
  "kind": "adaptive_video",
  "options": {
    "format": "hls",
    "audio_bitrates": [64, 128, 256]
  }
}
```

| Bitrate (kbps) | Use case                   |
| -------------- | -------------------------- |
| 64             | Low bandwidth, spoken word |
| 128            | Standard podcast quality   |
| 256            | Music, high-fidelity audio |

## When HLS beats a single file

| Scenario            | Best format                                   |
| ------------------- | --------------------------------------------- |
| Episodes > 10 min   | HLS -- instant start, efficient seeking       |
| Short clips < 2 min | Single MP3/AAC -- simpler, fewer requests     |
| Offline / download  | Single file -- no manifest needed             |
| Adaptive bandwidth  | HLS -- player switches bitrates automatically |

For a podcast platform serving hour-long episodes, HLS eliminates the wait for a full file download before playback begins.