🚀
Quick Start
Get your first variation in under a minute
1
Paste your HTML
Click inside the code editor on the right panel and paste your email HTML. Or click Load sample to use the built-in demo email. You can also use the Fetch URL tab to load HTML directly from a website.
2
Collapse the editor to see all options
Click the button in the Input card header to collapse the editor. This reveals all Modes, Parameters, and Transforms without scrolling. Click + to expand it again anytime.
3
Select your modes and set intensity
Check one or more modes in Select Modes. Adjust the Intensity % — start at 30–50% to keep the email looking normal, increase to 100% for maximum variation. Enable Safe Mode if you never want the email to look scrambled.
4
Preview and generate
Click Preview one to see a single variation in the preview pane. When happy, click Generate & Download to download a ZIP of all your output files.
Tip — Transform selection: Highlight specific HTML lines in the editor and click Transform selection to apply your active modes only to that chunk, leaving the rest of the template untouched.
violmixxer — HTML Randomizer
Input card Editor (320px) — click to collapse and reveal all options below
Select Modes Split & invert Synonym swap Delete tags ✓
Intensity 60% — about 60% of text nodes will be transformed, rest left untouched
Safe mode ON — word order never changes, email always renders correctly
⚙️
Modes
Select one or more — applied in sequence when you Preview or Generate

Modes are the main transformations applied to your HTML. You can enable multiple modes at once — they stack. All modes respect the Intensity % setting.

Multi-select: Click any mode tile to check it. Checked tiles are highlighted in blue. Click again to uncheck. There is no limit — you can have all modes active at once.

⊞ Table layout

Wraps each word in visible text nodes in its own <span style="display:inline-block;padding:0 2px;">. Word order is preserved — the email reads identically. The HTML structure becomes much more complex and harder for spam filters to pattern-match against known templates.

When to use: When you want the source structure to look different from a standard flat text template without changing the reading experience.

Before
<p>Win a huge prize today!</p>
After
<p><span style="display:inline-block;padding:0 2px;">Win</span> <span style="display:inline-block;padding:0 2px;">a</span> <span style="display:inline-block;padding:0 2px;">huge</span>...</p>
Safe for readers. Word order is never changed — only the surrounding HTML structure differs.

↔ Split & invert

Inserts invisible zero-width space characters (Unicode U+200B) between randomly selected character pairs in every word. These characters are completely invisible to human readers — the word looks and reads normally. Spam filters doing exact string matching see a broken pattern they cannot recognise.

What you see
Win a prize
In the HTML source
W​in a p​ri​ze
Safe for readers. Zero-width spaces are completely invisible — the email renders identically. Works reliably in Outlook, Gmail, and Apple Mail.
Safe with other modes. This mode inserts a real Unicode character (not an HTML entity), so it stacks safely with "Wrap letters" without causing any visual corruption.

Aa Wrap letters in SPAN

Wraps every non-whitespace character in its own <span></span>. The email looks identical but the HTML source is much harder to pattern-match because every word is broken into individual tags.

Before
Hello
After
<span>H</span><span>e</span><span>l</span><span>l</span><span>o</span>
Warning: This mode greatly increases HTML file size. At Intensity 100%, every character gets wrapped. Lower the Intensity to 30–50% to only wrap some text nodes.

¶ Wrap text nodes

Wraps each entire text block in a single <span>. Unlike "Wrap letters" it doesn't break words apart — it just adds a container. The email renders identically.

Before
<p>Click here to win!</p>
After
<p><span>Click here to win!</span></p>

≈ Synonym swap

Replaces common spam-trigger words with contextual synonyms. For example free becomes complimentary, win becomes earn. The Intensity setting controls what percentage of trigger words are replaced — at 50% about half the found words get swapped, keeping the email reading naturally.

Built-in trigger words include: free, win, bonus, prize, cash, money, limited time, act now, urgent, exclusive, click here, buy now, and 20 more.

Safe for readers. Synonyms are chosen to preserve meaning. The email reads naturally.

Appends random query parameters to every href URL in the HTML. The link still works — it goes to the same destination — but the URL string is different every time. Useful for making each variation trackable and unique.

