HTML is a native image format, hear me out(hmml.eddocu.com) |
HTML is a native image format, hear me out(hmml.eddocu.com) |
Is it HTML and its contents (e.g. images) in a binary format?
you can go devtools at https://hmml.eddocu.com
it downloads single binary that contains media assets (svg, image, video, ..) and html/css blueprint, even js (security concerns!)
Apparently it's mostly this:
// ENCODE — pack(html) → one .hmml (a Uint8Array you store or send)
// · lifts every data: image out of the HTML into raw bytes (no base64)
// · gzips the HTML/CSS/JS and frames it all as one binary blobIf the goal is self-contained documents, is there anything here that can’t be achieved with SVG alone, using SMIL [1] and embedded HTML via <foreignObject>? Or an existing engine like Rive?
[1] https://developer.mozilla.org/en-US/docs/Web/SVG/Guides/SVG_...
1- html/css has more layout capabilities. 2- js 3- its a packing strategy. If you plan to serve images + svgs altogether, either you need to base64 encode or pack like hmml, binary
Why the comparison with Base64 when Base64 itself has approximately 33% size overhead?
You have 2 options.
- Embed images into html (base64, size overhead)
- embed html/css/js into media binaries
.hmml is the packing strategy for option two. 2kb js for encode/decode. And extra rantings around what a 'digital image' is
- Save the page as a self-extracting ZIP file, see https://github.com/gildas-lormeau/Polyglot-HTML-ZIP-PNG
$ head -c 1000000 /dev/urandom | base64 -w0 | gzip | wc -c
1009042
$ head -c 1000000 /dev/urandom | base64 -w0 | zstd | wc -c
1000300
So gzipped base64 can add less than 1% overhead. Of course a binary format can be even more efficient (also when decoding, I imagine) but the question is if the difference is big enough to introduce an entirely new format when base64 data URIs are already widely supported.Then the other question is why this proposed packed format is better than the dozen already existing formats like Web Archive, CHM, MAFF, MHTML, etc.
I got lost
in the meantime you can take a look at this
- Come up with a file extension (.hmml)
- Decide on an entrypoint filename and format (index.html)
- Use an existing standard for combining resources into one file (tar + zstd)
Now you have something that is usable only using pre-existing tools.
in fact this is both a packing strategy or a POV of thinking. Next browser versions could support it.
<img src="html-underdog.hmml" />
or
when tomorrow's genai models mix declarative images with rasters, then they would like something like this
or
OS -> html-underdog.html double clicks -> browser opens it.
data:image/svg+xml,
<svg xmlns="http://www.w3.org/2000/svg">
<foreignObject width="100%25" height="100%25">
<div xmlns="http://www.w3.org/1999/xhtml">
Behold!
</div>
</foreignObject>
</svg>Plus zipping that one file is you insist on a smaller file size
Even then base64 is worse in size though
Also I wouldn't prefer serving a zip and load and render it within my web app (extra overheads).
All we need is browsers to render Served MHTML
And JS Support in MHTML
https://x.com/yeargun24/status/1825516494861508943?s=20
And, yes. HTML & CSS rendering without js is doable with like max 400mb of ram? Idk. Sometimes the tradeoff worths, sometimes not
Then with html + rasterized images (.jpeg/.png, ..) you would have to pay extra size overhead caused by base64.
With hmml, you dont
Say I want to distribute an hmml file as a single file, I'd have to create an html with the embedded js runtime, and then embed the hmml file... as b64, therefore negating any benefits.
The AI slop homepage is really offputting too.
That's a particularly long discussion.
""" Open Bug 40873 Opened 26 years ago Updated 27 days ago """
So if you need some such feature in your web app, and if you are okay with 2kb encode/decode js. Its all good.
At least the posts are pretty much not AI slop I guess.. But I'll take your feedback. Thanks!
The frequency of these things certainly rose with AI.
can you revisit please? What browser are you using ?
The library is not curing cancer And also it's the first time im hearing that its not working.
My goal was to discuss the meaning of what a 'digital image' is.. You can also take a look at this https://www.reddit.com/r/Design/s/7KLKg3wS0D
1- For design tools, they can combine multipe images, texts, svgs and serve them with single pack/abstraction
2- When you need editable/composable images.
3- Future genai models for generating visuals/html/js/svg would have more feature rich abstraction/toolset
4- When you want to prevent base64 size overhead
PDF is an irreversible format in terms of editability. (btw I build the world's most performant pdf/pptx editor at https://eddocu.com , I would enjoy if you have any feedback)
Regardless, I cant find the relation in between.
It's like an abstraction that might help future genai models, or a packing strategy, or ..
I guess it happens when people vibecode and the llm generates code, and it cannot verify that the interface actually works well. Even with agents that use drivers either directly or through playwright/selenium, they might only see a single screenshot, so no video.
Anyways, immediately stopped reading, as the new adage goes, why should I read something you weren't bothered to write?
We consider rasters as image (.jpeg, .webp, ..)
We also invented svgs, its a vector. SVG is a declarative language, has its own format and has own renderer
HTML, CSS is no different. `<div style="background:black">html is underdog</div>`
Having this perspective on our mind, even considering any imperative code as a native image makes complete sense. `canvas.drawCircle();`
So, .html/.hmml/.js is as image as .webp
====
## How can we/future's genAI models could leverage the world's most popular and feature rich image format (HTML, CSS, JS, SVG, IMAGE altogether). And how can we leverage it to build editable/composable images?
This so to 'popular' image format we call .html has a caveat. It's UTF-8, and whenever you need to embed any resource, you either need to base64 encode it(it has extra size overhead) or link the resource as a seperate thing. So.. as you decide to serve single pack of data for a single image, a binary packing strategy makes sense.(Image can be anything as we discussed earlier)
To match these concerns, we created/proposing you a new format, HMML (HyperMedia Markup Language).
HMML (HyperMedia Markup Language) is a declarative+imperative markup+ language for images/videos/media.. *HMML is HTML, CSS, JS, SVG, image, but not UTF-8.*
and we have a npm library that does encode/decode of this binary format, and mounts the so to image into dom. (2kb js for encode/decode each. For comparison React is 90kb js. )
`npm i @eddocu/hmml`
# image-leftdog-rightcat.html
``` <div style="display:flex"> <img src="base64" alt="i am dog image" /> <img src="base64" alt="i am cat image" /> </div> ```
Apart from doing this, hmml does embed the html, css, js blueprint into media binaries
# image-leftdog-rightcat.hmml
`binary stuff`
People already do similar things. But this format or POV of thinking accepts html/css/js as a native image format. Excited to see if future operating systems/browsers also accepts this format. <hmml /> or <img src="maybe.hmml" />
===
``` <Technical-Appendix> The word "green apple" is an image, that has no format and no renderer.
`const vectorMultiDimensional_768 = get_word_embeddings("green apple")` Now the word green apple has a format, its: "embedded by Embedding Model X" If you had a renderer as such Embedding_Model_X.render()
Now you could call entire english sentences/paragraphs are images. </Technical-Appendix> ```
bs or not. what you think?
like when you think about it we're already doing this with svg and nobody bats an eye. svg is literally xml markup that renders as an image and everyone just accepts it as normal
also the composability angle is interesting. being able to edit an "image" by just opening it in text editor instead of photoshop has some appeal
Until they support .hmml imma close my image tags. But thanks for highlighting
(its a joke)