Silhouette + URL → scannable art

QR CODES
SHAPED LIKE ANYTHING

Bring your own shape — upload any silhouette (logo, animal, object, drawing, or anything you want). Paste a URL. Get a real, scannable QR code that exactly conforms to your shape. Presets available too. One studio.

Drop your shape here

PNG · JPEG · SVG · STL — we route you automatically

13presets live
LIVEcamo gallery
5ink / QR
50free ink
Shaped QR example
SPRINT CAR · LIVE
Presets 13
Upload ANY
Ink 5/QR
Scan TRY

Process

THREE INPUTS · ONE CODE
01

Silhouette

Drop a file on the landing page or pick a preset in studio. Photos auto-prep to black-on-white.

PNGSVGSTL
02

Destination

Any URL — site, checkout, tel, wifi. Module density auto-fits length.

httpstelwifi
03

Generate

Max-fit placement, drag to tune, phone scan. Export PNG, SVG, or STL.

PNGSVGSTL

One studio

13 PRESETS + UPLOAD · CAMO BY DEFAULT

Drop → generate

Max-fit places the QR inside your silhouette. Drag to adjust. Decoy noise fills the shape unless you dial noise down in Style controls.

Open studio →

Auto prep

JPEG/PNG photos run through Inkwell in the background (same edit API as image-editor, hidden prep route) with an optimized silhouette prompt — no separate “silhouette” button.

Requires Inkwell sign-in for photo prep. SVG/STL skip prep.

Use cases

WHERE IT WINS
🏁

Race merch

Sprint car → driver page. Pivot Stick on racer.wiki · tees, helmets, decals.

🐾

Pet tags

Animal silhouette → owner contact or vet record.

🦅

Museums

Artifact or wildlife shape → exhibit or audio guide.

📖

Print

Book or invite shape → author page, RSVP, menu.

🌮

Food trucks

Product silhouette → ordering link on the wrap.

Industrial

Equipment icon → service form or asset record.

👑

Events

Crown, star, badge → tickets and offers.

🤖

Agents

MCP generates on demand for campaigns and products.

For agents

MCP · AUTOMATED QR

Hand-build in the studio or wire an agent. One tool call, silhouette in, image URL and scan status out.

  • Base64 PNG, public URL, SVG, or STL silhouettes
  • Inkwell wallet · Studio Pass $5/mo · 1 ink per shape · 1 ink per QR
  • Auto-refund when generation does not scan
Full MCP docs →

Also: Slant 3D print-farm guide (BYOK MCP) · Pivot Stick on racer.wiki

POST https://shapedqr.com/api/qr-studio-mcp
Header: X-MCP-Source: your-agent-name

{"jsonrpc":"2.0","id":1,"method":"tools/call",
 "params":{"name":"generate_geometric_qr",
  "arguments":{"url":"https://yoursite.com",
   "shape_slug":"heart"}}}

Guides

PRINT FARM · RACE TOOLS
3D

Slant 3D API

Free walkthrough for Slant’s US print farm — upload STL, quote, draft orders, ship. Bring your own API key; MCP for Cursor and Claude.

Open Slant 3D guide →

Pivot Stick

Setup and pivot tooling on racer.wiki — built for dirt racers, works alongside shaped merch and QR lockups.

Pivot Stick on racer.wiki →

Pricing

PAY FOR OUTPUT

Inkwell wallet

Same ink_balances email as inkwell.wiki — buy ink packs there. No shared pool, no free trial.

inkwell.wikiemail
$5

Studio Pass

$5/month — 5 shape credits (trace or generate). Good if you do not want to buy ink packs.

subscription5 shapes
1

Pay per use

Otherwise: 1 ink per custom shape trace · 1 ink per QR. Layout previews while you drag stay free.

tracegenerate

Buy ink on Inkwell · or open studio and choose Studio Pass at checkout.

FAQ

