使用three.js创建立体模型,在交互式查看器中从各个角度检查形状和材质,并以OBJ + MTL或GLB格式保存,供其他三维制作软件使用。
- 创建立体模型并从各个角度检查
- 制作可在Blender中继续编辑的模型
- 检查模型轮廓和材质效果
按文档类型创建或处理 PDF,包括报告、海报和学术论文。可转换 Office、HTML 或 LaTeX 文件,提取文字、表格和图片,合并或拆分 PDF,并填写表单。
Professional PDF toolkit covering four production workflows: reports, creative visuals, academic LaTeX, and existing PDF processing. Routes automatically by document type and supports reports, posters, papers, resumes, extraction, merging, splitting, and form filling. Use this skill for any conversion whose output is a PDF: Office → PDF (.docx/.doc/.pptx/.ppt/.xlsx/.xls/.odt/.odp/.ods/.rtf/.csv/.txt → PDF), HTML → PDF, and LaTeX/.tex → PDF; also PDF → images, PDF → text, and PDF → tables when reading a PDF apart. Trigger when the user asks to convert, export, render, print, or turn a file into a PDF, or to merge/split/extract from one — including phrasings like 'Word转PDF', 'PPT转PDF', 'Excel转PDF', 'html转pdf', '导出为PDF', 'save/export as PDF', or 'PDF转图片/文字'.
实测评分 未实测
查看安装方法此技能会根据文档类型选择相应流程来创建或处理 PDF。它可以制作报告、提案、简历、海报和学术论文,也能将 Word、PowerPoint、Excel、HTML 或 LaTeX 文件转换为 PDF。对于已有 PDF,可以提取文字、表格和图片,合并或拆分文件,以及填写表单。还可以把 PDF 内容转换成图片、文字或表格,以便查看和提取。
需要将资料导出为 PDF,或按用途从头制作文档时,可以使用此技能。它涵盖学术论文和含公式的文档、需要设计排版的海报,以及整理或提取已有 PDF 内容等工作。文档采用特定页面尺寸,或包含日文、中文、韩文文字时,也会考虑字体和输出方式。
资料列出的许可证为 Proprietary。基本处理需要 Python 3、多个 PDF 软件包和 TrueType 中文字体。创意类输出可能需要 Playwright/Chromium,LaTeX 输出可能需要 Tectonic。技能资料要求安装这些可选工具前先询问用户。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月24日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
bash "$PDF_SKILL_DIR/scripts/setup.sh" # Interactive environment check + install
python3 "$PDF_SKILL_DIR/scripts/pdf.py" env.check # Detailed dependency status (JSON: add -j)
python3 "$PDF_SKILL_DIR/scripts/pdf.py" env.fix # Auto-install missing CORE Python packages
Core vs optional. Only the core deps are needed up front: Python 3 +
reportlab,pypdf,
PyMuPDF,pikepdf,pdfplumber, and a TrueType CJK font. These cover the Report route and all
covers (rendered with ReportLab). Playwright/Chromium (Creative/poster/HTML→PDF) and Tectonic
(Academic/LaTeX) are optional — do NOT install them at first run. Install them on demand, and
only after asking the user (they are large downloads / long first-run waits). See the per-route
preflight blocks inbriefs/creative.md,briefs/poster.md,briefs/process.md,briefs/academic.md.
Local-font-first. Inspect fonts available in the user's local environment and prefer a suitable
installed font. Use bundled or downloaded fonts only as fallbacks; do not install fonts without the
user's confirmation.
Determine task weight to control how much context to load:
| Weight | Triggers | What to Load |
|---|---|---|
| Light | Format conversion, form fill, text extract, merge/split, simple certificate | SKILL.md + briefs/process.md only |
| Standard | Multi-page report, poster, academic paper, resume, reformat - any document with design decisions | SKILL.md + matched brief + typesetting assets on demand |
Light tasks skip typesetting files entirely. Standard tasks load them on demand per the brief's instructions.
UniSong/UniHei registered fonts; Creative brief must load Google Fonts Noto Sans SC with font-display: swap; Academic brief must use \usepackage{ctex}.の→之/的/缔, 々→omit or write full character. If content must preserve Japanese, use only standard CJK Unified Ideographs (U+4E00-U+9FFF) and common kana; avoid rare/private-use codepoints.Match the user's intent to a production brief. Each brief contains the full workflow, tech stack specifics, and references to shared typesetting assets.
User Request
│
├─ Work with existing PDF? ─────────────┬─ Extract/merge/split/fill/convert → briefs/process.md
│ ├─ Reformat/redesign → briefs/process.md (extract) → delegate to report or creative brief
│ └─ User provides a PDF template/reference to match style
│ → briefs/process.md "Template-Guided Reformat" → delegate to matched brief
│
├─ Report / proposal / white paper / contract / analysis?
│ └─ ────────────────────────────────── → briefs/report.md (ReportLab)
│
├─ Poster / invitation / infographic / dashboard / creative layout?
│ └─ ────────────────────────────────── → briefs/creative.md (Playwright)
│
├─ Academic paper / thesis / math / IEEE / ACM / LaTeX?
│ └─ ────────────────────────────────── → briefs/academic.md (Tectonic)
│
├─ Math-heavy doc / TikZ diagram / algorithm pseudocode / Beamer slides?
│ └─ ────────────────────────────────── → briefs/academic.md (Tectonic, Scenarios A-D)
│
├─ Document needs complex embedded diagrams (flowcharts, architecture, neural nets)?
│ └─ Route by target brief:
│ ├─ Report → Playwright+CSS → PNG → ReportLab Image() flowable
│ ├─ Creative → directly in HTML (CSS flexbox/grid + connectors)
│ └─ Academic → complexity-based:
│ ├─ Simple (≤6 nodes, linear/tree) → TikZ native (vector)
│ └─ Complex (>6 nodes, branches, annotations) → Playwright+CSS → PNG → \includegraphics
│
└─ Resume / CV?
├─ ATS-safe / corporate ─────────── → briefs/report.md (resume sub-section)
├─ Creative / design industry ────── → briefs/creative.md (resume sub-section)
└─ Academic CV / publications ────── → briefs/academic.md (resume sub-section)
| Brief | Keywords |
|---|---|
| Report | 报告, report, 分析, analysis, 白皮书, white paper, 提案, proposal, 合同, contract, 方案, 规划, 发票, invoice, 收据, receipt, 试卷, exam, quiz, test paper, 练习, exercise, worksheet, 考试, 测验 |
| Creative | 海报, poster, 邀请函, invitation, 信息图, infographic, 仪表盘, dashboard, 传单, flyer, 证书, certificate, 菜单, menu, 名片, business card, 奖状, award, 标签, label, 信封, envelope, 贺卡, greeting card |
| Creative (Poster) | 海报, poster, 传单, flyer, 宣传页, 宣传单 → additionally load briefs/poster.md scene layer rules |
| Academic | 论文, paper, 学术, academic, LaTeX, 数学, math, IEEE, ACM, 毕业, thesis, 研究, research, Beamer, slides, 开题报告, 学位, dissertation, proposal |
| Process | 提取, extract, 合并, merge, 拆分, split, 填写, fill, 转换, convert, OCR, 重排, reformat, 重新排版, redesign, 模板, template, 参照, 照着这个做, match this style, 压缩, compress, 水印, watermark, 加密, encrypt, 签名, sign |
Below is an exhaustive map of every known PDF request type to its handling strategy. If a scenario is not listed, route to the closest match or ask the user.
| Scenario | Route | Notes |
|---|---|---|
| Report / white paper / analysis | report.md | ReportLab structured document |
| Report with emoji | creative.md | 🚨 Emoji rule override |
| Business proposal | report.md | Structured + data tables |
| Contract / legal document | report.md | Add signature placeholders (dotted line + label) |
| Invoice / receipt | report.md | Table-heavy, precision alignment |
| Exam / quiz / test paper / worksheet | report.md | Indented options, answer space reservation, structured numbering (see Exam Paper Rules in report.md) |
| Math exam / math worksheet (with formulas/equations) | academic.md | LaTeX for proper math typesetting. See §Exam Paper Rules in academic.md |
| Poster / flyer | creative.md + poster.md | Visual design + poster density/sizing rules |
| Invitation / greeting card | creative.md | Non-standard size, decorative |
| Certificate / award | creative.md | Single page, centered layout, decorative border |
| Business card | creative.md | Tiny size (90×54mm), Playwright native support |
| Envelope / label | creative.md | Non-standard size, simple layout |
| Menu / price list | creative.md | Visual layout + may contain emoji |
| Resume (ATS) | report.md | Plain text structure |
| Resume (creative) | creative.md | Visual design |
| Resume (academic CV) | academic.md | Publication list + BibTeX |
| Academic paper | academic.md | LaTeX/Tectonic |
| Math-heavy document | academic.md | LaTeX typesetting |
| Presentation / PPT-style | creative.md | Landscape (1280×720), one topic per page |
| Book / long document | report.md | Add TOC + chapter numbering, validate with toc_validate.py |
| CJK vertical text | creative.md | HTML writing-mode: vertical-rl + text-orientation: upright + white-space: nowrap + Playwright |
| RTL document (Arabic/Hebrew) | creative.md | HTML dir="rtl" + Playwright |
| Batch generation (mail merge) | report.md | Python loop + template variable substitution |
| Infographic | creative.md | Data visualization + design |
| Calendar / schedule | creative.md | Grid layout + custom dimensions |
| Scenario | Route | Command / Method |
|---|---|---|
| Merge multiple PDFs | process.md | pages.merge a.pdf b.pdf -o out.pdf |
| Split PDF | process.md | pages.split input.pdf -o ./output/ |
| Extract text | process.md | extract.text input.pdf |
| Extract tables | process.md | extract.table input.pdf |
| Extract images | process.md | extract.image input.pdf |
| Fill forms | process.md | form.fill input.pdf |
| Office → PDF | process.md | convert.office input.docx |
| HTML → PDF (documents) | process.md | convert.html input.html or node html2pdf-next.js |
| HTML → PDF (posters) | poster.md | node html2poster.js poster.html |
| Image → PDF | process.md | pikepdf: one image per page, embed as XObject |
| PDF → image | process-advanced.md | pypdfium2 render each page to PNG |
| Encrypt / decrypt | process-advanced.md | pikepdf encryption |
| Add watermark | process.md | pikepdf overlay: create watermark page → merge onto each page |
| Compress PDF | process.md | Ghostscript: gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen |
| OCR scanned PDF | process-advanced.md | ocrmypdf or Tesseract |
| Rotate pages | process.md | pages.rotate input.pdf 90 -o out.pdf |
| Crop pages | process.md | pages.crop input.pdf l,b,r,t -o out.pdf |
| Remove blank pages | process.md | pages.clean input.pdf |
| Reformat by template | process.md → delegate | Extract content → regenerate via report/creative |
| PDF diff / compare | process.md | diff-pdf CLI or Python per-page text comparison |
| Digital signature | process.md | pyhanko library (requires extra install) |
| Edit metadata | process.md | meta.set input.pdf -o out.pdf -d '{...}' |
🚨 Emoji rule (CRITICAL - check FIRST): Content with intentional emoji (📊🎯🔥💡 etc.) → force briefs/creative.md regardless of document type. ReportLab renders emoji as □ squares; LaTeX silently drops them. This rule overrides all other routing. Even if the user says "report" - if the content has emoji, use Creative pipeline.
Non-standard page size rule: Dimensions other than A4/Letter/A3 → strongly prefer briefs/creative.md. Playwright handles any arbitrary page size natively. ReportLab requires manual pagination math.
Academic auto-detect: Papers, theses, or heavy math → briefs/academic.md even without explicit "LaTeX" mention.
Template-guided rule: When the user uploads a PDF and says "match this template" / "follow this style" / "reformat like this" → briefs/process.md Template-Guided Reformat section. This is a Standard triage (not Light), because it involves design decisions.
Resume routing: Default to Report brief (ATS-safe). Creative industry → Creative brief. Academic CV with publications → Academic brief.
These are referenced by multiple briefs. Do not load upfront - each brief tells you when and what to load.
| Asset | Path | Used By | Purpose |
|---|---|---|---|
| Palette & Typography | typesetting/palette.md | Report, Creative | Color system, font rules, anti-patterns, spacing |
| Cover Engine V4.0 | typesetting/cover.md | Report + Academic | 9 ReportLab templates (01–05 report/light, 06–08 academic/dark, 09 institutional), absolute anchor grid, layer order, typography weight system, mandatory Summary block, host-detected style-driven fonts. Pure ReportLab via scripts/cover_render.py — no HTML/Playwright. (Creative composes its cover inside its own HTML.) |
| Chart Styling & Anti-Stacking | typesetting/charts.md | Report, Creative, Academic | Chart defaults, collision prevention, axis/grid/legend rules |
| Overflow Prevention | typesetting/overflow.md | Report, Creative, Academic | Bounding box system, text/image/table overflow prevention, fallback strategies |
| Fill Engine (Anti-Void) | typesetting/fill-engine.md | Report, Creative, Academic | Anti-Void Engine V2.0: font floor enforcement, fill ratio calculation, paragraph inflation, component elevation, Y-axis golden-ratio anchoring |
| Pagination & Flow Control | typesetting/pagination.md | Report, Creative | Cross-page integrity, orphan/widow control, CJK punctuation rules |
| Typography System | typesetting/typography.md | Report, Creative | Font size scale, line-height, spacing hierarchy |
| Geometric Anchors | typesetting/geometry.md | Creative + Report | Decorative geometric elements, anchor placement rules |
| Cover Backgrounds | typesetting/cover-backgrounds.md | Report + Creative + Academic | Cover background rendering, transparency constraints |
| Visual Framework | configs/visual_framework.md | Creative | Palette mode, color harmony, SVG background params |
| Components Library | configs/components.md | Creative | Non-grid composition components (floating cards, oversized text, etc.) |
| Font Stacks | configs/fonts.md | All pipelines | Font families per pipeline (Google Fonts, ReportLab, LaTeX) |
<stem>_updated.pdf next to the input); edit an original in place only when the user explicitly asks — and then copy it to <stem>_backup.pdf next to it (never /tmp) first. Every -o target must be a new path; never pass the input path to -o. See briefs/process.md.When embedding images in HTML documents (Creative pipeline, Playwright-rendered diagrams, or any HTML→PDF flow):
| Image location | <img src> value | Example |
|---|---|---|
| Local file | Relative path from the HTML file's directory | <img src="images/chart.png"> or <img src="./diagram.png"> |
| Remote URL | Full URL (no change needed) | <img src="https://example.com/photo.jpg"> |
Iron rules:
<img>, <source>, CSS url(), or any other asset reference (e.g. /Users/alice/project/img.png). Absolute paths break portability across machines and environments.images/foo.png or ./images/foo.png.http:// / https://) are fine as-is — do not convert them to local paths.assets/, images/), and referenced with relative paths.os.path.relpath(image_path, html_dir)) rather than embedding absolute filesystem paths.Figures, diagrams, and charts MUST be independent block elements occupying full width. Never float/wrap figures alongside body text - this causes the text-diagram overlap badcase.
| Brief | Correct embedding | Forbidden |
|---|---|---|
| Report (ReportLab) | story.append(Image(...)) as standalone Flowable | Placing images inside Paragraph text, simulating float |
| Creative (Playwright) | <figure style="display:block; width:100%; margin:2em auto"> | float:right, display:flex with text, wrapfigure-style CSS |
| Academic (LaTeX) | \begin{figure}[t] ... \end{figure} | Bare \includegraphics in text body (no figure env), bare tikzpicture in multi-column |
When a diagram has >12 nodes, >3 subgroups, or intricate connections, do NOT try to render it as one giant figure. Instead:
This "table + simple diagram" pattern prevents:
The rules above handle how to embed diagrams in PDF. For what the diagram itself looks like (node layout, connector routing, color, readability), follow the charts skill rules:
Before generating ANY flowchart/diagram for PDF embedding, check these:
Connectors must not pass through nodes - If 3+ layers exist, connect adjacent layers only (top→mid, mid→bottom). Never draw top→bottom lines through middle nodes. Use detour paths if cross-layer links are needed.
Multiple arrows into one node must not pile up - Distribute entry points evenly along target edge, or use merge-then-enter pattern (sources converge to a vertical merge line, then single arrow to target).
Low-saturation fills only - Node backgrounds must be pale (#EFF6FF, #F0FDF4). High-saturation colors (#3B82F6, #10B981) only for borders or small accents. No children's-art color schemes.
Phase titles vs sub-steps must be visually distinct - Different background color, font size, and font weight. Never same-style boxes for both.
Font sizes must be readable at final output size - Sizes depend on the embedding context:
| Output context | Node title min | Description min | Label min |
|---|---|---|---|
| Standalone PNG (web/presentation, ≥1200px wide) | 14px | 12px | 11px |
| Embedded in A4 PDF (ReportLab/LaTeX, ~450pt content width) | 10pt | 8pt | 7pt |
| Embedded in slide deck (landscape, ~720pt wide) | 12pt | 10pt | 9pt |
Principle: After embedding, the smallest text in the diagram must still be legible when the document is viewed at 100% zoom. If the diagram is scaled down to fit page width, recalculate: effective_size = original_size × (display_width / canvas_width). If effective size drops below the minimum, either increase original font size or reduce diagram complexity.
Legend/annotations must not overlap content - Separate container, ≥ 40px gap from last node, fully within canvas bounds.
For Playwright-rendered diagrams: Use low-saturation fills (#EFF6FF, #F0FDF4), CSS flexbox/grid for node layout, SVG <line>/<path> for connectors, and verify no overlap at final render size.
For ReportLab-drawn diagrams: Same principles apply - use Drawing() with explicit coordinates, check node bounding boxes for overlap before finalizing.
Diagram rendering depends on the target brief - NOT a one-size-fits-all TikZ pipeline.
| Target Brief | Diagram Method | Rationale |
|---|---|---|
| Report (ReportLab) | Playwright+CSS → PNG → Image() | No LaTeX compiler in this route; HTML/CSS handles any layout natively |
| Creative (Playwright) | Directly in HTML (CSS flexbox/grid + JS connectors) | Already in browser context |
| Academic (Tectonic) - simple (≤6 nodes) | TikZ native tikzpicture | Vector output, font consistency, LaTeX-native |
| Academic (Tectonic) - complex (>6 nodes) | Playwright+CSS → PNG @2× → \includegraphics | TikZ branch logic is error-prone for models; 300dpi PNG is publication-ready |
Playwright+CSS diagram pipeline (Report & Academic-complex):
# 1. Write diagram HTML (CSS grid/flexbox + connectors)
cat > diagram.html << 'EOF'
<!-- LLM generates: nodes as divs, arrows as SVG/CSS -->
EOF
# 2. Screenshot at 2× for print quality (300dpi equivalent)
python3 "$PDF_SKILL_DIR/scripts/pdf.py" convert.blueprint diagram.html --device-scale-factor 2 --output diagram.png
# Or via Playwright directly:
# page.screenshot(path='diagram.png', scale='device', device_scale_factor=2)
# 3a. Embed in ReportLab (Report brief)
from reportlab.platypus import Image
img = Image('diagram.png', width=450) # auto height via aspect ratio
story.append(img)
# 3b. Embed in LaTeX (Academic brief, complex diagrams only)
# \includegraphics[width=\columnwidth]{diagram.png}
🚫 FORBIDDEN for Report/Creative briefs: Do NOT use TikZ standalone → compile → pdftoppm → PNG pipeline. This route has no LaTeX compiler and the extra compilation steps are error-prone.
TikZ remains valid ONLY for:
tikzpicture embedding in LaTeX documentsSee briefs/academic.md Scenario B for TikZ templates (simple diagrams only).
The final PDF MUST be generated via page.pdf() (Playwright) or ReportLab/LaTeX native output - NEVER via screenshot-to-PDF.
| Scenario | Correct Method | Forbidden |
|---|---|---|
| Creative pipeline (single/multi-page) | page.pdf() via convert.blueprint or html2pdf-next.js | page.screenshot() → image → wrap as PDF |
| Report cover (ReportLab) | cover_render.py → merge via pypdf | Screenshot cover → embed as image |
| Academic cover (ReportLab) | cover_render.py → merge via pypdf | Screenshot → \includegraphics for cover |
| Full-page posters/infographics | html2poster.js (auto overflow:hidden + height measurement + page.pdf()) | Any raster pipeline for the final output |
Why: page.pdf() produces vector text + vector shapes. Text remains selectable, sharp at any zoom, and file size is smaller. Screenshot-based PDFs are raster images - blurry when zoomed, unsearchable, and 3-5× larger.
The ONLY place screenshot/PNG embedding is acceptable:
page.screenshot() at 2× device scale factor for 300dpi print quality, then embed via Image() (ReportLab) or \includegraphics (LaTeX).These are sub-elements, not the document itself. The document-level PDF output must always be vector.
Quick test: Open the generated PDF, zoom to 400%. If text is blurry, you used a screenshot pipeline. Fix it.
There are two dedicated scripts for HTML→PDF. Choose based on document type:
| Document type | Script | Reason |
|---|---|---|
| Posters, infographics, long-image single-page designs | html2poster.js | Auto overflow:hidden, auto height measurement, zero margin, single-page output |
| Cover pages (Report/Academic route) | (none — use ReportLab) | Covers now render with scripts/cover_render.py (pure ReportLab). Do NOT use HTML for Report/Academic covers. |
| Multi-page documents, reports, academic papers, resumes | html2pdf-next.js | A4/custom pagination, 20mm margin fallback, cover adaptation, pdf-lib metadata |
| Creative pipeline (Blueprint → HTML → PDF) | html2pdf-next.js via convert.blueprint | Called internally by design_engine pipeline |
html2poster.jsnode "$PDF_SKILL_DIR/scripts/html2poster.js" poster.html --output poster.pdf --width 720px
html2poster.js automatically:
overflow: hidden on .poster / .page containers (clips decorative overflow)@page { margin: 0 } (zero margins always)html/body background with poster background color.poster scrollHeight and uses it as PDF heightUse this for ANY fixed-width, dynamic-height, single-page design.
html2pdf-next.jsnode "$PDF_SKILL_DIR/scripts/html2pdf-next.js" input.html --output output.pdf --width 210mm --height 297mm
# Or via pdf.py wrapper:
python3 "$PDF_SKILL_DIR/scripts/pdf.py" convert.html input.html --output output.pdf
Pre-render hooks auto-handle @page injection, overflow detection, cover adaptation, font loading, and pdf-lib metadata.
Common issues with hand-written Python page.pdf() (the dedicated scripts handle these automatically):
@page rule → browser default margin causes content overflow to second page or white edgesbreak-inside: avoid block pagination, content gets truncatedIron rule: Posters and cover pages use html2poster.js, multi-page documents use html2pdf-next.js. Do not write hand-written Python Playwright scripts.
⚠️ Cover page note: Report/Academic covers are rendered with ReportLab (
scripts/cover_render.py), NOT HTML — so this gotcha no longer applies to them. It remains relevant only if you hand-author a full-page fixed HTML layout (rare): such a layout usesposition: absolute, whichhtml2pdf-next.jswould convert tostaticflow and break — usehtml2poster.jsfor that case.
When using html2pdf-next.js for documents, NEVER set overflow: hidden on html, body, or the main page container.
Note: This rule does NOT apply to posters rendered via
html2poster.js— that script automatically addsoverflow: hiddento.poster/.pagecontainers to clip decorative overflow. You don't need to add or remove it manually.
| Problem | Cause | Fix |
|---|---|---|
| Browser preview cuts off bottom content, can't scroll | overflow: hidden on container + viewport < design height | Remove overflow: hidden |
| html2pdf-next.js "Fixed vertical overflow" warning, layout may break | Pre-render detects scrollHeight > clientHeight + hidden overflow, force-expands container | Remove overflow: hidden |
Always pair fixed-size pages with @media screen auto-scale so the full page is visible in any browser window without scrolling. See briefs/creative.md § 0.5 for the CSS pattern.
When generating HTML for Playwright page.pdf(), the content MUST fill the entire page with zero margins. White side margins = broken layout.
Mandatory CSS for any HTML → PDF:
@page {
size: <width> <height>; /* e.g., 720px 960px, or A4 */
margin: 0;
}
html, body {
margin: 0;
padding: 0;
}
Common causes of white margins:
@page { margin: 0 } - browser default margins kick in (~1cm each side)@page { size } declaration in the HTMLmax-width that's narrower than the pageFor blueprint pipeline: design_engine.py now injects @page { size: var(--canvas-w) var(--canvas-h); margin: 0; } automatically.
For raw HTML: YOU must include the @page rule. No exceptions.
For direct Playwright: Pass margin: { top: 0, right: 0, bottom: 0, left: 0 } to page.pdf().
html / body background color must match the content canvas background color.
Playwright page.pdf({ printBackground: true }) renders the body background color. If body is white while the content area is gray/colored, color-inconsistent borders/gaps will appear in the PDF.
/* MANDATORY: body background = content background */
html, body {
margin: 0;
padding: 0;
background: var(--c-bg); /* Same color as content canvas */
}
Root cause: Playwright resolves .page { width: 210mm } and @page { size: 210mm } to slightly different sub-pixel values (e.g. 793.688px vs 793.701px). This creates a <1px gap at the right/bottom edge of each .page div where body's background shows through. On dark pages, a white body background makes this gap visible as a white edge.
Fix — set body background to the document's dominant dark color:
:root {
--primary: #0f172a; /* darkest page background */
}
html, body {
margin: 0;
padding: 0;
width: 210mm; /* match @page size */
background: var(--primary); /* fallback for sub-pixel gaps */
}
Why this works and doesn't break white pages:
body → gap invisible..page-white { background: #ffffff } fully covers body → dark body never visible.Rule: when generating multi-page HTML with mixed backgrounds, always set html, body { background } to the darkest page's background color. If all pages are light/white, use the lightest content background (e.g. #f8fafc). Never leave body background unset (browser default = white = guaranteed white edges on dark pages).
### Content Centering (No Left/Right Drift)
**After HTML-to-PDF conversion, content must be centered, no left or right drift allowed.**
Common drift causes:
1. `@page { margin }` not 0 — browser default margin causes drift
2. `.safe-zone` or content container `inset` / `padding` left-right asymmetric
3. Content container has `max-width` but no `margin: 0 auto`
4. Grid components only occupy partial column width (e.g. `1/1 → X/7` only uses left half)
5. **Decorative elements overflow page boundary** — elements with `width > 100%` or negative offsets (e.g. glow circles, gradient overlays) inflate `scrollWidth` beyond page width. Playwright shrinks all content to fit, causing left-shift. **Fix: add `overflow: hidden` to `.page` containers.** See `typesetting/overflow.md` §3.5 for horizontal flex overflow rules.
### Anti-Void Edges (No Large Blank Margins)
**Content should not have large meaningless whitespace at page edges, top, or bottom.**
- Content should make full use of page area; do not cram all content in the top half while leaving the bottom blank
- For multi-page documents, each page's fill rate should be ≥ 60% (see `pagination.md` last page ≥ 40% rule)
- For single-page posters/infographics, fill rate should be ≥ 70%
---
## Preflight (Quality Assurance)
Every PDF must pass preflight checks before delivery. Each brief specifies the exact commands.
### HTML Pre-Render Validation (MANDATORY for ALL HTML→PDF paths)
**Before** calling `html2pdf-next.js`, `html2poster.js`, `convert.blueprint`, or any Playwright `page.pdf()`, run:
```bash
python3 "$PDF_SKILL_DIR/scripts/poster_validate.py" check-html <your_file>.html
| Result | Action |
|---|---|
| PASS (no errors) | Proceed to PDF generation |
| ERROR items | Must fix before generating PDF. Use --fix --output <file>.html for auto-repair |
| WARNING items | Review; non-blocking but should be addressed |
Key checks:
OVERFLOW_HIDDEN_CONTAINER (error): overflow:hidden on html/body/.page clips content in browser preview and triggers html2pdf-next.js auto-fix that may break layoutFIXED_SIZE_NO_SCREEN_ADAPT (warning): fixed-size page without @media screen auto-scale — browser preview requires scrollingSCREEN_ADAPT_NO_SCALE (warning): @media screen exists but lacks scale/transform/zoomFONT_NO_FALLBACK (error): font-family without generic fallbackCOLOR_CONTRAST (warning): text/background contrast ratio < 3:1This applies to all three HTML routes: Creative blueprint pipeline, Report HTML covers, and bypass/custom HTML.
→ Full spec: typesetting/overflow.md - read it for any document with tables, images, or multi-column layouts.
Core principles:
Max_WidthParagraph() wrapping (never plain strings)repeatRows=1 for long tablesMost common layout bug: table columns exceed page margins.
Before building any ReportLab Table:
available_width = page_width - left_margin - right_margin[0.25, 0.40, 0.20, 0.15] × available_width) or fixed+flex patternsum(colWidths) must be ≤ available_width - verify this in codeParagraph() wrapping, not plain strings (plain strings don't wrap)See briefs/report.md § "Table Width Management" for code patterns.
Most common bug in dual-column papers: wide tables overflow single-column width.
Before writing any LaTeX table:
\small; 7-8 needs \resizebox; ≥ 9 use table* (full width)tabular*{\columnwidth} or tabularx{\columnwidth} instead of plain tabular for 5+ columnstabular with 8+ columns in twocolumn layout - guaranteed overflow\resizebox{\columnwidth}{!} as last resort - verify smallest text ≥ 6pt after scalingSee briefs/academic.md § "Table width management" for LaTeX patterns.
These CSS properties silently break in Playwright's PDF renderer:
backdrop-filter / -webkit-backdrop-filter - drops entire element content. Use solid rgba() backgrounds.overflow: hidden on content containers - clips content. Only safe on small decorative elements (< 200px).After generating any Playwright PDF, verify every page has content (pypdf text extraction, check non-empty).
ALL PDFs must have: Title, Author (default "Z.ai"), Creator, Subject.
Report to user: file path, size, page count. Academic adds word/image count. Creative adds per-page verification.
HTML→PDF route deliverables (MANDATORY — applies to ALL briefs that use Playwright/HTML to generate PDF):
Whenever the HTML→PDF pipeline is used (Creative route, Report cover bypass, Direct HTML Flow posters, or any Playwright page.pdf() path), you MUST deliver both files to the user:
page.pdf() output)Optionally also provide: 3. Image — a full-page screenshot/preview image (PNG or JPG) for quick sharing on chat/social media
All file paths must be reported to the user. Never deliver only the PDF without the HTML source.
python3 "$PDF_SKILL_DIR/scripts/pdf.py" <command># Environment
env.check # Check deps
env.fix # Auto-install missing
# Quality
code.sanitize <script> # Sanitize forbidden Unicode
content.sanitize <file> [--apply] # Fix content issues (CJK, encoding)
meta.brand <pdf> # Add Z.ai metadata
font.check <pdf> # Scan for missing glyphs
toc.check <pdf> # Validate TOC
# Conversion
convert.blueprint <llm_json_response.md> -o final.pdf # CRITICAL FOR CREATIVE: Auto-extracts JSON, compiles, and renders PDF.
convert.html <html> # HTML → PDF (Playwright)
convert.latex <tex> # LaTeX → PDF (Tectonic). Bundled binary is macOS arm64 only; see academic.md for other-platform install.
convert.office <file> # Office → PDF (LibreOffice)
# Processing
extract.text <pdf> # Extract text
extract.table <pdf> # Extract tables
extract.image <pdf> # Extract images
pages.merge a.pdf b.pdf -o out.pdf
pages.split <pdf>
pages.clean <pdf> # Remove blank pages
form.info <pdf> # Inspect form fields
form.fill <pdf> # Fill form
form.annotate <pdf> # Fill via annotations
meta.get <pdf>
meta.set <pdf> -o out.pdf -d '{"Title": "..."}'
python3 "$PDF_SKILL_DIR/scripts/poster_validate.py"check-html <html> # Pre-render validation (overflow:hidden, @media screen, fonts, contrast, etc.)
check-html <html> --fix --output <fixed.html> # Auto-fix errors (remove overflow:hidden, add font fallback)
check-pdf <pdf> --source-html <html> # Post-render validation
check-pdf <pdf> --poster # Poster mode: suppress ORPHAN_PAGE warning
check-tex <tex> # LaTeX source validation (table overflow, image width, etc.)
check-html checks include:
OVERFLOW_HIDDEN_CONTAINER (error): overflow:hidden on html/body/.page/.poster — clips contentFIXED_SIZE_NO_SCREEN_ADAPT (warning): fixed-size page without @media screen auto-scaleSCREEN_ADAPT_NO_SCALE (warning): @media screen exists but lacks scale/transform/zoomFONT_NO_FALLBACK (error): font-family without generic fallback (sans-serif/serif)COLOR_CONTRAST (warning): text/background contrast ratio < 3:1BG_COLOR_MISMATCH (warning): body background differs from .canvas/.poster backgroundSCREEN_BG_MISMATCH (warning): @media screen html background differs from body/canvas backgroundMULTIPAGE_BODY_BG_MISSING (warning): multi-page document with dark .page backgrounds but no html/body background color. Sub-pixel gaps at page edges reveal white body, causing visible white edges on dark pages. Resolves var() references via :root variables.SCREEN_NO_BG (warning): fixed-size page's @media screen block lacks html background colorOVERFLOW_DECORATION (warning): negative position values may cause black edgesNO_PAGE_SIZE / MISSING_MARGIN_RESET / WHITE_BACKGROUND / TINY_FONT / etc.check-tex checks include:
BARE_TABULAR_OVERFLOW (error): \begin{tabular} with 5+ columns in two-column layout, not wrapped in resizebox/adjustbox/table*RESIZEBOX_TEXTWIDTH (error): \resizebox{\textwidth} used inside single-column float in two-column layout. \textwidth = full page width, but table float is one column. Fix: use \resizebox{\columnwidth} or table*TABULAR_OVERFLOW_RISK (warning): 4-column tabular in two-column layout without width constraintTABULAR_WIDE (warning): 7+ column tabular in single-column layout without width constraintTABULAR_NO_FLOAT (warning): tabular not inside table/table* float environmentTABULARX_NOT_LOADED (warning): document has tabular but tabularx package not loadedIMAGE_NO_WIDTH (warning): \includegraphics without width/height/scale constraintEQUATION_DUAL_ON_LINE (warning): equation environment has 2+ equations joined by \quad without line breaks. Guaranteed overflow in dual-columnEQUATION_OVERFLOW_RISK (warning): equation body has >80 math characters. Likely overflows single columnALGORITHM_NO_SMALL_FONT (warning): algorithm environment in dual-column without \SetAlFnt{\small}ALGORITHM_LONG_IO (warning): Algorithm Input/Output line >120 chars. Will overflow narrow columnCJK_ASCII_QUOTES (error): ASCII " found adjacent to CJK characters. LaTeX interprets " as right double quote, so "北漂" renders incorrectly. Skips verbatim/lstlisting/minted environments and \texttt{}/\url{}/\href{}{}/\verb|| inline commands.python3 "$PDF_SKILL_DIR/scripts/design_engine.py"compile --blueprint <json_file> --output poster.html # CRITICAL: Compile JSON blueprint to HTML
derive "document title or description" # Auto-derive intent from content
palette --intent calm --mode dark # Generate HSL-locked palette
palette-cascade --intent cold --mode minimal # Generate role-based cascade palette (V2, preferred)
svg --intent flow --dimensions 720x960 # Generate SVG background
full --intent energy --mode dark --dimensions 720x960 --output-dir ./assets/
audit --palette-json palette.json # Check palette constraints
python3 "$PDF_SKILL_DIR/scripts/pdf.py" palette.generatepalette.generate --title "document title" --mode minimal # Output: ready-to-paste ReportLab Python code
palette.generate --title "..." --format json # Output: raw JSON
palette.generate --title "..." --format css # Output: CSS custom properties
palette.generate --title "..." --mode dark --harmony complementary --seed 42
python3 "$PDF_SKILL_DIR/scripts/pdf.py" palette.cascadepalette.cascade --title "document title" --mode minimal # Output: summary table with all 12 roles
palette.cascade --title "..." --format json # Full structured JSON (roles + cover + body + charts + semantic)
palette.cascade --title "..." --format css # CSS custom properties by tier
palette.cascade --title "..." --format reportlab # Ready-to-paste ReportLab Python code
⚠️ Cascade palette is the preferred palette system. It enforces area ∝ 1/saturation (larger areas = lower saturation) and outputs unified color subsets for cover, body, and charts from one base hue. Use palette.cascade instead of palette.generate for new documents.
⚠️ Report route MUST call palette.cascade (or palette.generate) before writing any ReportLab code. The output is copy-paste ready - no manual hex picking allowed.
Note:
design_engine.py compileproduces HTML from a JSON blueprint. To get a PDF, usepdf.py convert.blueprintwhich internally callscompile→ Playwright render → PDF output. In the Creative pipeline, always useconvert.blueprintfor the final PDF.
| Brief | Primary Tool | Secondary | Emoji Support | Custom Page Size |
|---|---|---|---|---|
| Report | ReportLab + pypdf | ReportLab cover (cover_render.py) | ❌ (tofu □) | Manual pagination |
| Creative | Playwright (optional) | html2pdf-next.js (pdf-lib for post-processing) | ✅ native | ✅ any size |
| Academic | Tectonic (optional) + pypdf | ReportLab cover (cover_render.py) | ❌ (dropped) | Template-dependent |
| Process | pikepdf, pdfplumber | LibreOffice (soffice) (install on demand — not substitutable) | N/A | N/A |
Cover System (V4.0): Report and Academic covers are rendered with ReportLab via
scripts/cover_render.py(templates 01–05 report, 06–08 academic dark, 09 institutional) and
merged as page 1 via pypdf — no HTML/Playwright/Chromium. Creative composes its cover inside
its own HTML document. Fonts are auto-detected from the host and chosen by cover style (see
typesetting/cover.mdPart 3).Optional engines: Playwright/Chromium (Creative/poster/HTML→PDF) and Tectonic (Academic/LaTeX)
are optional — probe first and ask the user before installing (large downloads / long waits).LibreOffice (Office→PDF) is different — you MUST install it, not substitute it. Using Word,
WPS, Keynote or Pages instead of installing is forbidden, and a large download is not a reason
to skip it. Required: explain the necessity to the user (only engine that preserves
themes/layouts/master slides faithfully), say the package is large, then install it — preferred
source is the Tsinghua TUNA mirror
https://mirrors.tuna.tsinghua.edu.cn/libreoffice/libreoffice/stable/26.8.0/(pick the
platform/arch subdirectory; if that version is gone, take the newest under
.../libreoffice/stable/), withbrew install --cask libreoffice/
sudo apt install libreoffice-core/winget install TheDocumentFoundation.LibreOfficeas
fallbacks. Then register the binary onPATHand re-verifysoffice --version— an install
left off the executable search path reads as "not installed" to the next probe and causes a
redundant multi-hundred-MB reinstall; the mechanism differs per OS (Linux/macOS symlink into
/usr/local/bin, Windowssetxthe program dir onto the userPATH). So probe before
installing: a binary already on disk but off-PATHneeds registering, not reinstalling.
Another program is permitted only after an
install attempt has actually failed. No install attempt = no substitute program.
Seebriefs/process.mdandenv_setup/setup.md(→ "Register the binary on PATH") for the full
procedure.Fallback: If Report brief content has emoji → reroute to Creative.
SKILL.md ← You are here
briefs/
report.md ← Report production: ReportLab workflow + API + resume(ATS)
creative.md ← Creative production: 5-phase generative design workflow
poster.md ← Poster scene rules: density, font sizing, fill constraints (overlay on creative.md)
academic.md ← Academic production: LaTeX workflow + templates + resume(CV)
process.md ← PDF processing: extract/merge/split/form/convert/reformat
process-advanced.md ← Advanced reference (encrypted/corrupted/OCR/batch/perf) - load on demand
configs/
visual_framework.md ← Palette mode, color harmony, SVG background params
components.md ← Non-grid composition components (floating cards, etc.)
fonts.md ← Font stacks per pipeline (Creative/Report/Academic)
typesetting/
palette.md ← Color system + typography + anti-patterns + spacing
cover.md ← ReportLab cover engine V4.0 (templates 01–09) + selection matrix + font strategy + color rules
cover-backgrounds.md ← Cover background rendering rules + transparency constraints
charts.md ← Chart styling + anti-stacking rules + axis/grid/legend treatment
overflow.md ← Bounding box system, text/image/table overflow prevention
pagination.md ← Cross-page integrity, orphan/widow control, CJK punctuation
typography.md ← Font size scale, line-height, spacing system
geometry.md ← Geometric anchor system (decorative elements, lines, shapes)
fill-engine.md ← Adaptive anti-void layout engine V2.0
scripts/
pdf.py ← CLI tool (30 subcommands)
cover_render.py ← ReportLab cover engine (templates 01–09, host font detection). Report/Academic covers.
pdf_qa.py ← PDF quality checker (metadata, fonts, overflow, margins, tables, formulas)
design_engine.py ← Generative SVG + palette engine (palette/svg/compile/derive/audit)
poster_validate.py ← HTML/PDF validator
toc_validate.py ← TOC validator
html2pdf-next.js ← Playwright + pdf-lib HTML→PDF converter for documents (no Paged.js)
html2poster.js ← Playwright HTML→PDF converter for posters/single-page (auto overflow:hidden, dynamic height)
cover_validate.js ← (legacy) HTML cover overlap detection — NOT used by the ReportLab cover engine; kept only for hand-authored HTML covers.
references/
resume-altacv.tex ← AltaCV dual-column resume template (creative/tech)
resume-academic.tex ← Academic CV template (PhD/academic)
All paths are relative to $PDF_SKILL_DIR — the single root variable for this skill. Resolve it once before calling any script:
PDF_SKILL_DIR="<skill_directory>" # ← parent directory of this SKILL.md
# Then all commands use $PDF_SKILL_DIR:
python3 "$PDF_SKILL_DIR/scripts/pdf.py" code.sanitize generate_pdf.py
python3 "$PDF_SKILL_DIR/scripts/pdf.py" meta.brand output.pdf
python3 "$PDF_SKILL_DIR/scripts/pdf.py" font.check output.pdf
python3 "$PDF_SKILL_DIR/scripts/pdf.py" toc.check output.pdf
python3 "$PDF_SKILL_DIR/scripts/pdf.py" pages.clean output.pdf -o output_clean.pdf
python3 "$PDF_SKILL_DIR/scripts/pdf_qa.py" output.pdf
python3 "$PDF_SKILL_DIR/scripts/poster_validate.py" check-html page.html
python3 "$PDF_SKILL_DIR/scripts/poster_validate.py" check-pdf output.pdf
For Python imports (when generation code needs to import skill modules):
import sys, os
PDF_SKILL_DIR = "<skill_directory>"
_scripts = os.path.join(PDF_SKILL_DIR, "scripts")
if _scripts not in sys.path:
sys.path.insert(0, _scripts)
⚠️ NEVER use bare python3 scripts/pdf.py ... - it only works if cwd happens to be the skill directory. Always use $PDF_SKILL_DIR/scripts/ as the absolute prefix.
The following checks come from the
typesetting/spec files and are mandatory quality gates.
python3 "$PDF_SKILL_DIR/scripts/pdf_qa.py" <output.pdf>
python3 "$PDF_SKILL_DIR/scripts/pdf_qa.py" --poster <output.pdf> # poster mode: skip content fill ratio, check all pages for full-bleed
python3 "$PDF_SKILL_DIR/scripts/pdf_qa.py" --skip-cover --formulas <output.pdf> # academic mode: skip cover for margin check, enable formula overflow
python3 "$PDF_SKILL_DIR/scripts/pdf_qa.py" --no-tables <output.pdf> # creative mode: skip table centering check
Dependency: Requires
pymupdf(pip install pymupdf). If not installed, skip automated detection and use the manual checklist below.
Run pdf_qa.py after generating a PDF. It auto-detects: metadata completeness, page size consistency, blank pages, CJK punctuation placement, color count, font embedding status, content overflow, content fill ratio, cover full-bleed, margin symmetry, table centering, formula overflow.
--poster mode: skips content fill ratio check (poster last page naturally has less content), checks ALL pages for full-bleed (not just cover)--skip-cover: skips page 1 when checking margin symmetry (for documents with separately-generated covers)--no-tables: disables table centering check (for creative/poster documents that rarely have traditional tables)--formulas: enables formula overflow detection (checks if formula-like content extends past right content margin)CondPageBreak(available_height * 0.25) in ReportLab, \needspace{0.25\textheight} in LaTeXbreak-inside: avoid. Large tables: thead { display: table-header-group }line-break: strict in CSSbreak-after: avoidbreak-inside: avoidfit_image() or max-width: 100%overflow-wrap: break-word (HTML) or manual splitting (ReportLab)Academic (LaTeX) documents are exempt from this color system. LaTeX uses template-defined styling.
cover_render.py (ReportLab) → merged as page 1 via pypdf. Creative: cover is part of the same HTML document. NEVER deliver a separate cover fileU = W * 0.05 - all spacing should be multiples of UsaveState()/clipPath() must restoreState() BEFORE rendering Layer 2 lines and Layer 3 text. Text rendered inside clip scope = text gets cut offshowBoundary=0, no canvas.rect(0,0,W,H), no CSS border/outline on cover containerU (= W * 0.05) away from any text contentscripts/cover_render.py (templates 01–09) and merge as page 1 via pypdf. Do NOT build Report/Academic covers with HTML/Playwright. (Creative composes its cover inside its own HTML document.) Pick a template per typesetting/cover.md Part 2; pass a palette from palette.cascade.top: XX% must have a containing block with deterministic height (height: 100%, inset: 0, or top+bottom pair). Wrappers without explicit height + percentage-positioned children = overlap bug. Prefer px values over percentages:root CSS variables populated by palette.cascade output. Template HTML uses --c-bg, --c-accent, --c-text, --c-muted — no hardcoded hex values in generated HTMLbbox_to_anchor or external placementleft_margin == right_margin - asymmetric margins cause off-center content (ReportLab, LaTeX, HTML all checked)@page { size: <w> <h>; margin: 0; } and html,body { margin:0; padding:0; }. No white side margins in the output PDFhtml, body { background } set explicitly. Single-color docs: match content canvas. Multi-page mixed docs: use the darkest page's background color. Mismatch or missing = sub-pixel white edges on dark pagesfill-engine.md)hAlign='CENTER' on Table flowable. LaTeX: use \centering inside table environment. HTML: use margin: 0 auto on table element. NEVER let tables float left with right-side whitespacecolWidths to fill available spaceleftIndent = 24pt (2em). Options must NEVER start at the same X position as the question numberSpacer(1, height) in ReportLabspaceBefore=12pt between questions. Section headers get spaceBefore=24ptvisual_framework.md Stock Image Ban" quotes - use text'' for double and `text' `` for single\end{titlepage} followed by \newpage/\clearpage - TOC/body NEVER on same page as titleparacol entries checked for vertical overflow; max 3-4 bullets per \cvevent; explicit \newpage for 2-page resumes\geometry symmetry: left=X, right=X must be equal values<stem>_updated.pdf), not the input path overwritten; intermediates from chained operations are cleaned upPlace ::zcode-file-citation{...} inline in prose, not in a trailing list. Use purpose="source" for Q&A/no-op and purpose="output" for create/edit.
Created ::zcode-file-citation{path="/abs/path/launch-plan.docx" purpose="output"}, highlighting the rollout and owners.For page-specific evidence, use a page number verified against the latest render/inspection.
Locators support only page_number; otherwise use a plain citation. Do not guess or add object, label, paragraph, table, or cell IDs. Do not cite intermediates unless asked. Inspect complete relevant pages and preserve material headings, question/table labels, footnotes, sources, and sample sizes; cite each needed page once.
::zcode-file-citation{path="/abs/path/file.docx" purpose="source" artifact_kind="document" page_number=4}
Citations currently support only plain file citations. Do not add artifact_kind, page_number, or other locators. Never cite rendered PNGs, scratch files, builders, or QA intermediates unless asked. Inspect the complete relevant pages, preserve material headings, table/figure labels, footnotes, sources, and sample sizes, and cite each source PDF once with a plain source citation.
For non-in-place edits, preserve the source and export a copy; if unchanged, cite the source plainly.
inspect the complete relevant slide, including callouts, question wording, chart/table titles, totals/sample sizes, and source/methodology footers. Answer directly, group same-slide claims, and cite that slide once. For concrete chart/table/image/diagram/callout evidence, include exact inspected slide_id, object_id, and a useful label when available.
For non-in-place edits, preserve the source and export a copy; if unchanged, cite the source plainly.
Use only locators verified against the latest render/inspection:
::zcode-file-citation{path="/abs/path/deck.pptx" purpose="source" artifact_kind="presentation" slide_number=3}
::zcode-file-citation{path="/abs/path/deck.pptx" purpose="source" artifact_kind="presentation" slide_number=1 slide_id="sl/gs5z1kshq0xv" object_id="ch/pz9t1r3ka8vn" label="ARR by segment chart"}
If IDs are not exact, stop at slide_number; never guess or cite intermediates unless asked.
sheet + range (the exact cell for a discrete value). Cite discontiguous cells separately. For objects, use sheet + exact inspected object_id; add object_kind/label only when useful. Never cite a sheet alone or guess locators.::zcode-file-citation{path="/abs/path/book.xlsx" purpose="source" artifact_kind="workbook" sheet="Revenue Model" range="C27"}
Never cite intermediates unless asked.
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
使用three.js创建立体模型,在交互式查看器中从各个角度检查形状和材质,并以OBJ + MTL或GLB格式保存,供其他三维制作软件使用。
Audit web accessibility with Chrome DevTools MCP and Lighthouse. Inspect semantic structure, labels, keyboard focus, tap target size, and color contrast, then identify page elements that may need changes based on web.dev guidance.
中文简介正在准备中。当前显示英语简介。
在个人任务清单中记录待办事项、承诺、期限、下一步、待回复对象和阻碍原因,更新进度与依赖关系,合并重复项并归档已结束的任务。
Coordinate a task from a verifiable goal through completion. Handle work directly or split independent tasks across separate agent sessions, track progress, verify results, and arrange pull request merging when included in the goal.
中文简介正在准备中。当前显示英语简介。
了解 Antigravity 如何发现和加载自定义配置,包括配置位置与优先级。借助本指南选择并创建技能、规则、插件、钩子或 MCP 服务器,用于智能体工作流程和外部工具连接。
将动画制作成可播放、暂停和定位时间的HTML页面,通过时间轴调整场景时长与速度,并为横屏或竖屏视频导出做好准备。