Sylverryn

Professional Published
Dark Fantasy Illustrator

Open for Commissions


Fully Rendered Examples

(function () { document.querySelectorAll('.carousel-block').forEach(function (block) { const track = block.querySelector('.carousel-track'); const prevBtn = block.querySelector('.carousel-btn.prev'); const nextBtn = block.querySelector('.carousel-btn.next'); const slides = track.querySelectorAll('.carousel-slide'); const viewport = block.querySelector('.carousel-viewport'); const lightbox = block.querySelector('.lightbox'); const lightboxImg = block.querySelector('.lightbox-img'); const lightboxPrev = block.querySelector('.lightbox-btn.prev'); const lightboxNext = block.querySelector('.lightbox-btn.next'); const lightboxClose = block.querySelector('.lightbox-close'); const lightboxCounter = block.querySelector('.lightbox-counter'); const GAP = 9; const visibleCount = () => window.innerWidth <= 700 ? 2 : 4; let index = 0; function maxIndex() { return Math.max(0, slides.length - visibleCount()); } function updateCarousel() { const slideWidth = slides[0].getBoundingClientRect().width + GAP; track.style.transform = 'translateX(-' + (index * slideWidth) + 'px)'; prevBtn.disabled = false; nextBtn.disabled = false; } function goPrev() { if (index <= 0) { index = maxIndex(); } else { index--; } updateCarousel(); } function goNext() { if (index >= maxIndex()) index = 0; else index++; updateCarousel(); } prevBtn.addEventListener('click', goPrev); nextBtn.addEventListener('click', goNext); window.addEventListener('resize', () => { if (index > maxIndex()) index = maxIndex(); updateCarousel(); }); let touchStartX = 0, touchStartY = 0, touchMoved = false, isSwiping = false; viewport.addEventListener('touchstart', (e) => { touchStartX = e.touches[0].clientX; touchStartY = e.touches[0].clientY; touchMoved = false; isSwiping = false; }, { passive: true }); viewport.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - touchStartX; const dy = e.touches[0].clientY - touchStartY; if (!isSwiping && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 10) isSwiping = true; if (isSwiping) touchMoved = true; }, { passive: true }); viewport.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - touchStartX; const dy = e.changedTouches[0].clientY - touchStartY; if (isSwiping && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) { if (dx < 0) goNext(); else goPrev(); } isSwiping = false; }, { passive: true }); let lightboxIndex = 0; function openLightbox(i) { lightboxIndex = i; lightboxImg.src = slides[i].querySelector('img').src; updateLightbox(); lightbox.classList.add('active'); document.body.classList.add('lightbox-open'); } function closeLightbox() { lightbox.classList.remove('active'); document.body.classList.remove('lightbox-open'); } function updateLightbox() { lightboxCounter.textContent = (lightboxIndex + 1) + ' / ' + slides.length; lightboxPrev.disabled = lightboxIndex === 0; lightboxNext.disabled = lightboxIndex >= slides.length - 1; } function lightboxPrevFn() { if (lightboxIndex > 0) { lightboxIndex--; lightboxImg.src = slides[lightboxIndex].querySelector('img').src; updateLightbox(); } } function lightboxNextFn() { if (lightboxIndex < slides.length - 1) { lightboxIndex++; lightboxImg.src = slides[lightboxIndex].querySelector('img').src; updateLightbox(); } } /* Left-click → lightbox. Middle-click / Ctrl+click → new tab. */ slides.forEach((slide, i) => { const link = slide.querySelector('a'); if (!link) return; link.addEventListener('click', (e) => { if (e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return; e.preventDefault(); if (touchMoved) { touchMoved = false; return; } openLightbox(i); }); }); lightboxPrev.addEventListener('click', (e) => { e.stopPropagation(); lightboxPrevFn(); }); lightboxNext.addEventListener('click', (e) => { e.stopPropagation(); lightboxNextFn(); }); lightboxClose.addEventListener('click', (e) => { e.stopPropagation(); closeLightbox(); }); lightbox.addEventListener('click', (e) => { if (e.target === lightbox) closeLightbox(); }); let lbTouchStartX = 0, lbTouchStartY = 0, lbIsSwiping = false; lightbox.addEventListener('touchstart', (e) => { lbTouchStartX = e.touches[0].clientX; lbTouchStartY = e.touches[0].clientY; lbIsSwiping = false; }, { passive: true }); lightbox.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - lbTouchStartX; const dy = e.touches[0].clientY - lbTouchStartY; if (!lbIsSwiping && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 10) lbIsSwiping = true; }, { passive: true }); lightbox.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - lbTouchStartX; const dy = e.changedTouches[0].clientY - lbTouchStartY; if (lbIsSwiping && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) { if (dx < 0) lightboxNextFn(); else lightboxPrevFn(); } lbIsSwiping = false; }, { passive: true }); document.addEventListener('keydown', (e) => { if (!lightbox.classList.contains('active')) return; if (e.key === 'Escape') closeLightbox(); if (e.key === 'ArrowLeft') lightboxPrevFn(); if (e.key === 'ArrowRight') lightboxNextFn(); }); updateCarousel(); }); })();

