Skip to main content

Emmetify 🚀

pypi versions PyPI Downloads codecov license Twitter Follow

Cut your LLM processing costs by up to 90% by transforming verbose HTML into efficient Emmet notation, without losing structural integrity.

Why Emmetify? 🤔

  • 💰 Drastically Reduce Costs - Process HTML with your LLM agents at a fraction of the cost by using our efficient Emmet-based compression
  • 🎯 Maintain Performance - Your LLM agents can still generate XPath and CSS selectors with the same accuracy using the compressed format
  • 🔌 Seamless Integration - Emmet syntax is well-understood by all major LLMs thanks to its 10+ years of widespread use in frontend development
  • ⚡ Fast Processing - Less tokens means faster processing times for your HTML analysis tasks

How It Works 🛠️

Emmetify converts complex HTML structures into concise Emmet notation. For example:

<div class="container">
    <header class="header">
        <nav class="nav">
            <ul class="nav-list">
                <li class="nav-item"><a href="#">Link</a></li>
            </ul>
        </nav>
    </header>
</div>

Becomes:

div.container>header.header>nav.nav>ul.nav-list>li.nav-item>a[href=#]{Link}

Using the OpenAI Tokenizer, we can see this simple transformation reduces token count from:

  • HTML: 59 tokens
  • Emmet: 22 tokens

That's 63% fewer tokens while preserving all structural information! And this is just with default settings.

You can achieve even higher compression rates (up to 90%, or even more depending on the HTML structure) by using advanced configuration options:

  • Removing unnecessary tags
  • Simplifying attributes
  • Optimizing class names
  • Shortening URLs

Check our documentation for detailed optimization strategies and their impact on token reduction.

Why Not Just Use Markdown? 🤔

While Markdown is great for content representation, it removes HTML structure that's crucial for web automation. When working with tools like Selenium or Playwright, you need the actual DOM structure to click buttons, fill forms, and follow links. Emmetify gives you the best of both worlds:

  • Preserves complete HTML structure for accurate element targeting
  • Uses fewer tokens than raw HTML (up to 90% reduction)
  • Allows LLMs to make informed decisions about page navigation and interaction

Perfect for scenarios where you need both efficiency and structural fidelity!

The Technology Behind It 🔍

Emmetify leverages Emmet notation - a powerful and mature syntax that's been a standard in web development for over a decade. While developers typically use Emmet to expand short abbreviations into HTML:

div.container>h1{Title}+p{Content}

↓ Expands to ↓

<div class="container">
    <h1>Title</h1>
    <p>Content</p>
</div>

Emmetify uses this well-established syntax in reverse, converting verbose HTML back into this concise format that LLMs can understand just as well as raw HTML.

Installation 🔧

pip install emmetify

Usage 💻

Basic Usage

from emmetify import Emmetifier
import requests

emmetifier = Emmetifier()
html = requests.get("https://example.com").text
emmet = emmetifier.emmetify(html)
print(emmet)

Advanced HTML Simplification ⚡

Transform verbose HTML into its most essential form while preserving navigational structure. This mode intelligently:

  • Skips non-essential HTML tags
  • Prioritizes important attributes
  • Removes redundant information

For example, this verbose HTML:

<link rel="stylesheet" href="style.css">
<div id="main" class="container" style="color: red;" data-test="ignore">Example</div>

Becomes this concise Emmet notation:

div#main.container{Example}

Much shorter, yet retains all necessary information for LLM navigation and processing!

Advanced Usage:

from emmetify import Emmetifier, emmetify_compact_html
import requests


# Fetch and process HTML
html = requests.get("https://example.com").text

# Configure Emmetifier class
emmetifier = Emmetifier(config={
    "html": {
        "skip_tags": True,
        "prioritize_attributes": True
    }
})
emmetified = emmetifier.emmetify(html)
print(emmetified)

# or use the shorthand function, which is a shortcut for emmetifier.emmetify(html)
# with the default configuration for compact HTML
emmetified = emmetify_compact_html(html)
print(emmetified)

Examples

See the examples directory for more examples of how to use Emmetify.

Backlog 📝

  • Add support for HTML
  • Add examples

Supported Formats 📊

  • ✅ HTML
  • 🚧 XML (Coming Soon)
  • 🚧 JSON (Coming Soon)

Release files for emmetify 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for emmetify 0.1.0
File Size Uploaded
emmetify-0.1.0.tar.gz 51.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for emmetify 0.1.0
File Interpreter ABI Platform
emmetify-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 106.0 kB

Release files / emmetify-0.1.0.tar.gz

Download URL emmetify-0.1.0.tar.gz
Size 51.5 kB
Tags Source
SHA-256 checksum
How to use checksums
ee330d5b3c8fd133db3d3cd033ae48d2ac51c8c953cf75fe999394a085873a10
BLAKE2b-256 checksum
How to use checksums
2ca6bcefbb776d87d7fd1827ee2cb05ec472801ae1af9ed6c1e7bc14f5e5901c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 27, 2025.

Transparency log

Release files / emmetify-0.1.0-py3-none-any.whl

Download URL emmetify-0.1.0-py3-none-any.whl
Size 54.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91fbe4123d06b0b8fe2bcce19dd5d59bd24495cd920eae35a13c14be991950b2
BLAKE2b-256 checksum
How to use checksums
b04d97005136315822f097f1e32aa9f1cc3c078e4dec200a2b1aa0fd3242c13a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 27, 2025.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page