Before
href="https://example.com"
After
href="https://example.com?r=73841&_v=512"
Works fully offline. No external requests needed.

🖼 Images → Base64 Needs internet

Downloads each external <img> image and converts it to a Base64 data URI embedded directly in the HTML. This means the image is no longer loaded from an external server — it's baked into the file.

Requires internet. The app fetches each image URL using your browser. If the image server blocks CORS requests or you are offline, that image is silently left as-is. Data URIs can be very large for high-resolution images.

🖼 Unique Base64 Needs internet

Same as Base64 but appends a unique random suffix to each image's data URI per variation. This means every output file has a slightly different image string even though the image looks identical. Useful for making each file cryptographically distinct.

◻ Images → background-image

Replaces every <img> tag with a <div> that uses the same image as a CSS background-image. The visual result is similar but the HTML structure is completely different from a standard img tag.

Before
<img src="banner.jpg" width="600" height="200" alt="Banner">
After
<div style="background:url(banner.jpg) no-repeat center/contain;width:600px;min-height:200px;display:block;" role="img" aria-label="Banner"></div>
Works offline. Does not download anything — just rewrites the HTML structure.

💬 Comment break

Inserts an empty HTML comment <!----> at a random position inside words in text nodes. Email clients (Outlook, Gmail, Apple Mail) strip HTML comments when rendering — the reader sees the full, unbroken word. Spam filters that do exact byte-level string matching see a broken pattern.

What you see
free bonus offer
In the HTML source
fr<!---->ee bo<!---->nus of<!---->fer
100% safe in all email clients. HTML comments are stripped during rendering — no visual change, no layout change. This is one of the most effective and safest modes.
Works fully offline. No external requests needed.

⇄ Shuffle attributes

Randomly shuffles the order of HTML attributes on every tag. For example, a tag that originally has src then alt then width might be reordered to width then src then alt. Browsers and email clients parse attributes regardless of order — the email renders identically. The source fingerprint changes every time.

Before
<img src="img.jpg" alt="Photo" width="600" height="300">
After
<img height="300" src="img.jpg" width="600" alt="Photo">
Zero visual impact. Attribute order is semantically irrelevant in HTML — the email looks and functions identically in every email client.
Works fully offline. No external requests needed.

🗑 Delete tags

Removes <script> and <noscript> tags from the HTML. These are execution-risk tags that spam filters flag. Style, meta, and link tags are kept intact so your email layout and CSS rules are never affected.

Enabled by default. Removing script tags is always safe for email. All other structural tags (<style>, <meta>, <link>) are preserved.
🎛️
Parameters
Numeric controls for transform strength

Color variation range

Each hex color and rgb() value in the HTML is shifted by a random amount up to this value. Default: 11. At range 11, colors shift by up to ±11 on each RGB channel — a subtle difference invisible to the human eye but detectable in source comparison. Set to 0 to disable.

Before (range=11)
color: #3b82f6
After
color: #2e7af4

Padding / Margin range (px)

All padding and margin values are shifted by up to this many pixels. Default: 5. At range 5, a padding: 20px might become padding: 18px. Layout stays visually intact. Set to 0 to disable.

Number of output files

How many unique variations to generate when you click Generate & Download. Default: 5. Each file gets its own independent set of random changes. Maximum: 100.

Intensity %

The master dial for how aggressively transforms are applied. Range 0–100%, default 60%.

  • 0% — no text nodes transformed at all, color/padding ranges scale to 0
  • 30% — subtle: only about 30% of eligible text nodes get transformed
  • 60% (default) — moderate: good balance between variation and readability
  • 100% — maximum: every eligible element is transformed
How it works: At each text node, violmixxer rolls a random number 0–100. If the roll is below the Intensity value, the transform is applied. Color and padding ranges are multiplied by intensity / 100.
Recommended settings by goal:

Just want variation, email must look perfect: Intensity 30–50% + Safe Mode ON
Maximum uniqueness, don't care about readability: Intensity 100%, all modes enabled
Balanced: Intensity 60% (default), Safe Mode OFF, 2–3 modes selected
🔧
Always-on Transforms
Applied to every output file regardless of selected modes

