idmly
About Try the converter Live · $49 license
Reference

What converts, what doesn't: the rules idmly applies to your HTML

Updated October 2026 · matches the live engine

idmly takes one self-contained .html file with fixed-size pages and writes a native InDesign .idml. Text, tables, inline SVG, images, gradients, shadows and rounded corners come out as the InDesign objects they correspond to, not as pictures. The page is rendered in a real browser and measured, so what converts is what the browser draws.

This page is the complete list of rules the converter actually enforces, taken from the engine, not from a brochure. If something on your file fails, the reason is here.

Six sections: the file, the pages, what becomes a native object, what is left out, fonts, and every message the converter can return with its fix. The free trial's rules are at the end.

1. The file

One .html file, uploaded on the File tab or fetched from a public link on the URL tab. The same file works through the MCP server and the API.

  • ✓Self-contained. CSS in a <style> tag. A Google Fonts <link> is fine. Scripts may run, but the design must reach a stable state on its own (see section 6).
  • ✓Images embedded or public. data: URIs always work and do not count toward any cap. Absolute https:// URLs are downloaded, up to 64 distinct images per trial conversion and 150 per licensed one. A relative path to a folder beside the file is a broken image, because a single-file upload cannot carry the folder.
  • ✓Size. Up to 15 MB on the free trial, 50 MB with a license. Big files are nearly always embedded photos, so downscale or re-encode them, or host them and link by URL.
  • ✓URL mode wants the design, not an app. Only public http or https hosts are fetched. Links to claude.ai, chatgpt.com, figma.com, canva.com, gamma.app, Google Docs, Drive, Dropbox, Notion and Adobe's Publish Online or Acrobat viewers are refused up front with the reason: they open an app or a viewer, never the raw file. Download the .html and use the File tab. Private and local addresses are refused too.

Claude's downloadable exports are handled as they are: a "Bundled Page" is unpacked, a multi-page bundle with each page in its own frame is captured page by page, and a web-component export whose component scripts stayed behind on the server (it opens blank on its own) is rebuilt at the size the file declares. The result tells you when any of that happened.

2. The pages

HTML has no pages, so idmly looks for the containers that act as pages, in this order, and stops at the first that matches.

  1. Named page containers.Elements with class page, slide or sheet, or Claude's data-screen-label screens. Nested ones resolve to the outermost.
  2. Page-sized sections.Top-level <section> or <article> elements of print-page proportions, directly under body or one wrapper down.
  3. A single fixed-width canvas.One fixed-width root inside a fluid body, the shape of a poster or one-pager, becomes one page at that size.
  4. Whole-page fallback.Nothing above matched. The entire document converts as one tall frame and the result says so, with the fix: wrap each page in a container with class="page".

Each container becomes one InDesign page at its own rendered size, so pages in one file may differ in size. 816 × 1056 px is US Letter, 794 × 1123 px is A4, 1920 × 1080 px is a 16:9 slide. Give the container overflow:hidden so nothing bleeds across pages. A container with class spread becomes a two-page facing spread. A Claude Design canvas with several artboards converts one artboard per page at on-screen scale, which the result flags so you can set the trim size afterwards.

3. What becomes a native InDesign object

Everything in this table is editable in InDesign afterwards. Nothing is rasterised.

