Coloring pages

Discover unique coloring pages! Generate mandalas and patterns instantly in your browser. Print or download — unlimited fun awaits!

Bestis1 — Coloring Page Generator
Bestis1 Coloring
No login · No watermark · No daily limit

Coloring pages, generated on the spot.

Build one-of-a-kind mandalas and patterns, or pick from a library of clean line-art scenes. Everything renders right here in your browser — print as many as you like.

Pattern type
Symmetry — 12 points
Layers — 4
Complexity — 50%
Line weight
bestis1.com
bestis1.com
Selected design
Line weight
Under the hood

Built from real geometry, not stock clip-art.

01

Procedural math

Patterns mode builds each design live from radial symmetry, reflected tiles, and randomized seed values — every “Generate” click produces a genuinely new layout, not a re-skinned template.

02

Clean vector lines

Every design is real SVG path geometry — not a raster trace — so lines stay crisp at any print size and the file downloads small.

03

Print-ready, instantly

Designs are framed to a letter-page ratio by default. Download the SVG or print straight from the browser — no account, no watermark, no limit on how many you make.

'); win.document.close(); win.focus(); setTimeout(()=>{ win.print(); }, 250); }/* ========================================================= LIBRARY MODE — curated SVG line-art designs ========================================================= */ const libGrid = document.getElementById('libGrid'); const libFilters = document.getElementById('libFilters'); const libDetail = document.getElementById('libDetail'); const libSheet = document.getElementById('libSheet'); const libSelectedName = document.getElementById('libSelectedName'); const downloadLibBtn = document.getElementById('downloadLibBtn'); const printLibBtn = document.getElementById('printLibBtn');// Each design: a function(strokeWeight) => inner SVG path markup, drawn on a 400x400 viewBox const library = [ { id:'cat', name:'Sitting Cat', cat:'kids', draw: sw => ` `}, { id:'dog', name:'Playful Dog', cat:'kids', draw: sw => ` `}, { id:'rocket', name:'Rocket Ship', cat:'kids', draw: sw => ` `}, { id:'butterfly', name:'Butterfly', cat:'nature', draw: sw => ` `}, { id:'leaf-branch', name:'Leaf Branch', cat:'nature', draw: sw => ` `}, { id:'mountain', name:'Mountain Lake', cat:'nature', draw: sw => ` `}, { id:'owl', name:'Owl on Branch', cat:'animals', draw: sw => ` `}, { id:'fox', name:'Curious Fox', cat:'animals', draw: sw => ` `}, { id:'fish', name:'Coral Fish', cat:'animals', draw: sw => ` `}, { id:'flower-wreath', name:'Flower Wreath', cat:'adult', draw: sw => { let p = ''; const n = 8; for(let i=0;i`; } p += ``; } p += ``; return p; }}, { id:'paisley', name:'Paisley Tile', cat:'adult', draw: sw => ` `}, { id:'lace-medallion', name:'Lace Medallion', cat:'adult', draw: sw => { let p = ''; const rings = [60, 100, 140, 175]; rings.forEach((r, idx)=>{ const count = 8 + idx*4; p += ``; for(let i=0;i`; } }); return p; }}, { id:'pinecone', name:'Pinecone Sprig', cat:'nature', draw: sw => ` `}, { id:'seahorse', name:'Seahorse', cat:'animals', draw: sw => ` `}, ];function populateLibrary(filter){ libGrid.innerHTML = ''; const items = filter === 'all' ? library : library.filter(d=>d.cat === filter); items.forEach(item=>{ const card = document.createElement('div'); card.className = 'lib-card'; card.dataset.id = item.id; card.innerHTML = `
${item.draw(2)}
${item.name}${item.cat}
`; card.addEventListener('click', ()=> selectLibItem(item)); libGrid.appendChild(card); }); }let currentLibItem = null; let libStroke = 2;function selectLibItem(item){ currentLibItem = item; libGrid.querySelectorAll('.lib-card').forEach(c=> c.classList.toggle('selected', c.dataset.id === item.id)); libDetail.classList.add('active'); libSelectedName.textContent = item.name; renderLibDetail(); libDetail.scrollIntoView({behavior:'smooth', block:'nearest'}); }function renderLibDetail(){ if(!currentLibItem) return; const svg = `${currentLibItem.draw(libStroke)}`; libSheet.innerHTML = svg + 'bestis1.com'; }document.querySelectorAll('[data-libstroke]').forEach(btn=>{ btn.addEventListener('click', ()=>{ btn.parentElement.querySelectorAll('.opt-btn').forEach(b=>b.classList.remove('active')); btn.classList.add('active'); libStroke = parseFloat(btn.dataset.libstroke); renderLibDetail(); }); });libFilters.addEventListener('click', e=>{ const btn = e.target.closest('.filter-btn'); if(!btn) return; libFilters.querySelectorAll('.filter-btn').forEach(b=>b.classList.remove('active')); btn.classList.add('active'); populateLibrary(btn.dataset.filter); libDetail.classList.remove('active'); });downloadLibBtn.addEventListener('click', ()=>{ const svgEl = libSheet.querySelector('svg'); if(svgEl && currentLibItem) downloadSVG(svgEl, 'bestis1-coloring-' + currentLibItem.id + '.svg'); }); printLibBtn.addEventListener('click', ()=> printSheet(libSheet));/* ========================================================= MODE TABS ========================================================= */ document.querySelectorAll('.mode-tab').forEach(tab=>{ tab.addEventListener('click', ()=>{ document.querySelectorAll('.mode-tab').forEach(t=>t.classList.remove('active')); document.querySelectorAll('.mode-panel').forEach(p=>p.classList.remove('active')); tab.classList.add('active'); document.getElementById('panel-' + tab.dataset.mode).classList.add('active'); }); });/* ========================================================= INIT ========================================================= */ renderPattern(); populateLibrary('all');})();