These toggles run after all Modes have been applied. They are independent of mode selection — they always run when enabled.

Rename class and id ON by default

Renames every class="" and id="" attribute to a unique random string like vx_0_ab3cd. Also updates matching selectors inside any <style> blocks so CSS rules stay linked. Makes fingerprinting the template much harder.

Before
<td class="header">
After
<td class="vx_0_k3p9q">

Randomly replace tags ON by default

Swaps HTML tags with compatible alternatives that have the same display type. For example <div> may become <section> or <article>. <span> may become <em> or <strong>. Table structure tags (table, tr, td, th) are never swapped to prevent layout breakage.

Safe mode disables this. When Safe Mode is ON, tag replacement is skipped entirely.

Font alternatives OFF by default

Swaps font-family declarations with equivalent alternatives. For example Arial may become Helvetica, Georgia may become Times New Roman. The email looks virtually identical because the fonts are similar.

Add HTML comments OFF by default

Inserts random HTML comments between tags, such as <!-- section-1047 --> or <!--[if gte mso 9]><![endif]-->. Comments are invisible to email recipients but differ in every variation. Only injected outside of <head>, <style>, and <script> blocks.

Character encoding variation OFF by default

Randomly converts some vowels and common characters (a, e, i, o, s) to their HTML entity equivalents. For example a&#x61;. The browser renders them identically but the raw HTML looks different. The Intensity setting controls the probability of each character being encoded.

Before
earn
After
&#x65;&#x61;rn

Inline styles → classes OFF by default

Moves repeated inline style="" attributes into a <style> block and replaces them with unique class names. Reduces file size when many elements share the same styles. The email renders identically.

Safe mode disables this. Moving styles to a class block can occasionally cause rendering differences in email clients that don't support embedded CSS.

Convert output to image (PNG) OFF by default

After all transforms, renders the HTML to a <canvas> using html2canvas and saves each variation as a PNG image instead of an HTML file. The ZIP will contain PNG files instead of HTML files. Useful for creating image-only emails that bypass text-based filters entirely.

Best on a local server. Run python -m http.server 3333 in the violmixxer folder and open http://localhost:3333 for the most reliable rendering. From file:// some cross-origin resources may not render.

Safe mode (letter stays readable) ON by default