Stylised Examples

(function () { document.querySelectorAll('.carousel-block').forEach(function (block) { const track = block.querySelector('.carousel-track'); const prevBtn = block.querySelector('.carousel-btn.prev'); const nextBtn = block.querySelector('.carousel-btn.next'); const slides = track.querySelectorAll('.carousel-slide'); const viewport = block.querySelector('.carousel-viewport'); const lightbox = block.querySelector('.lightbox'); const lightboxImg = block.querySelector('.lightbox-img'); const lightboxPrev = block.querySelector('.lightbox-btn.prev'); const lightboxNext = block.querySelector('.lightbox-btn.next'); const lightboxClose = block.querySelector('.lightbox-close'); const lightboxCounter = block.querySelector('.lightbox-counter'); const GAP = 9; const visibleCount = () => window.innerWidth <= 700 ? 2 : 4; let index = 0; function maxIndex() { return Math.max(0, slides.length - visibleCount()); } function updateCarousel() { const slideWidth = slides[0].getBoundingClientRect().width + GAP; track.style.transform = 'translateX(-' + (index * slideWidth) + 'px)'; prevBtn.disabled = false; nextBtn.disabled = false; } function goPrev() { if (index <= 0) { index = maxIndex(); } else { index--; } updateCarousel(); } function goNext() { if (index >= maxIndex()) index = 0; else index++; updateCarousel(); } prevBtn.addEventListener('click', goPrev); nextBtn.addEventListener('click', goNext); window.addEventListener('resize', () => { if (index > maxIndex()) index = maxIndex(); updateCarousel(); }); let touchStartX = 0, touchStartY = 0, touchMoved = false, isSwiping = false; viewport.addEventListener('touchstart', (e) => { touchStartX = e.touches[0].clientX; touchStartY = e.touches[0].clientY; touchMoved = false; isSwiping = false; }, { passive: true }); viewport.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - touchStartX; const dy = e.touches[0].clientY - touchStartY; if (!isSwiping && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 10) isSwiping = true; if (isSwiping) touchMoved = true; }, { passive: true }); viewport.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - touchStartX; const dy = e.changedTouches[0].clientY - touchStartY; if (isSwiping && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) { if (dx < 0) goNext(); else goPrev(); } isSwiping = false; }, { passive: true }); let lightboxIndex = 0; function openLightbox(i) { lightboxIndex = i; lightboxImg.src = slides[i].querySelector('img').src; updateLightbox(); lightbox.classList.add('active'); document.body.classList.add('lightbox-open'); } function closeLightbox() { lightbox.classList.remove('active'); document.body.classList.remove('lightbox-open'); } function updateLightbox() { lightboxCounter.textContent = (lightboxIndex + 1) + ' / ' + slides.length; lightboxPrev.disabled = lightboxIndex === 0; lightboxNext.disabled = lightboxIndex >= slides.length - 1; } function lightboxPrevFn() { if (lightboxIndex > 0) { lightboxIndex--; lightboxImg.src = slides[lightboxIndex].querySelector('img').src; updateLightbox(); } } function lightboxNextFn() { if (lightboxIndex < slides.length - 1) { lightboxIndex++; lightboxImg.src = slides[lightboxIndex].querySelector('img').src; updateLightbox(); } } /* Left-click → lightbox. Middle-click / Ctrl+click → new tab. */ slides.forEach((slide, i) => { const link = slide.querySelector('a'); if (!link) return; link.addEventListener('click', (e) => { if (e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return; e.preventDefault(); if (touchMoved) { touchMoved = false; return; } openLightbox(i); }); }); lightboxPrev.addEventListener('click', (e) => { e.stopPropagation(); lightboxPrevFn(); }); lightboxNext.addEventListener('click', (e) => { e.stopPropagation(); lightboxNextFn(); }); lightboxClose.addEventListener('click', (e) => { e.stopPropagation(); closeLightbox(); }); lightbox.addEventListener('click', (e) => { if (e.target === lightbox) closeLightbox(); }); let lbTouchStartX = 0, lbTouchStartY = 0, lbIsSwiping = false; lightbox.addEventListener('touchstart', (e) => { lbTouchStartX = e.touches[0].clientX; lbTouchStartY = e.touches[0].clientY; lbIsSwiping = false; }, { passive: true }); lightbox.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - lbTouchStartX; const dy = e.touches[0].clientY - lbTouchStartY; if (!lbIsSwiping && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 10) lbIsSwiping = true; }, { passive: true }); lightbox.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - lbTouchStartX; const dy = e.changedTouches[0].clientY - lbTouchStartY; if (lbIsSwiping && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) { if (dx < 0) lightboxNextFn(); else lightboxPrevFn(); } lbIsSwiping = false; }, { passive: true }); document.addEventListener('keydown', (e) => { if (!lightbox.classList.contains('active')) return; if (e.key === 'Escape') closeLightbox(); if (e.key === 'ArrowLeft') lightboxPrevFn(); if (e.key === 'ArrowRight') lightboxNextFn(); }); updateCarousel(); }); })();