In the HTMLIn the .idml
TextText frames with named paragraph styles and named character styles. Alignment, leading, letter-spacing, weight, italic, colour, superscript and forced breaks carry through. Whitespace collapses the way the browser collapsed it.
Stacked paragraphsOne flowed story per column with paragraph breaks, measured space before and after, first-line indents and tab stops. Add data-idml-thread to frames you want threaded across pages.
ListsNative bullets and numbering, including start, value, alphabetic and roman types.
CSS columnsA native multi-column text frame, not several frames.
HTML tablesInDesign tables with header rows, colspan, rowspan and per-cell fills, borders and alignment.
Inline SVGEditable bezier paths with fills and strokes. Compound paths keep their holes, <use> symbols and clip-path are honoured, stroke-dasharray becomes a native dashed stroke. Charts drawn as SVG stay recolourable.
PDF-to-SVG textLetter outlines from a PDF export are read back into editable text at the measured size, colour and baseline, set in a generic stand-in font. Convert the original HTML instead when you can.
GradientsLinear and radial colour gradients become native InDesign gradients. A single colour fading to transparent becomes a gradient feather. Hard-edged radial disks over a base become clipped circles.
Conic-gradient donutRing segments as polygons, one per slice.
BoxesFills, borders, hairline rules, per-corner border-radius (half-pills and top-rounded cards keep their shape), CSS border triangles as polygons, box-shadow as a native drop shadow, rotation as a rotated frame.
overflow:hiddenA shape cut by a clipping ancestor or the page edge is nested inside an invisible container, the same as Paste Into.
ImagesPlaced and linked from a Links/ folder beside the .idml, with object-fit cover, contain and fill honoured and the frame's radius clip kept. The download is a zip when there are images.
Form fieldsThe visible value of inputs and selects, as text, in the right stacking order.

Every conversion ends with a geometry check: each frame in the .idml is compared with the box the browser drew, and the result reports ok or drift. Drift is rare and means a frame may sit slightly off; compare against the HTML.

4. What is left out, and why

  • ×Motion and interaction. Video, iframes, embedded players, animation and hover states are not objects on a page. The design is captured at rest, after it has loaded and settled.
  • ×Files the HTML points at but does not carry. A sibling assets/ folder, a server path from the AI tool, a blocked host: the frame is placed empty and the result says how many and why. Embed the images and convert again.
  • ×More linked images than one conversion downloads. Past the cap (64 trial, 150 licensed) frames are left empty and the result names the count. Embedded images never count, so embedding is the fix.
  • ×An .svg file used as an <img> that cannot be inlined. It is written to Links/ but not placed. Paste the SVG inline and it becomes editable vectors.
  • ×Multi-stop transparency fades. An opacity veil with several stops flattens to one fade from its strongest stop to transparent. Colour gradients are unaffected.
  • ×Prepress. No trim, bleed, slug or printer's marks are emitted; margins are zero. Set the document to the final trim plus bleed in InDesign.
  • ×Font files. Fonts are bound by name, never embedded or outlined. Section 5 covers what that means for you.
  • ×Websites. A fluid page with navigation and a scrolling body is not a design. It converts as one tall frame and the result says the layout may be rough. idmly is for fixed-layout documents.
  • ×Trifold and gatefold spreads. A spread container is always two pages.

5. Fonts

The .idml names every font family the design used, and the result lists them under "fonts to activate". InDesign needs those families active on the machine that opens the file; otherwise the text is highlighted pink until you install them. AI tools reach for Google Fonts almost every time and those are free to install.

Weights map to the nearest style the family ships, and italic to that weight's italic or oblique where one exists. One failure looks like a conversion bug and is not: if two versions of a family are active at once, say Adobe Fonts and a local Google Fonts copy, InDesign draws scrambled glyphs from an intact file. Deactivate one copy.

6. Every message the converter can return

These are the exact conditions, in the order they are checked. Each message carries its own fix; this is the longer version.