When enabled, violmixxer guarantees the email output is visually identical to the input. The following are automatically skipped regardless of your other settings:

  • Table layout mode — skipped (wraps words in spans; can affect line wrapping in narrow containers)
  • Randomly replace tags — skipped (structural tag changes can affect rendering in strict email clients)
  • Inline styles → classes — skipped (some email clients don't support embedded CSS, so this can break layout)

All other modes and transforms still run with Safe Mode ON — Split & invert, Comment break, Shuffle attributes, Synonym swap, Character encoding, Randomize links, Color/padding variation, Rename class/id, Font alternatives, Add HTML comments. All of these are invisible to human readers.

Recommended for production use. Safe Mode is ON by default. Turn it OFF only when you want maximum variation for testing filter behaviour.
✂️
Transform Selection
Apply modes only to a specific part of your HTML

Instead of transforming the entire file, you can select a portion of the HTML in the code editor and transform only that selection. The rest of the template is left completely untouched.

1
Select the HTML you want to transform
Click inside the code editor and drag to highlight the specific lines or elements you want to change. This works exactly like selecting text in any text editor. You can select a single word, an entire element, or multiple lines.
2
Make sure at least one mode is checked
The transform uses your currently active modes and intensity setting. For example if "Synonym swap" is checked at 60% intensity, only synonym replacement will be applied to your selection.
3
Click "Transform selection"
The blue Transform selection button appears in the editor toolbar (next to Load sample / Clear / Format). Click it and the selected HTML is replaced with the transformed version. The preview updates automatically.
Undo: Use Ctrl+Z in the editor to undo a transform selection if you don't like the result.
Tip: Select only complete HTML elements (from the opening <tag> to the closing </tag>) for the cleanest results. Selecting partial attributes or mid-tag text can produce malformed HTML.
🛡️
Safe Mode
Guarantee your email always looks correct to recipients

Safe Mode is a single toggle in the Always-on Transforms card. When enabled, violmixxer automatically disables any transform that could cause the email to render differently for human readers.

TransformSafe Mode OFFSafe Mode ON
Split & invert (bidi trick)Runs ✓Runs ✓ (visually safe)
Wrap letters / Wrap text nodesRuns ✓Runs ✓ (visually safe)
Synonym swapRuns ✓Runs ✓
Randomize linksRuns ✓Runs ✓
Color variationRuns ✓Runs ✓
Class/id renameRuns ✓Runs ✓
Table layout (shuffles words)Runs ✓Skipped ✕
Replace tagsRuns ✓Skipped ✕
Inline → classesRuns ✓Skipped ✕

Intensity is documented in the Parameters section above.

📊
Template Analyzer
Understand your template before transforming it

Click Analyze Template in the top bar to scan your pasted HTML and get a report. No external requests are made — analysis runs entirely in your browser.

Stats

The analyzer counts: total word count, number of <img> tags, number of <a> links, and total HTML file size in KB.

Spam Score

The analyzer checks the visible text against a list of 50+ known spam trigger words. The score (0–100) shows how risky the template looks to spam filters:

  • 0–20 — Low risk — few or no trigger words
  • 21–49 — Medium risk — some common trigger words present
  • 50+ — High risk — many trigger words, recommend running Synonym swap mode

Spam Trigger Words

All detected trigger words are listed as individual tags. Use the Synonym swap mode to automatically replace them.

External References

All href, src, and CSS url() values pointing to external domains are listed. This helps you identify which images or links are loaded from third-party servers — potential tracking vectors or deliverability risks.

📦
Output & Downloads
Preview, generate, and export your variations

Preview one

Generates a single variation and displays it in the preview iframe on the left. Use this to quickly check whether your settings produce the output you want before committing to a full batch.

Generate & Download

Generates N independent variations (where N = Number of output files setting) and packages them into a single ZIP file named violmixxer-output.zip. The ZIP contains:

  • violmixxer-1.html through violmixxer-N.html — when Convert to Image is OFF
  • violmixxer-1.png through violmixxer-N.png — when Convert to Image is ON

Copy HTML

Copies the last generated variation to your clipboard as raw HTML text. You can then paste it directly into your email sending tool.

Fetch URL tab

Instead of pasting HTML manually, enter a URL in the Fetch URL tab and click Fetch & Load. violmixxer tries to load the page in this order:

  1. Direct fetch (works on localhost or same-origin)
  2. corsproxy.io — free public CORS proxy
  3. api.allorigins.win — second free proxy
Some sites block all proxy requests. If Fetch fails, open the target page in your browser, press Ctrl+U to view source, select all, and paste directly into the HTML editor.
🌐
What Works Offline
Know which features need internet before you start
FeatureWorks offline (file://)?Notes
All text modes (Table, Split & invert, Wrap letters, Wrap text, Synonym)YesNo network needed
Comment breakYesInserts HTML comments — pure string manipulation
Shuffle attributesYesReorders tag attributes — pure string manipulation
Randomize linksYesJust rewrites href text
Images → bg-imageYesRewrites HTML structure only
Delete tagsYesStrips script/noscript tags from source
Color / Padding variationYesPure string manipulation
Rename class/idYesPure string manipulation
Replace tags / Font alternativesYesPure string manipulation
HTML comments / Char encodingYesPure string manipulation
Inline → classesYesPure string manipulation
Preview & Generate & DownloadYesAll client-side
Template AnalyzerYesAll client-side
Fetch URLPartialTries 2 public CORS proxies — works for most URLs, some may block
Images → Base64 / Unique Base64PartialNeeds CORS-accessible image URLs. Blocked images are left as-is.
Convert to image (PNG)PartialWorks from file:// but external resources won't render. Use a local server for best results.
Running a local server (recommended for Convert to Image):
Open a terminal, navigate to the violmixxer folder, and run:
python -m http.server 3333
Then open http://localhost:3333 in your browser.