Forge the outline into color blocks—a visual renderer that gives the stage back to the speaker.
What this is not
- Not a manifesto distiller—does not extract "that one line", does not write "complete assertive sentences", does not reorder
- Not Takahashi method—does not shave words down to single characters
- Not deck-style—not the tidy layout of corporate PPT
What this is
Outline → visual renderer:
- Input = orgmode file (
***hierarchy + lists + tables + emphasis) - Output = visually beautified slogan-style HTML,preserving the outline structure 1:1
- No extraction, no rewriting, no condensing—only decidinghow to render this line/this section as a page
Visual language (reference aesthetics: Felipe Franco / BIG STUDIOS manifesto aesthetic):
- One theme color for the whole piece—choose one of red/black/yellow
- Left-aligned stage aesthetic—text left-aligned, oversized type naturally fills the screen
- Oversized ultra-bold—single character 70vmin, long sentence 11vmin
- Multi-line offset—automatically indent 0/1/2 by outline nesting depth
- Automatic color change for keywords——
*强调*~code~auto hl - Section transitions keep the beat—level-one heading
*→ emphasis cover page, the rest → theme pages
Core philosophy
Outline is truth. Skill is the renderer.
Not touching the content is an iron rule:
- Headings unchanged word for word
- Paragraphs unchanged word for word
- List items unchanged word for word
- Tables unchanged in structure
- Order not rearranged
The only permitted "change" is:Physical pagination(split a too-long passage into multiple pages) while maintaining visual consistency.
Orgmode → page mapping rules
Heading levels
| Org element | Page |
|---|---|
* 一级标题 |
Exclusive emphasis cover page (accent background) |
** 二级标题 |
Exclusive theme page (large heading occupies a full page) |
*** 三级标题+ |
Exclusive theme page (font size one step down) |
Content elements
| Org element | Page behavior |
|---|---|
| Paragraph | theme page, paginated by period/line break/word count |
- 列表项 |
theme page, one line per item, indent by nesting depth (0/1/2) |
1. 编号列表 |
Same as above, preserving number prefixes |
| Nested list | Child item indent +1 (max indent=2) |
| 表格 | |
Single or multiple pages, preserving table structure (first row bolded) |
*强调* |
Automatic hl: true |
~code~ or =verbatim= |
Automatic hl: true |
「」 keywords inside |
visual unit (keeps parentheses, no forced hl) |
Quote > ... |
theme page, displayed with indent 1 |
Separator ----- |
standalone emphasis pause page (no content, solid color block) |
#+begin_example block |
standalone pre page (monospace-rendered ASCII art) |
File-level metadata
| Org element | Purpose |
|---|---|
#+title: |
→ JSON title(browser tab) |
#+author: or #+date: |
→ JSON subtitle(footer bottom-right) |
#+filetags: |
used to infer theme (see below) |
#+identifier: |
ignored |
Theme inference
Priority: explicit parameter > filetags inference > default black
Explicit override (parameter):
-r/--theme=red→ red-b/--theme=black→ black-y/--theme=yellow→ yellow--cyber→ cyber-hacker (black background green text + CRT scanlines + HUD + terminal cursor)
filetags auto inference:
| filetags contains | theme | tone |
|---|---|---|
:share: :talk: :manifesto: :keynote: |
red |
manifesto, call to action |
:essay: :think: :learn: :note: |
black |
contemplation, argumentation |
:critique: :warn: :rant: |
yellow |
irony, vigilance |
| none of them | black |
default contemplative tone |
Pagination rules (when there is a lot of content)
Iron rule: maintain visual consistency after splitting. Pages of the same logical block use the same font-size tier/background color/indentation rules.
| Case | Split method |
|---|---|
| Paragraph ≤ 30 characters | single page |
| Paragraph 30-80 characters, containing multiple periods | one page per sentence (each page at medium font-size tier) |
| Paragraph > 80 characters | split into pages of ~30 characters, add ⋯ continuation marker |
| List ≤ 4 items | display all on a single page (staggered indent) |
| List 5-8 items | split into 2 pages, 3-4 items per page (keep the number of items per page close) |
| List > 8 items | split into multiple pages, 4 items per page |
| Nested list (e.g. 4 revolutions × 4 attributes) | parent item 1 page + each child item forms an independent group (title 1 page + child item 1 page) |
| Table ≤ 6 rows | single page |
| Table > 6 rows | split into multiple pages, keep the header on each page |
Consistency check: after splitting, scan once—pages split from the same source should look like the same kind of thing, with font size/indentation/background color all aligned.
Automatic emphasis (rhythm)
- All
* 一级标题→ emphasis cover page - first page of the file (title or first line of non-empty text) → emphasis opening page (merged if it is already a level-1 heading)
- last page of the file (last paragraph or last item) → emphasis closing page
-----separator → emphasis pause page- everything else is a theme page
Do not force emphasis just to pad the rhythm—a level-1 heading is a natural chapter breakpoint.
Automatic hl (highlight)
- org
*强调*→hl: true - org
~code~=verbatim=→hl: true - hl inside emphasis pages is automatically ignored (CSS
color: inherit)
Mapping example
Input(org excerpt):
#+title: 美团分享
#+filetags: :share:
* AI
** 为什么说 AI 是一次革命?
人类革命:能力让渡的层级跃迁
- 「人之为人」重新定义
- 社会组织重排
Mapping result:
| # | Type | Content | Source |
|---|---|---|---|
| 1 | emphasis | 「AI」 | * AI(level-1 heading cover) |
| 2 | theme | "Why is AI a revolution?" | ** ... level-2 heading on its own page |
| 3 | theme | "Human Revolution: The Hierarchical Leap of Capability Transfer" | Paragraph, single sentence |
| 4 | theme | Two-line offset: "'What it means to be human' redefined" / "social organizations rearranged" | List ≤4 items per page |
theme auto-select red(filetags :share:),title=美团分享。
Visual Specification
Color palette (only 4 colors)
--c-black: #1A1A1A
--c-red: #E63956
--c-yellow: #FFD400
--c-white: #FFFFFF
--c-gold: #FFE082
Theme mapping (use ≤3 colors per piece)
| theme | Default page | emphasis page | hl color (theme pages only) |
|---|---|---|---|
| black Contemplation | White text on black background | White text on red background | Red #E63956 |
| red Manifesto | White text on red background | White text on black background | Soft golden yellow #FFE082 |
| yellow Irony | Black text on yellow background | White text on black background | Red #E63956 |
| cyber Terminal | Matrix green on black background | Black text on green background | White #FFFFFF (with green glow + CRT scanlines + top HUD) |
Font stack
"Helvetica Neue", "Arial Black", "Inter", "PingFang SC", "Heiti SC", -apple-system, sans-serif
font-weight: 900
letter-spacing: -0.05em
Additional cyber theme fonts (for HUD/footer/pre):
"JetBrains Mono", "Fira Code", "IBM Plex Mono", "Source Code Pro", "Menlo", monospace
Automatic font size adjustment
Automatically tiered by the character count of the "longest line" on this page (CJK characters weighted as 1.8):
| Tier | Character count | Font size |
|---|---|---|
| single | ≤ 2 | 70vmin |
| short | 3-6 | 48vmin |
| medium | 7-14 | 28vmin |
| long | 15-26 | 16vmin |
| xlong | 27+ | 10vmin |
Multi-line pages automatically drop one tier.
Typography
- Content area padding 6vmin 7vmin (close to the edges, giving large text a sense of filling the space)
- lines block horizontally centered + line content left-aligned——
align-items: centerCenters the lines block as a whole horizontally on the screen (eliminating blank space on the right in 16:9), while each line's text still starts left-aligned, and indent 0/1/2 creates offset within the block - letter-spacing
-0.05em—the letter-crowding feel that ultra-bold should have - line-height
1.05, inter-line gap0.15em—so multi-line wrapping also has breathing room - Text vertical direction: centered
- Footer: page number at bottom left + subtitle at bottom right, 13px monospace, opacity 0.5
JSON Schema
{
"theme": "black|red|yellow|cyber", // 主题色(必选,决定整篇调性)
"title": "演讲标题(浏览器 tab)",
"subtitle": "副标题/品牌(页脚右下,可选)",
"slides": [
// 默认 theme 页
{
"lines": [ // 1-N 行
{
"indent": 0, // 0/1/2 缩进档(按 outline 嵌套深度)
"align": "left|center|right", // 可选,默认 left
"chunks": [ // 行内片段
{"t": "句子前段"},
{"t": "高亮词", "hl": true}, // 仅 theme 页生效
{"t": "句子后段"}
]
}
]
},
// emphasis 页(accent 底色,整页就是高亮,不允许 inline hl)
{ "emphasis": true, "lines": [...] },
// pre 页(ASCII art / 预格式化块)
{ "preTitle": "diagram_name", "pre": "...preformatted text..." }
]
}
Field omission conventions:
- If not written,
emphasis= default theme page - Within an emphasis page,
chunks[].hl: trueis ignored - If the
prefield is written, that page is an ASCII art page (rendered in monospace)
Invocation flow
- Get content(file → Read / paste → use directly / URL → WebFetch)
- Parse outline:
- org: recognize
***heading levels,-1.lists,|...|tables,*强调*/~code~、#+begin_exampleblocks - markdown (compatible):
###headings,-*lists,|tables,**强调**、```code blocks - Plain text (fallback): split by blank lines, one page per paragraph
- org: recognize
- Infer theme: explicit parameter >
#+filetags:> default black - Apply mapping rulesGenerate slides array:
*Title → emphasis cover**+ title → theme standalone page- Paragraph → theme page (according to pagination rules)
- List → theme page (offset indent + pagination rules)
- Table → theme page (preserve structure + pagination rules)
- Emphasis → automatic hl
- example block → standalone pre page
- Read
assets/slogan_template.html(the cyber theme needs scanline/HUD/cursor CSS injected on top of the template) - Replace placeholders:
{{TITLE}}→ file#+title:or explicit parameter{{SUBTITLE}}→#+author:#+date:concatenate, or leave empty{{THEME}}→ inferred or explicit parameter (black|red|yellow|cyber){{SLIDES_JSON}}→ JSON.stringify(slides)
- Write fileto
~/Downloads/{name}.html({name}taken from#+title:or the filename, punctuation removed, ≤ 20 characters) - Report path + page-turn keys
→ ← Space F Home End
Taste guidelines
- outline is truth—don't change wording, don't extract, don't rewrite, don't rearrange
- Level-1 heading = emphasis cover—a natural chapter breakpoint, automatic pacing
- Level-2 heading = exclusive theme page—give the heading the weight it deserves
- List offset—reflect outline nesting depth via indent 0/1/2
*强调*automatic hl—respect the author's marking intent- Keep pagination consistent—the same logical block has consistent visual treatment (font size tiers/indent/background color)
- Keep the footer—don't delete the page number + subtitle, that's the brand's coolness
- Left-align, don't center—the soul of VACAT aesthetics
Forbidden zone
- Don't extract a manifesto—don't "find the hook", the author has already written the outline
- Don't write new sentences—don't reorganize into "complete assertion sentences"
- Don't rearrange the order—output in outline order, present it however the author arranged it
- Don't delete content—all list items/paragraphs must be presented, don't pick and choose
- Don't add images/icons—color blocks are the images (except the cyber theme's HUD/scanlines, which are part of the theme)
- Don't use transition animations—hard cuts
- Don't use inline hl on emphasis pages—the whole emphasis page is already highlighted, adding hl again makes a mess
- Don't mix multiple themes—one vibe per piece, no switching
- Don't make the subtitle font too large—footer is 13px, its presence must not overpower the main title
- Don't add emphasis on your own—only level-1 headings, the first and last pages, and
-----are emphasis, nothing else
Chinese by default
Output Chinese by default. Unless the original text is English and the user asks to keep English.
General interactions
→SpaceEnterjPageDown: next page (including Bluetooth presentation clickers)←kPageUp: previous page (including Bluetooth presentation clickers)Home/End: jump to first/lastf/F: toggle fullscreen- Touchscreen swipe left/right: turn page
- Tap right half of screen: next page; tap left half of screen: previous page