# Aio Epub Export

> Pack a translated EPUB into a downloadable file — bilingual (original + translation side-by-side) or translation-only output. Use when the user wants to export/xuất sách, đóng gói sách, generate an EPUB file, download a finished book, or send a translation to Kindle.

- Skill: `aiocean/aio-epub-export` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aiocean/aio-epub-export`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aiocean/aio-epub-export/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: aiocean (https://skillmd.com/u/aiocean)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aiocean/aio-epub-export

---


# EPUB Export — Pack & Download

Pack translated books back into EPUB format for reading or distribution.

> **Trước khi xuất**: Chạy `aio-epub-quality` để kiểm tra chất lượng. Chapters chưa dịch xong? Dùng `aio-epub-translate`.

## API Setup

```python
import json, urllib.request, os

BASE = "https://read-api.aiocean.dev/ListBooks.v1.BookService"
KEY = os.environ.get("AIO_EPUB_API_KEY", "")

def api(method, body):
    data = json.dumps(body).encode('utf-8')
    req = urllib.request.Request(f"{BASE}/{method}", data=data, headers={
        "Content-Type": "application/json",
        "X-License-Key": KEY
    })
    with urllib.request.urlopen(req) as resp:
        return json.loads(resp.read())
```

## Workflow

### 1. Check Translation Status First

```python
progress = api("GetTranslationProgress", {"bookId": BOOK_ID})
pct = progress["progress"]["translationPercentage"]
print(f"Translation progress: {pct:.1f}%")

if pct < 100:
    untranslated = []
    for fp in progress["progress"].get("fileProgress", []):
        if fp["translationPercentage"] < 100:
            untranslated.append(f"  {fp['filePath']}: {fp['translationPercentage']:.0f}%")
    print(f"\nWarning: {len(untranslated)} chapters incomplete:")
    print("\n".join(untranslated))
```

### 2. Pack EPUB

```python
# Bilingual (original + translation side by side)
result = api("PackEpub", {
    "bookId": BOOK_ID,
    "packMode": "BILINGUAL"
})
print(f"EPUB URL: {result['epubUrl']}")
print(f"Message: {result['message']}")

# Translation only (remove original text)
result = api("PackEpub", {
    "bookId": BOOK_ID,
    "packMode": "TRANSLATION_ONLY",
    "stripMarkers": True  # remove data-* attributes for clean output
})
print(f"EPUB URL: {result['epubUrl']}")
```

### 3. Send to Kindle

```python
result = api("SendToKindle", {
    "bookId": BOOK_ID,
    "name": "My Book",
    "email": "your-kindle@kindle.com"
})
print(result["message"])
```

## Pack Modes

| Mode | Description | Use Case |
|------|-------------|----------|
| `BILINGUAL` | Original + translation paragraphs | Learning, reference |
| `TRANSLATION_ONLY` | Only translated text | Reading, distribution |

### Strip Markers Option

When `stripMarkers: true` with `TRANSLATION_ONLY` mode:
- Removes all `data-content-id`, `data-translation-id`, `data-translation-by-id` attributes
- Produces clean HTML suitable for publishing
- Recommended for final export

## Điều hướng

| Tình huống | Dùng skill |
|-----------|------------|
| Có chapters chưa dịch | `aio-epub-translate` |
| Muốn kiểm tra chất lượng trước khi xuất | `aio-epub-quality` |
| Xem tiến độ tổng thể | `aio-epub-manage` |
| Upload sách mới | `aio-epub-upload` |

**Workflow**: `aio-epub-setup` → `aio-epub-upload` → `aio-epub-translate` → `aio-epub-quality` → **`aio-epub-export`**