Commercial Work

(function () { document.querySelectorAll('.carousel-block').forEach(function (block) { const track = block.querySelector('.carousel-track'); const prevBtn = block.querySelector('.carousel-btn.prev'); const nextBtn = block.querySelector('.carousel-btn.next'); const slides = track.querySelectorAll('.carousel-slide'); const viewport = block.querySelector('.carousel-viewport'); const lightbox = block.querySelector('.lightbox'); const lightboxImg = block.querySelector('.lightbox-img'); const lightboxCaption = block.querySelector('.lightbox-caption'); const lightboxPrev = block.querySelector('.lightbox-btn.prev'); const lightboxNext = block.querySelector('.lightbox-btn.next'); const lightboxClose = block.querySelector('.lightbox-close'); const lightboxCounter = block.querySelector('.lightbox-counter'); const GAP = 9; const visibleCount = () => window.innerWidth <= 700 ? 2 : 4; let index = 0; function maxIndex() { return Math.max(0, slides.length - visibleCount()); } function updateCarousel() { const slideWidth = slides[0].getBoundingClientRect().width + GAP; track.style.transform = 'translateX(-' + (index * slideWidth) + 'px)'; prevBtn.disabled = false; nextBtn.disabled = false; } function goPrev() { if (index <= 0) { index = maxIndex(); } else { index--; } updateCarousel(); } function goNext() { if (index >= maxIndex()) { index = 0; } else { index++; } updateCarousel(); } prevBtn.addEventListener('click', goPrev); nextBtn.addEventListener('click', goNext); window.addEventListener('resize', () => { if (index > maxIndex()) index = maxIndex(); updateCarousel(); }); let touchStartX = 0, touchStartY = 0, touchMoved = false, isSwiping = false; viewport.addEventListener('touchstart', (e) => { touchStartX = e.touches[0].clientX; touchStartY = e.touches[0].clientY; touchMoved = false; isSwiping = false; }, { passive: true }); viewport.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - touchStartX; const dy = e.touches[0].clientY - touchStartY; if (!isSwiping && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 10) isSwiping = true; if (isSwiping) touchMoved = true; }, { passive: true }); viewport.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - touchStartX; const dy = e.changedTouches[0].clientY - touchStartY; if (isSwiping && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) { if (dx < 0) goNext(); else goPrev(); } isSwiping = false; }, { passive: true }); let lightboxIndex = 0; function openLightbox(i) { lightboxIndex = i; const slide = slides[i]; lightboxImg.src = slide.querySelector('img').src; lightboxCaption.textContent = slide.querySelector('.carousel-caption').textContent; updateLightbox(); lightbox.classList.add('active'); document.body.classList.add('lightbox-open'); } function closeLightbox() { lightbox.classList.remove('active'); document.body.classList.remove('lightbox-open'); } function updateLightbox() { lightboxCounter.textContent = (lightboxIndex + 1) + ' / ' + slides.length; lightboxPrev.disabled = lightboxIndex === 0; lightboxNext.disabled = lightboxIndex >= slides.length - 1; } function lightboxPrevFn() { if (lightboxIndex > 0) { lightboxIndex--; const slide = slides[lightboxIndex]; lightboxImg.src = slide.querySelector('img').src; lightboxCaption.textContent = slide.querySelector('.carousel-caption').textContent; updateLightbox(); } } function lightboxNextFn() { if (lightboxIndex < slides.length - 1) { lightboxIndex++; const slide = slides[lightboxIndex]; lightboxImg.src = slide.querySelector('img').src; lightboxCaption.textContent = slide.querySelector('.carousel-caption').textContent; updateLightbox(); } } /* Left-click → lightbox. Middle-click / Ctrl+click / etc. → new tab. */ slides.forEach((slide, i) => { const link = slide.querySelector('a'); if (!link) return; link.addEventListener('click', (e) => { if (e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return; e.preventDefault(); if (touchMoved) { touchMoved = false; return; } openLightbox(i); }); }); lightboxPrev.addEventListener('click', (e) => { e.stopPropagation(); lightboxPrevFn(); }); lightboxNext.addEventListener('click', (e) => { e.stopPropagation(); lightboxNextFn(); }); lightboxClose.addEventListener('click', (e) => { e.stopPropagation(); closeLightbox(); }); lightbox.addEventListener('click', (e) => { if (e.target === lightbox) closeLightbox(); }); let lbTouchStartX = 0, lbTouchStartY = 0, lbIsSwiping = false; lightbox.addEventListener('touchstart', (e) => { lbTouchStartX = e.touches[0].clientX; lbTouchStartY = e.touches[0].clientY; lbIsSwiping = false; }, { passive: true }); lightbox.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - lbTouchStartX; const dy = e.touches[0].clientY - lbTouchStartY; if (!lbIsSwiping && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 10) lbIsSwiping = true; }, { passive: true }); lightbox.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - lbTouchStartX; const dy = e.changedTouches[0].clientY - lbTouchStartY; if (lbIsSwiping && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) { if (dx < 0) lightboxNextFn(); else lightboxPrevFn(); } lbIsSwiping = false; }, { passive: true }); document.addEventListener('keydown', (e) => { if (!lightbox.classList.contains('active')) return; if (e.key === 'Escape') closeLightbox(); if (e.key === 'ArrowLeft') lightboxPrevFn(); if (e.key === 'ArrowRight') lightboxNextFn(); }); updateCarousel(); }); })();