MessageWhat happenedFix
Not an .html fileThe upload was a PDF, an image, a zip or a share link.idmly works from the design's .html file. Download that from the tool and upload it, or paste a public link to it.
Over the size limitLarger than 15 MB (trial) or 50 MB (licensed).Downscale or re-encode embedded images, or host them and link by https URL.
That URL isn't a designThe link points at an app, a viewer, a login wall or a private address.Download the .html and use the File tab. For tools that export only PDF or PNG, export HTML from a tool that can.
Bundled Page didn't finish unpackingA Claude Bundled Page never unpacked, usually because an injected analytics script broke the export when the opened page was re-saved.Re-download a fresh copy from Claude using its Download action, not "Save page as", and convert that.
Every page came out emptyPages were found but nothing was visible: the design needs component scripts or a stylesheet that sat next to the file, or only draws on its original site.Re-export as a single self-contained .html. Most blank web-component exports are rebuilt automatically; this message means that was not possible.
No pages foundThe file has no visible content.Open it in a browser. If it is blank there, it is blank for idmly.
Never finished renderingA script keeps running forever, typically a MutationObserver or resize handler that re-triggers itself, so there was nothing stable to measure.Open the file in a browser; if the tab freezes, that is the same fault. Remove or fix the script and convert again.
This design already had its free trialThe pages about to convert are pages an earlier trial held back, or the file carries the fonts, styles and colours of a design that already used its free pages. One free trial per design.Re-exporting the same design is always allowed. For the rest of the document, a $49 license converts every page.
A full hour or day of free trialsThree keyless conversions an hour, or six a day, from one network.Wait, or license.
License key rejectedA key was sent and did not validate. idmly never silently falls back to a trial when a key is present.Check the key against your purchase email.
Slow downToo many requests in a minute.Wait the number of seconds in the message.
Conversion failed, that design tripped a bugThe engine hit something it has never seen.Use "report a broken file" on the converter. The file goes to a human and the fix ships for everyone.

The free trial

Without a license, idmly converts a design's two most detailed pages: the ones carrying the most tables, charts, images, gradient panels and text. A cover and a contents page rarely qualify, which is the point; you should judge the converter on the pages that matter. The pages come back in document order, the file is named -trial, and the result names which pages they were and how many were held back. A design of two pages or fewer converts in full. Each design gets one free trial, counted on its content rather than your browser, so a re-export of the same design after a fix still converts, while splitting a document into pieces to convert it two pages at a time does not. Two free conversions per browser, no account. A $49 lifetime license converts every page of every design, through the website, the API and the MCP server.

Frequently asked questions

What kind of file does idmly accept?
One self-contained .html file, or a public https link to one. CSS inline in a <style> tag, images as data URIs or public URLs, fonts by name through a Google Fonts link. Up to 15 MB on the trial, 50 MB licensed. Share links from claude.ai, chatgpt.com, Figma, Canva or Drive open an app, not the file, so download the .html and upload that.
How does idmly decide where the pages are?
It looks for fixed-size page containers: class page, slide or sheet, Claude's screens and documents, page-sized top-level sections, or a single fixed-width canvas. Each becomes one InDesign page at its own size. With no page structure the whole document converts as one tall frame and the result says so.
Which parts of the HTML become editable InDesign objects?
Text as frames with named paragraph and character styles, stacked paragraphs as flowed stories, lists with native bullets, CSS columns as multi-column frames, HTML tables as InDesign tables, inline SVG as editable paths, CSS gradients as native gradients, shadows as drop shadows, rounded corners and clipping kept, images placed and linked. Section 3 has the full table.
What does idmly not convert?
Anything not on the rendered page: video, iframes, animation and interactivity are captured at rest. Images the file points at but does not carry arrive as empty frames. An SVG used as an <img> that cannot be inlined is written to Links but not placed. No trim, bleed or marks; fonts named, not embedded; a fluid website converts as one tall frame.
Why did my conversion fail?
The three real refusals: a Claude Bundled Page that never unpacked (re-download it), every page rendering empty because component scripts stayed behind (re-export as self-contained HTML), and a script that never stops running (remove the self-retriggering observer). Size, trial and rate limits return their own messages with the fix in them. Section 6 lists all of them.
Which pages does the free trial convert?
The two most detailed pages of the design, chosen by what they carry: tables, charts, images, gradient panels and text volume. They come back in document order and the result names them. One free trial per design; re-exporting the same design is fine; a license converts every page.

Know the rules. Now test them on your own file.

Drop your design in and its two most detailed pages come back as a native, editable InDesign file, free. No account needed.