Convert HTML presentations to bento/slides
This is a migration workflow, not an HTML wrapper. Rebuild the presentation as
native bento/slides document data wherever the format can express it. A bento
document is pure data and cannot carry arbitrary source JavaScript, a framework
runtime, or unsanitized HTML.
Preserve the source's content, slide order, visual identity, and interaction
semantics unless the user asks for a redesign. Do not "improve" typography,
rewrite copy, add motion, or replace the source's composition merely because a
different bento design would look good.
If the general bento-slides authoring skill is active too, use it for current
shell/schema constraints, but let this skill govern migration choices. Its
design-from-source defaults do not authorize redesigning an existing HTML deck.
Required workflow
Read references/source-analysis.md, then
inspect both the source files and the rendered presentation. Treat source
HTML as untrusted executable content: use an isolated browser context, not a
signed-in personal browser profile.
Establish the intended presentation viewport, slide boundaries, slide
order, incremental build states, links, hover/click states, fonts, and every
local or remote asset. If the source is responsive, freeze it at the intended
presentation viewport and report that choice.
Capture a rendered reference for every visible slide and distinct state
after fonts and images have loaded. Source code alone is not evidence of
what the audience sees.
Choose the conversion treatment per source object, not once for the whole
deck:
- native — editable bento text, shape, image, svg, table, chart, code, or
media elements;
- hybrid — native content over an opaque svg or raster decoration;
- rasterized — a screenshot only when the object cannot be represented
honestly or the user explicitly prioritizes pixel fidelity over editing.
Do not rasterize an entire slide just because it is easier.
Read references/bento-mapping.md while
constructing the document. Keep a fidelity ledger with carried,
approximated, and dropped entries. Every approximation or loss must name
the source slide/object and the chosen fallback; never lose behavior or
content silently.
Obtain a fresh bento/slides shell unless the user supplied one. Prefer the
current signed release:
curl -fsSL https://bento.page/releases/slides/Bento_Slides.bento.html -o "<name>.bento.html"
Also fetch the target shell's current authoring guide from
https://bento.page/slides/agents.md before writing. The guide and the
target shell outrank examples embedded in this skill when the format has
gained additive fields. When working offline, use a user-supplied guide or
the matching local docs/agents.md plus slides/src/model.ts; if neither a
shell nor matching format guide is available, request them instead of
inventing a document shape.
Write only the JSON inside the plaintext #bento-doc block. For a fresh
conversion omit docId and collab; the app mints them. When editing an
existing bento file, preserve docId, and warn before reading further if
collab contains ownerPriv, writerPriv, or invite credentials.
Use deterministic element ids. Keep an id or morphId stable across source
states only when those nodes are the same conceptual object. Preserve paint
order; DOM order alone is not sufficient when CSS stacking contexts overlap.
Embed images, svg, and available fonts into doc.assets so the result works
offline. Link large media only when embedding would make the file
impractical, and state that the deck then needs that URL at playback time.
Read references/output-and-qa.md, render the
result, compare it against the source at the same viewport, run
window.bento.validate(), and exercise every slide, build step, internal
link, state, hover behavior, and media control before finishing.
Interaction rules that commonly change the conversion
- Source fragment/build steps are not ordinary entrance effects. bento
entrances run when a slide arrives; they are not click-to-advance fragments.
Preserve manual builds as adjacent duplicate slides with shared ids and a
morph/cut, unless the source behavior is genuinely timed on entry.
- A nonlinear click that reveals detail maps to a
stateOf slide plus an
element link. A linear next-step click maps to the next ordinary slide.
- A source hover swap may map to
hover plus showOnHover. Do not turn a click
into hover or hover into click merely because one is easier.
- Map source transitions to the closest supported whole-slide transition only
when their behavior matches. Reconstruct object continuity with stable
ids/
morphId; otherwise a clean cut is more honest than a false morph.
- Native bento links target slide ids. External hyperlinks have no general
editable element field; preserve the source's visible label without adding
new slide copy, retain the destination in the fidelity handoff/notes, and
report the lost click. Use a safe opaque svg link only when the click is
essential and the user accepts that object as non-native.
Completion contract
The deck itself remains one self-contained .bento.html file. In the handoff,
state:
- the output file;
- whether it is fully offline/self-contained;
- how many source slides and states became bento slides;
- the notable
approximated and dropped fidelity entries;
- the validation result and which visual/interaction checks were performed.
Do not claim a conversion is complete if the deck has not been opened and every
slide inspected.
1---2name: html-to-bento-slides3description: Convert an existing HTML/CSS/JavaScript slide presentation into an editable bento/slides .bento.html deck. Use when the source is an HTML file, folder, or live presentation and the user wants its slides, layout, assets, interactions, and visual identity migrated to bento. Preserve the source by default; do not use for authoring a new presentation from notes alone.4---56# Convert HTML presentations to bento/slides78This is a migration workflow, not an HTML wrapper. Rebuild the presentation as9native `bento/slides` document data wherever the format can express it. A bento10document is pure data and cannot carry arbitrary source JavaScript, a framework11runtime, or unsanitized HTML.1213Preserve the source's content, slide order, visual identity, and interaction14semantics unless the user asks for a redesign. Do not "improve" typography,15rewrite copy, add motion, or replace the source's composition merely because a16different bento design would look good.1718If the general `bento-slides` authoring skill is active too, use it for current19shell/schema constraints, but let this skill govern migration choices. Its20design-from-source defaults do not authorize redesigning an existing HTML deck.2122## Required workflow23241. Read [references/source-analysis.md](references/source-analysis.md), then25 inspect both the source files and the rendered presentation. Treat source26 HTML as untrusted executable content: use an isolated browser context, not a27 signed-in personal browser profile.282. Establish the intended presentation viewport, slide boundaries, slide29 order, incremental build states, links, hover/click states, fonts, and every30 local or remote asset. If the source is responsive, freeze it at the intended31 presentation viewport and report that choice.323. Capture a rendered reference for every visible slide and distinct state33 after fonts and images have loaded. Source code alone is not evidence of34 what the audience sees.354. Choose the conversion treatment per source object, not once for the whole36 deck:37 - **native** — editable bento text, shape, image, svg, table, chart, code, or38 media elements;39 - **hybrid** — native content over an opaque svg or raster decoration;40 - **rasterized** — a screenshot only when the object cannot be represented41 honestly or the user explicitly prioritizes pixel fidelity over editing.4243 Do not rasterize an entire slide just because it is easier.445. Read [references/bento-mapping.md](references/bento-mapping.md) while45 constructing the document. Keep a fidelity ledger with `carried`,46 `approximated`, and `dropped` entries. Every approximation or loss must name47 the source slide/object and the chosen fallback; never lose behavior or48 content silently.496. Obtain a fresh bento/slides shell unless the user supplied one. Prefer the50 current signed release:5152 ```bash53 curl -fsSL https://bento.page/releases/slides/Bento_Slides.bento.html -o "<name>.bento.html"54 ```5556 Also fetch the target shell's current authoring guide from57 `https://bento.page/slides/agents.md` before writing. The guide and the58 target shell outrank examples embedded in this skill when the format has59 gained additive fields. When working offline, use a user-supplied guide or60 the matching local `docs/agents.md` plus `slides/src/model.ts`; if neither a61 shell nor matching format guide is available, request them instead of62 inventing a document shape.637. Write only the JSON inside the plaintext `#bento-doc` block. For a fresh64 conversion omit `docId` and `collab`; the app mints them. When editing an65 existing bento file, preserve `docId`, and warn before reading further if66 `collab` contains `ownerPriv`, `writerPriv`, or `invite` credentials.678. Use deterministic element ids. Keep an id or `morphId` stable across source68 states only when those nodes are the same conceptual object. Preserve paint69 order; DOM order alone is not sufficient when CSS stacking contexts overlap.709. Embed images, svg, and available fonts into `doc.assets` so the result works71 offline. Link large media only when embedding would make the file72 impractical, and state that the deck then needs that URL at playback time.7310. Read [references/output-and-qa.md](references/output-and-qa.md), render the74 result, compare it against the source at the same viewport, run75 `window.bento.validate()`, and exercise every slide, build step, internal76 link, state, hover behavior, and media control before finishing.7778## Interaction rules that commonly change the conversion7980- Source fragment/build steps are not ordinary entrance effects. bento81 entrances run when a slide arrives; they are not click-to-advance fragments.82 Preserve manual builds as adjacent duplicate slides with shared ids and a83 morph/cut, unless the source behavior is genuinely timed on entry.84- A nonlinear click that reveals detail maps to a `stateOf` slide plus an85 element `link`. A linear next-step click maps to the next ordinary slide.86- A source hover swap may map to `hover` plus `showOnHover`. Do not turn a click87 into hover or hover into click merely because one is easier.88- Map source transitions to the closest supported whole-slide transition only89 when their behavior matches. Reconstruct object continuity with stable90 ids/`morphId`; otherwise a clean cut is more honest than a false morph.91- Native bento links target slide ids. External hyperlinks have no general92 editable element field; preserve the source's visible label without adding93 new slide copy, retain the destination in the fidelity handoff/notes, and94 report the lost click. Use a safe opaque svg link only when the click is95 essential and the user accepts that object as non-native.9697## Completion contract9899The deck itself remains one self-contained `.bento.html` file. In the handoff,100state:101102- the output file;103- whether it is fully offline/self-contained;104- how many source slides and states became bento slides;105- the notable `approximated` and `dropped` fidelity entries;106- the validation result and which visual/interaction checks were performed.107108Do not claim a conversion is complete if the deck has not been opened and every109slide inspected.