codeck-export

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

codeck export

codeck 导出

Minimum conversation, maximum output. Export the deck to the user's format.
尽量减少对话,优先输出结果。将幻灯片导出为用户需要的格式。

Step 1: Status

步骤1:状态检查

bash
DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
mkdir -p "$DECK_DIR"
bash "$HOME/.claude/skills/codeck/scripts/status.sh" "$DECK_DIR"
Gate check: if no assembled HTML exists (
./*-r*.html
), suggest running
/codeck-design
first.
bash
DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
mkdir -p "$DECK_DIR"
bash "$HOME/.claude/skills/codeck/scripts/status.sh" "$DECK_DIR"
门槛检查:如果不存在已组装的HTML文件(
./*-r*.html
),建议先运行
/codeck-design

Step 2: Format

步骤2:选择格式

  • A) HTML — open in browser, press F for fullscreen, arrow keys to navigate. Zero dependencies. (recommended)
  • B) PDF — email attachments, printing
  • C) PPTX — corporate requirements
  • D) All
  • A) HTML — 在浏览器中打开,按F键全屏,方向键导航。零依赖。(推荐)
  • B) PDF — 适合邮件附件、打印场景
  • C) PPTX — 适合企业要求场景
  • D) 全部格式

Step 3: Export

步骤3:执行导出

Find the HTML file (
./*-r*.html
in the user's project directory), derive baseName.
找到HTML文件(用户项目目录下的
./*-r*.html
),提取基础文件名baseName。

HTML

HTML

Already exists. Open in browser, F for fullscreen, arrows to navigate.
已存在。在浏览器中打开,按F全屏,方向键导航即可。

PDF — print from HTML

PDF — 从HTML打印导出

Use Playwright for WYSIWYG PDF:
bash
npx playwright install chromium 2>/dev/null || true
javascript
import { chromium } from 'playwright';
import { resolve } from 'path';
import { readdirSync } from 'fs';
import { pathToFileURL } from 'url';

const html = readdirSync('.').find(f => /-r\d+\.html$/.test(f));
const baseName = html.replace('.html', '');
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(pathToFileURL(resolve(html)).toString(), { waitUntil: 'networkidle' });
await page.emulateMedia({ media: 'screen' });
await page.pdf({
  path: `${baseName}.pdf`,
  printBackground: true,
  preferCSSPageSize: true,
  margin: { top: '12mm', right: '12mm', bottom: '12mm', left: '12mm' }
});
await browser.close();
console.log(`done: ${baseName}.pdf`);
使用Playwright生成所见即所得的PDF:
bash
npx playwright install chromium 2>/dev/null || true
javascript
import { chromium } from 'playwright';
import { resolve } from 'path';
import { readdirSync } from 'fs';
import { pathToFileURL } from 'url';

const html = readdirSync('.').find(f => /-r\d+\.html$/.test(f));
const baseName = html.replace('.html', '');
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(pathToFileURL(resolve(html)).toString(), { waitUntil: 'networkidle' });
await page.emulateMedia({ media: 'screen' });
await page.pdf({
  path: `${baseName}.pdf`,
  printBackground: true,
  preferCSSPageSize: true,
  margin: { top: '12mm', right: '12mm', bottom: '12mm', left: '12mm' }
});
await browser.close();
console.log(`done: ${baseName}.pdf`);

Poster assets

海报资源

.media-poster
elements in slides.html are video/audio placeholders. Original file paths are in the caption and outline.md asset manifest.
Default: keep placeholders in export. If user says "embed video", extract path from caption, use
slide.addMedia({ path: "..." })
for PPTX.
slides.html中的
.media-poster
元素是视频/音频占位符。原始文件路径存储在标题和outline.md资源清单中。
默认规则:导出时保留占位符。如果用户要求「embed video」,则从标题中提取路径,在生成PPTX时使用
slide.addMedia({ path: "..." })
方法。

PPTX — from HTML

PPTX — 从HTML导出

Option A (recommended): LibreOffice
bash
EXPORT_SCRIPTS="$HOME/.claude/skills/codeck-export/pptx/scripts"
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pdf ./*-r*.html
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pptx ./*-r*.html
Option B (fallback): screenshot embed
If soffice unavailable, use Playwright to screenshot each page, then PptxGenJS to embed screenshots as slides. Read
export/pptx/pptxgenjs.md
for the API.
选项A(推荐):LibreOffice
bash
EXPORT_SCRIPTS="$HOME/.claude/skills/codeck-export/pptx/scripts"
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pdf ./*-r*.html
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pptx ./*-r*.html
选项B(降级方案):嵌入截图
如果soffice不可用,使用Playwright对每页截图,再用PptxGenJS将截图嵌入为幻灯片。API说明请查阅
export/pptx/pptxgenjs.md

Step 4: QA (required for PDF/PPTX)

步骤4:质检(PDF/PPTX导出必填)

Assume the export has problems. Find them.
默认假设导出结果存在问题,务必排查问题。

PDF

PDF

Check: pages complete (no truncation), backgrounds render, fonts display correctly.
检查项:页面完整(无截断)、背景渲染正常、字体显示正确。

PPTX

PPTX

Generate thumbnails:
bash
EXPORT_SCRIPTS="$HOME/.claude/skills/codeck-export/pptx/scripts"
python "$EXPORT_SCRIPTS/thumbnail.py" ./*-r*.pptx
Convert to images for detailed check:
bash
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pdf ./*-r*.pptx
pdftoppm -jpeg -r 150 *.pdf slide-check
Use subagent to visually inspect screenshots. Focus on: overlapping elements, text overflow, uneven spacing, low-contrast text, differences from HTML original.
生成缩略图:
bash
EXPORT_SCRIPTS="$HOME/.claude/skills/codeck-export/pptx/scripts"
python "$EXPORT_SCRIPTS/thumbnail.py" ./*-r*.pptx
转换为图片进行详细检查:
bash
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pdf ./*-r*.pptx
pdftoppm -jpeg -r 150 *.pdf slide-check
使用子Agent对截图进行视觉检查。重点关注:元素重叠、文本溢出、间距不均、文本对比度低、与原始HTML存在差异等问题。

Fix loop

修复循环

  1. Find issue → adjust export params or HTML
  2. Re-export → re-screenshot → re-check
  3. Until one full check finds no new issues
At least one fix-verify cycle before declaring done.
  1. 发现问题 → 调整导出参数或HTML
  2. 重新导出 → 重新截图 → 重新检查
  3. 直到一次完整检查未发现新问题为止
宣布导出完成前,至少执行一次修复-验证循环。

Step 5: Done

步骤5:完成

Export done. Output:
{baseName}.pdf
/
{baseName}.pptx
Need a speech script?
/codeck-speech
. Otherwise you're done — run
/codeck
anytime for an overview.
导出完成。输出文件:
{baseName}.pdf
/
{baseName}.pptx
需要演讲稿?运行
/codeck-speech
。否则任务已完成 —— 随时运行
/codeck
可查看概览。