Commissions

Pricing & Examples

Ink
Ink
Bust$30
Half$40
Full$50
Greyscale
Greyscale
Bust$45
Half$50
Full$55
Soft Shading
Soft Shading
Bust$60
Half$75
Full$90
Full Render
Full Render
Bust$80
Half$100
Full$120
Add-ons
Simple BG: FreeComplex BG: +$30Prop: +$50Commercial License: +100% of base priceGroup discounts available
1 / 4
(function () { var section = document.querySelector('.comm-section'); if (!section) return; var images = section.querySelectorAll('.comm-img'); var lightbox = document.getElementById('commLightbox'); var lightboxImg = document.getElementById('commLightboxImg'); var lightboxCounter = document.getElementById('commLightboxCounter'); var prevBtn = lightbox.querySelector('.comm-lightbox-btn.prev'); var nextBtn = lightbox.querySelector('.comm-lightbox-btn.next'); var closeBtn = lightbox.querySelector('.comm-lightbox-close'); var currentIndex = 0; function openLightbox(i) { currentIndex = i; lightboxImg.src = images[i].src; updateCounter(); lightbox.classList.add('active'); document.body.classList.add('comm-lightbox-open'); } function closeLightbox() { lightbox.classList.remove('active'); document.body.classList.remove('comm-lightbox-open'); } function updateCounter() { lightboxCounter.textContent = (currentIndex + 1) + ' / ' + images.length; prevBtn.style.opacity = currentIndex === 0 ? '0.25' : '1'; prevBtn.style.cursor = currentIndex === 0 ? 'not-allowed' : 'pointer'; nextBtn.style.opacity = currentIndex === images.length - 1 ? '0.25' : '1'; nextBtn.style.cursor = currentIndex === images.length - 1 ? 'not-allowed' : 'pointer'; } function goPrev() { if (currentIndex > 0) { currentIndex--; lightboxImg.src = images[currentIndex].src; updateCounter(); } } function goNext() { if (currentIndex < images.length - 1) { currentIndex++; lightboxImg.src = images[currentIndex].src; updateCounter(); } } /* Left-click on the link → lightbox (preventDefault stops the new tab). Middle-click / Ctrl+click → browser handles it natively (new tab). */ images.forEach(function (img, i) { var link = img.closest('.comm-img-link'); if (!link) return; link.addEventListener('click', function (e) { if (e.button !== 0) return; if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return; e.preventDefault(); openLightbox(i); }); }); prevBtn.addEventListener('click', function (e) { e.stopPropagation(); goPrev(); }); nextBtn.addEventListener('click', function (e) { e.stopPropagation(); goNext(); }); closeBtn.addEventListener('click', function (e) { e.stopPropagation(); closeLightbox(); }); lightbox.addEventListener('click', function (e) { if (e.target === lightbox) closeLightbox(); }); document.addEventListener('keydown', function (e) { if (!lightbox.classList.contains('active')) return; if (e.key === 'Escape') closeLightbox(); if (e.key === 'ArrowLeft') goPrev(); if (e.key === 'ArrowRight') goNext(); }); })();
Policies · centered questions / left answers
FAQ
Terms of Service

Reviews

Commission Queue

Loading commission queue...