Haha, kidding. I’m actually TidalSeashell’s sister. Boring, naive, just the way you like it :3
I only started using AI because I wanted to make comics. Right now, I can make almost any MLP comic, no matter how complex, with proper dialogue and everything... I’ll show you soon! But give it some time. I’m open to requests. I’m open to suggestions. I can make art with your OC from just one reference image. I can make a whole comic with your character. Hell, I can do pretty much anything!
Every picture starts with an idea in my head. Then I generate the first versions and edit them from there. I don’t finish the AI’s work - the AI finishes mine. That’s what drives me and my ideas, and what helps me create unique works
I make all my pictures as sets. Usually, I post 2-3 of them online, and the rest are available through a paid subscription. Sooo... are you still reading? I love you <3
(function () { var root = document.getElementById("animation"); if (!root) return; var PHOTO_URL = "https://images.cloudwings.art/anim1.webp"; var ARROW_URL = "https://images.cloudwings.art/anim2.webp"; var ABOUT_LINES = [ "Just a regular pony who generates", "pictures - what else were you", "expecting to read here?" ]; var photo = root.querySelector(".cw-about-photo"); var photoFlash = root.querySelector(".cw-about-photo-flash"); var arrow = root.querySelector(".cw-about-arrow"); var copy = root.querySelector(".cw-about-copy"); var lines = root.querySelectorAll(".cw-about-line"); var more = root.querySelector(".cw-about-more"); var reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)"); var loadPromise = null; var playId = 0; var typeTimer = 0; var scrollTimer = 0; function isAboutHash(value) { value = String(value || "").toLowerCase(); return value === "#aboutme" || value === "#about_me"; } function readTimeSetting(name) { var value = window .getComputedStyle(root) .getPropertyValue(name) .trim(); var number = parseFloat(value) || 0; return value.slice(-2) === "ms" ? number : number * 1000; } function loadLayer(image, url) { return new Promise(function (resolve) { function finish(ok) { image.removeEventListener("load", onLoad); image.removeEventListener("error", onError); if (!ok) image.style.display = "none"; resolve(ok); } function onLoad() { if (image.decode) { image.decode().catch(function () {}).then(function () { finish(true); }); } else { finish(true); } } function onError() { finish(false); } image.addEventListener("load", onLoad); image.addEventListener("error", onError); image.src = url; if (image.complete && image.naturalWidth) onLoad(); }); } function ensureImages() { if (!loadPromise) { loadPromise = Promise.all([ loadLayer(photo, PHOTO_URL), loadLayer(photoFlash, PHOTO_URL), loadLayer(arrow, ARROW_URL) ]); } return loadPromise; } function scrollToAnimation() { var attempts = 0; window.clearTimeout(scrollTimer); function tryScroll() { var isVisible = root.getClientRects().length > 0 && window.getComputedStyle(root).display !== "none"; if (isVisible) { root.scrollIntoView({ behavior: "smooth", block: "start" }); return; } attempts += 1; if (attempts < 24) { scrollTimer = window.setTimeout(tryScroll, 50); } } scrollTimer = window.setTimeout(tryScroll, 80); } function showFullText() { lines.forEach(function (line, index) { line.textContent = ABOUT_LINES[index] || ""; }); copy.classList.add("cw-about-typed"); more.classList.add("cw-about-more-visible"); } function clearText() { lines.forEach(function (line) { line.textContent = ""; }); copy.classList.remove("cw-about-typed"); more.classList.remove("cw-about-more-visible"); } function typeText(id) { var lineIndex = 0; var characterIndex = 0; var letterDelay = readTimeSetting("--cw-typing-letter-delay"); var lineDelay = readTimeSetting("--cw-typing-line-delay"); var afterTypingPause = readTimeSetting("--cw-after-typing-pause"); var betweenStages = readTimeSetting("--cw-between-stages-pause"); var typingStartDelay = readTimeSetting("--cw-photo-duration") + betweenStages + readTimeSetting("--cw-arrow-duration") + betweenStages + readTimeSetting("--cw-title-duration") + betweenStages; clearText(); function typeNext() { var characters; if (id !== playId) return; characters = Array.from(ABOUT_LINES[lineIndex]); lines[lineIndex].textContent += characters[characterIndex]; characterIndex += 1; if (characterIndex < characters.length) { typeTimer = window.setTimeout(typeNext, letterDelay); } else if (lineIndex < ABOUT_LINES.length - 1) { lineIndex += 1; characterIndex = 0; typeTimer = window.setTimeout(typeNext, lineDelay); } else { copy.classList.add("cw-about-typed"); typeTimer = window.setTimeout(function () { if (id === playId) { more.classList.add("cw-about-more-visible"); } }, afterTypingPause); } } typeTimer = window.setTimeout(typeNext, typingStartDelay); } function play() { playId += 1; var id = playId; window.clearTimeout(typeTimer); root.classList.remove("cw-about-playing"); clearText(); void root.offsetWidth; root.classList.add("cw-about-playing"); if (reduceMotion.matches) { showFullText(); } else { typeText(id); } } function activate(replay) { var wasActive = root.classList.contains("cw-about-active"); root.classList.add("cw-about-active"); scrollToAnimation(); if (!wasActive || replay) { ensureImages().then(play); } } function deactivate() { playId += 1; window.clearTimeout(typeTimer); window.clearTimeout(scrollTimer); root.classList.remove("cw-about-active", "cw-about-playing"); } document.addEventListener("click", function (event) { var link = event.target.closest ? event.target.closest("a[href]") : null; if (!link) return; try { if (isAboutHash(new URL(link.href, window.location.href).hash)) { activate(true); } } catch (error) {} }, true); window.addEventListener("hashchange", function () { if (isAboutHash(window.location.hash)) { activate(false); } else { deactivate(); } }); if (isAboutHash(window.location.hash)) { activate(false); } })();
(function () { var root = document.getElementById("how-animation"); if (!root) return; var HOW_LINES = [ "How? Like this, but it's actually 4 hour work!!!" ]; var lines = root.querySelectorAll(".cw-how-line"); var image = root.querySelector(".cw-how-image"); var reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)"); var imagePromise = null; var typingTimer = 0; var scrollTimer = 0; var playId = 0; var imageReady = false; var typingDone = false; function isHowHash(value) { value = String(value || "").toLowerCase(); return value === "#howimadethis2"; } function readTimeSetting(name) { var value = window .getComputedStyle(root) .getPropertyValue(name) .trim(); var number = parseFloat(value) || 0; return value.slice(-2) === "ms" ? number : number * 1000; } function clearTyping() { lines.forEach(function (line) { line.textContent = ""; }); typingDone = false; image.classList.remove("cw-how-image-loaded"); } function revealImageWhenReady() { if (imageReady && typingDone) { image.classList.add("cw-how-image-loaded"); } } function showFullText() { lines.forEach(function (line, index) { line.textContent = HOW_LINES[index] || ""; }); typingDone = true; revealImageWhenReady(); } function playTyping() { var id; var lineIndex = 0; var characterIndex = 0; var letterDelay = readTimeSetting("--cw-how-letter-delay"); var lineDelay = readTimeSetting("--cw-how-line-delay"); playId += 1; id = playId; window.clearTimeout(typingTimer); clearTyping(); if (reduceMotion.matches) { showFullText(); return; } function typeNext() { var characters; if (id !== playId) return; characters = Array.from(HOW_LINES[lineIndex]); lines[lineIndex].textContent += characters[characterIndex]; characterIndex += 1; if (characterIndex < characters.length) { typingTimer = window.setTimeout(typeNext, letterDelay); } else if (lineIndex < HOW_LINES.length - 1) { lineIndex += 1; characterIndex = 0; typingTimer = window.setTimeout(typeNext, lineDelay); } else { typingDone = true; revealImageWhenReady(); } } typingTimer = window.setTimeout(typeNext, 80); } function ensureImage() { var url; if (imagePromise) return imagePromise; url = image.getAttribute("data-src"); imagePromise = new Promise(function (resolve) { function finish(ok) { image.removeEventListener("load", onLoad); image.removeEventListener("error", onError); if (ok) { imageReady = true; revealImageWhenReady(); } else { image.style.display = "none"; } resolve(ok); } function onLoad() { if (image.decode) { image.decode().catch(function () {}).then(function () { finish(true); }); } else { finish(true); } } function onError() { finish(false); } image.addEventListener("load", onLoad); image.addEventListener("error", onError); image.src = url; if (image.complete && image.naturalWidth) onLoad(); }); return imagePromise; } function scrollToBlock() { var attempts = 0; window.clearTimeout(scrollTimer); function tryScroll() { var isVisible = root.getClientRects().length > 0 && window.getComputedStyle(root).display !== "none"; if (isVisible) { root.scrollIntoView({ behavior: "smooth", block: "start" }); return; } attempts += 1; if (attempts < 24) { scrollTimer = window.setTimeout(tryScroll, 50); } } scrollTimer = window.setTimeout(tryScroll, 80); } function activate(replay) { var wasActive = root.classList.contains("cw-how-active"); root.classList.add("cw-how-active"); scrollToBlock(); ensureImage(); if (!wasActive || replay) { playTyping(); } } function deactivate() { playId += 1; window.clearTimeout(typingTimer); window.clearTimeout(scrollTimer); root.classList.remove("cw-how-active"); } document.addEventListener("click", function (event) { var link = event.target.closest ? event.target.closest("a[href]") : null; if (!link) return; try { if (isHowHash(new URL(link.href, window.location.href).hash)) { activate(true); } } catch (error) {} }, true); window.addEventListener("hashchange", function () { if (isHowHash(window.location.hash)) { activate(false); } else { deactivate(); } }); if (isHowHash(window.location.hash)) { activate(false); } })();