COMMON QUESTIONS
Open the gallery or studio and scan on your phone — that is the proof. For print: module size scales with width. At 12″ art width, typical layouts land modules around 0.07″+ (well above the ~0.01″ floor). Studio shows module_pixel_size so you can scale before you ship.
Bold, high-contrast silhouettes — animals, vehicles, logos, tools. Gray mush and hairline detail fight the module grid.
Ink is the Inkwell platform wallet (~$0.05/ink). ShapedQR uses the same email. Pay 1 ink per custom trace and 1 ink per QR, buy ink at inkwell.wiki/buy-ink, or get Studio Pass ($5/mo, 5 shapes). Nothing is free.
There is one studio. Camo-style decoy noise is the default look — turn noise off in Style if you want a clean fill. Silhouette prep runs automatically on photo drops (Inkwell, in the background).

Make one weird thing.

Drop a silhouette. Paste a URL. Scan it with your phone.

Open studio →
var showcaseGems = ShapedQRShapes.SHAPES.map(function(s) { return { slug: s.slug, label: s.label, src: ShapedQRShapes.silhouetteSvg(s.slug) }; }); var heroRotateTimer = null; var INFO = { hero: { title: 'Hero', what: 'One drop zone. Rotating live engine renders (camo noise on). No separate Camo or Silhouette buttons.', how: 'File drop → ShapedQRIntake routes: SVG/STL direct; clean masks direct; photos → hidden Inkwell embed (prompt boost) → studio.', why: 'The product is one studio with camo-by-default aesthetics. Extra doors confused the story.' }, gallery: { title: 'Live examples', what: 'All 13 engine presets — catfish, sprint car, skull, heart, star, flask, circle, hexagon, and more. Upload any silhouette for custom shapes.', how: 'Live validate_geometric_layout from Supa — all 13 presets, camo noise on. Gallery previews are free; generates cost ink.', why: 'You should see every shape that actually works before you open the studio — real engine output, not flat silhouettes.' }, how: { title: 'Process', what: 'Three-step mental model: silhouette, destination URL, export.', how: 'Matches studio order — pick/upload shape, enter URL, generate and download.', why: 'Reduces “is this just a fancy QR sticker?” confusion. The engine masks modules to the silhouette interior.' }, studio: { title: 'One studio', what: 'Single builder: presets, uploads, noise/camo controls, max-fit, drag placement.', how: 'Camo is not a separate app — noise_mode auto fills decoys until you tune Style.', why: 'Matches how the engine actually works; fewer dead-end navigation choices.' }, uses: { title: 'Use cases', what: 'Concrete places shaped QRs outperform generic squares.', how: 'Each tile is a vertical story — merch, tags, exhibits, print, food, industrial, events, agents.', why: 'Buyers scan for their industry first. This section answers “would we actually use this?”' }, mcp: { title: 'For agents', what: 'Machine-facing generation via MCP for automated campaigns and product flows.', how: 'POST to qr-studio-mcp with generate_geometric_qr (or trace tools). Ink debits on success; refunds on failure.', why: 'Agents scale output; humans use the studio. Same geometry core, different interface.' }, pricing: { title: 'Pricing', what: 'Inkwell ink_balances wallet, optional $5/mo Studio Pass (5 shapes), or 1 ink per shape + 1 ink per QR.', how: 'Email required. Pass shape credits spend first; else ink debits. Previews free.', why: 'No shared studio pool and no free tier — you pay Inkwell or subscribe.' }, faq: { title: 'FAQ', what: 'Scan reliability, shape tips, ink economics, and why some previews are missing.', how: 'Accordion for quick reads; links to studio and MCP for depth.', why: 'Preempt support mail on the questions every first-time user asks.' } }; function buildGallery(gems) { var track = document.getElementById('galleryTrack'); track.innerHTML = ''; var list = gems.concat(gems); list.forEach(function(s) { var a = document.createElement('a'); a.className = 'gal-tile'; a.href = '/qr-studio?shape=' + s.slug; var img = document.createElement('img'); img.src = s.src; img.alt = s.label + ' shaped QR'; img.loading = 'lazy'; img.width = 180; img.height = 180; img.onerror = function() { this.onerror = null; this.src = ShapedQRShapes.silhouetteSvg(s.slug); }; img.setAttribute('data-shape-slug', s.slug); a.appendChild(img); var lab = document.createElement('span'); lab.textContent = s.label; a.appendChild(lab); track.appendChild(a); }); } function buildMarquee() { var labels = ShapedQRShapes.SHAPES.map(function(s) { return s.label; }); var text = labels.concat(labels).join(' · '); document.getElementById('marqueeTrack').innerHTML = 'SHAPED QR / ' + text + ' · UPLOAD ANY SILHOUETTE · CAMO NOISE ON · '; } function setHeroGem(gem) { var img = document.getElementById('heroShowcaseImg'); var lab = document.getElementById('heroPlateLabel'); var plate = document.getElementById('heroPlate'); if (!gem || !img) return; img.src = gem.src; img.alt = gem.label + ' shaped QR'; lab.textContent = gem.label.toUpperCase() + ' · PRESET'; plate.classList.remove('loading'); } function startHeroRotate() { if (!showcaseGems.length) return; var i = 0; setHeroGem(showcaseGems[0]); if (heroRotateTimer) clearInterval(heroRotateTimer); heroRotateTimer = setInterval(function() { i = (i + 1) % showcaseGems.length; setHeroGem(showcaseGems[i]); }, 5000); } function handleHeroDrop(e) { e.preventDefault(); var dz = document.getElementById('heroDZ'); dz.classList.remove('drag-over'); var file = e.dataTransfer.files[0]; if (file) routeDrop(file); } function handleHeroFile(e) { var file = e.target.files[0]; if (file) routeDrop(file); } function routeDrop(file) { var dz = document.getElementById('heroDZ'); dz.classList.add('busy'); dz.querySelector('.dz-up').textContent = 'Working…'; document.getElementById('dzFile').style.display = 'block'; document.getElementById('dzFile').textContent = file.name; ShapedQRIntake.routeFile(file, { onStatus: function(msg) { dz.querySelector('.dz-up').textContent = msg; } }).catch(function() { dz.classList.remove('busy'); }); } function openInfo(key) { var d = INFO[key]; if (!d) return; document.getElementById('infoTitle').textContent = d.title; var body = document.getElementById('infoBody'); body.innerHTML = '
What
' + d.what + '
' + '
How
' + d.how + '
' + '
Why
' + d.why + '
'; var bd = document.getElementById('infoBackdrop'); bd.hidden = false; bd.classList.add('open'); } function closeInfo() { var bd = document.getElementById('infoBackdrop'); bd.classList.remove('open'); bd.hidden = true; } document.querySelectorAll('[data-info]').forEach(function(btn) { btn.addEventListener('click', function() { openInfo(btn.getAttribute('data-info')); }); }); document.getElementById('infoClose').addEventListener('click', closeInfo); document.getElementById('infoBackdrop').addEventListener('click', function(e) { if (e.target === e.currentTarget) closeInfo(); }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape') closeInfo(); }); document.querySelectorAll('.faq-q').forEach(function(btn) { btn.addEventListener('click', function() { var item = btn.closest('.faq-item'); var open = item.classList.contains('open'); document.querySelectorAll('.faq-item.open').forEach(function(i) { i.classList.remove('open'); }); if (!open) item.classList.add('open'); }); }); function copyMcp() { var t = document.getElementById('mcpSnippet').textContent; navigator.clipboard.writeText(t).then(function() { var b = document.querySelector('.mcp-code .copy'); b.textContent = 'Copied'; setTimeout(function() { b.textContent = 'Copy'; }, 1600); }); } buildMarquee(); buildGallery(showcaseGems); startHeroRotate(); document.getElementById('heroPlate').classList.remove('loading'); ShapedQRShapes.loadCamoPreviews().then(function(gems) { if (!gems || !gems.length) return; showcaseGems = gems; buildGallery(gems); startHeroRotate(); ShapedQRShapes.applyCamoThumbs(gems); }).catch(function(e) { console.warn('camo previews', e); });

Popular Shaped QR Examples

Skull shaped scannable QR code

Skull QR Code

Heart shaped scannable QR code

Heart QR

Sprint car shaped scannable QR code

Sprint Car QR

Catfish shaped scannable QR code

Catfish QR

Bolt shaped scannable QR code

Bolt QR

Crown shaped scannable QR code

Crown QR

Star shaped scannable QR code

Star QR

Circle shaped scannable QR code

Circle QR

Pet tag shaped scannable QR code

Pet Tags

Popular Shaped QR Examples

Skull shaped QR code example

Skull QR Code

Heart shaped QR code example

Heart Shaped QR Code