D3stiny's Tools

Welcome to d3tools, or D3stiny's Tools, or whatever you want to call it. This site isn't much but it is a collection of items and tools that I made, or put together in one spot. It could be my stream pelting tool you want to use, or one of the simple web tools I put together or even browse my recommended items. What ever your reason for being here, welcome and enjoy your stay!

Flip / Unflip

A very simple decision. Flip? or Unflip? Perfect for those instances where you want to flip something, or someone, but there is no easy way to do it. Just put the name of the thing, or person, you want to flip in the text box, select if you are flipping or putting them back and hit GO!


const flipMap = { 'a': 'ɐ', 'b': 'q', 'c': 'ɔ', 'd': 'p', 'e': 'ǝ', 'f': 'ɟ', 'g': 'ƃ', 'h': 'ɥ', 'i': 'ᴉ', 'j': 'ɾ', 'k': 'ʞ', 'l': 'ʃ', 'm': 'ɯ', 'n': 'u', 'o': 'o', 'p': 'd', 'q': 'b', 'r': 'ɹ', 's': 's', 't': 'ʇ', 'u': 'n', 'v': 'ʌ', 'w': 'ʍ', 'x': 'x', 'y': 'ʎ', 'z': 'z', 'A': '∀', 'B': '𐐒', 'C': 'Ɔ', 'D': 'p', 'E': 'Ǝ', 'F': 'Ⅎ', 'G': 'פ', 'H': 'H', 'I': 'I', 'J': 'ſ', 'K': 'ʞ', 'L': '˥', 'M': 'W', 'N': 'N', 'O': 'O', 'P': 'Ԁ', 'Q': 'Q', 'R': 'ɹ', 'S': 'S', 'T': '┴', 'U': '∩', 'V': 'Λ', 'W': 'M', 'X': 'X', 'Y': '⅄', 'Z': 'Z', '0': '0', '1': 'Ɩ', '2': 'ᄅ', '3': 'Ɛ', '4': 'ㄣ', '5': 'ϛ', '6': '9', '7': 'ㄥ', '8': '8', '9': '6', '.': '˙', ',': "'", "'": ',', '"': ',,', '`': ',', '!': '¡', '?': '¿', '[': ']', ']': '[', '(': ')', ')': '(', '{': '}', '}': '{', '<': '>', '>': '<', '&': '⅋', '_': '‾' }; function flipText(text) { return text.split('') .reverse() .map(c => flipMap[c] || flipMap[c.toLowerCase()] || c) .join(''); } function doFlip() { const text = document.getElementById("inputText").value; const action = document.querySelector('input[name="action"]:checked').value; let result = ""; if (action === "flip") { result = "(╯°□°)╯︵ " + flipText(text); } else { result = text + " ノ( ゜-゜ノ)"; } document.getElementById("Flip").textContent = result; } // Trigger doFlip() when pressing Enter in the text field document.getElementById("inputText").addEventListener("keypress", function(e) { if (e.key === "Enter") { e.preventDefault(); doFlip(); } });

Mocking Text

Want to make a point of letting someone know you really don't care what they have to say? Why not send back their same message in a mocking way! Slap the text in the text box below!

function mockText() { const input = document.getElementById("inputmock").value; let output = ''; for (let i = 0; i < input.length; i++) { const char = input[i]; output += Math.random() > 0.5 ? char.toUpperCase() : char.toLowerCase(); } document.getElementById("Mock").textContent = output; document.getElementById("copyBtn").disabled = output.length === 0; } async function copyMock() { const text = document.getElementById("Mock").textContent || ''; if (!text) return; const btn = document.getElementById("copyBtn"); try { await navigator.clipboard.writeText(text); } catch { const ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); } const old = btn.textContent; btn.textContent = 'Copied!'; btn.disabled = true; setTimeout(() => { btn.textContent = old; btn.disabled = text.length === 0; }, 1200); } // Enter = mock; Shift+Enter = newline document.getElementById("inputmock").addEventListener("keydown", function(e) { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); mockText(); } });

Text Reverser

Do I really need to explain what this does? Really? Fine... This tool will take what ever text you put in and, just like magic, make it reversed. What is this useful for? Hell if I know... Did someone send you text backwares? Want to send someone text backwards. Slap the text the box below!

function reverseText() { const input = document.getElementById("reverseInput").value; const reversed = input.split('').reverse().join(''); document.getElementById("reverseResult").textContent = reversed; document.getElementById("copyReverseBtn").disabled = reversed.length === 0; } async function copyReverse() { const text = document.getElementById("reverseResult").textContent || ''; if (!text) return; const btn = document.getElementById("copyReverseBtn"); try { await navigator.clipboard.writeText(text); } catch { const ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); } const old = btn.textContent; btn.textContent = 'Copied!'; btn.disabled = true; setTimeout(() => { btn.textContent = old; btn.disabled = text.length === 0; }, 1200); } // Enter = reverse; Shift+Enter = newline document.getElementById("reverseInput").addEventListener("keydown", function(e) { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); reverseText(); } });

Magic 8 Ball

Do you have a hard time making decisions? Want to have someone, well... something... make the decision for you? Slap your query in the box below and see what happens?
(please don't make important or life decisions with this thing...)

const responses = [ "Yes.","No.","Maybe...","Ask again later.","Definitely.","Absolutely not.", "Without a doubt.","Don't count on it.","Signs point to yes.","Very doubtful.", "You're not ready for that answer.","LOL no.", "Outlook not so good.","It is certain.","My sources say no.","The stars say yes.", "Try again tomorrow.","Don’t hold your breath.","As I see it, yes.", "Not in this lifetime.","The universe approves.","You already know the answer.", "I wouldn’t bet on it.","Looks promising.","No chance at all.", "The vibes are strong—yes.","Cloudy with a chance of nope.","All signs point to no.", "It’s basically guaranteed.","Fifty-fifty. Flip a coin.","Nah, chief.", "Ask again after coffee.","Not today.","Absolutely!","You’ll regret it if you do.", "Trust your gut, not me.","Yeah, but only on Tuesdays.","LOL definitely not.", "Without hesitation, yes.","You already asked that.","Let me nap on it first.", "That’s a hard no from me." ]; function shakeBall() { const question = document.getElementById("question").value.trim(); const response = document.getElementById("response"); const copyBtn = document.getElementById("copyRespBtn"); if (question === "") { response.textContent = "You gotta ask something😜"; copyBtn.disabled = true; return; } const answer = responses[Math.floor(Math.random() * responses.length)]; response.textContent = answer; copyBtn.disabled = false; } async function copyResponse() { const text = document.getElementById("response").textContent || ''; if (!text) return; const btn = document.getElementById("copyRespBtn"); try { await navigator.clipboard.writeText(text); } catch { const ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); } const old = btn.textContent; btn.textContent = 'Copied!'; btn.disabled = true; setTimeout(() => { btn.textContent = old; btn.disabled = text.length === 0; }, 1200); }

Coin Flip

Hey, making a decision is hard. Sometimes you just need someone or something to make the call for you. Sometimes a simple coin flip is all you need! Don't have a coin? Use this!

function flipCoin() { const result = Math.random() < 0.5 ? "Heads 🪙" : "Tails 🪙"; document.getElementById("coinResult").textContent = result; }

Color Picker

Sometimes you just need that perfect color. Or you know its HEX code or its RGB but want to know what it is in the other. Well this tool should give you just that!





R: G: B:

function updateFromPicker() { const color = document.getElementById("colorPicker").value; document.getElementById("hexInput").value = color; const r = parseInt(color.substr(1, 2), 16); const g = parseInt(color.substr(3, 2), 16); const b = parseInt(color.substr(5, 2), 16); document.getElementById("rInput").value = r; document.getElementById("gInput").value = g; document.getElementById("bInput").value = b; document.getElementById("previewBox").style.backgroundColor = color; } function updateFromHex() { let hex = document.getElementById("hexInput").value.trim(); if (!hex.startsWith('#')) hex = '#' + hex; if (/^#([0-9A-Fa-f]{6})$/.test(hex)) { document.getElementById("colorPicker").value = hex; const r = parseInt(hex.substr(1, 2), 16); const g = parseInt(hex.substr(3, 2), 16); const b = parseInt(hex.substr(5, 2), 16); document.getElementById("rInput").value = r; document.getElementById("gInput").value = g; document.getElementById("bInput").value = b; document.getElementById("previewBox").style.backgroundColor = hex; } } function updateFromRGB() { const r = parseInt(document.getElementById("rInput").value) || 0; const g = parseInt(document.getElementById("gInput").value) || 0; const b = parseInt(document.getElementById("bInput").value) || 0; const hex = "#" + [r, g, b].map(x => { const h = x.toString(16); return h.length === 1 ? "0" + h : h; }).join(''); document.getElementById("hexInput").value = hex; document.getElementById("colorPicker").value = hex; document.getElementById("previewBox").style.backgroundColor = hex; } // Minimal fix: also listen via JS (Carrd-safe) const picker = document.getElementById("colorPicker"); picker.addEventListener("input", updateFromPicker); picker.addEventListener("change", updateFromPicker); // Optional: initialize preview if picker has a default value if (picker.value) updateFromPicker();

Discord Timestamp

Lets face it. Time zones suck. And planning ANYTHING across time zones sucks ever more. And doing so on discord can be painful as well. Well if you want to put a time down that will localize for who ever is reading it, select it here and copy the output and paste into discord. Who ever reads it will see the date and time appear local to them!

Pick Date & Time:
Select Format:

QR Code Generator

Straight to the point. Put the website you want to make a QR Code for in the text box and a QR Code will be generated below. This is very helpful when you want a easy way for someone with mobile to go to a website from a printed form or maybe a badge to show on a video or stream.






function generateQR() { const text = document.getElementById("qrInput").value; const qrContainer = document.getElementById("qrContainer"); qrContainer.innerHTML = ""; new QRCode(qrContainer, { text: text || "https://example.com", width: 256, height: 256, correctLevel: QRCode.CorrectLevel.H }); }

D3stiny's Recommendations

Every so often I get asked what I recommend for various items. So I figured id get an affiliate link with Amazon and put them all in one place. That way if you do want what I use, you can get it too!I intend to only put items here that I personally have or have used as a way to vouch for the item.

Image of a laptop cooling pad with blower style fans

IETS GT600 Laptop Cooling Pad

I picked up this device while looking for a solid cooling pad for my laptop that was effective but not overly expensive. That’s where this cooling pad shines. Instead of traditional fans, it uses a blower-style fan with sealed sides to lock in air, which drastically improves cooling performance. I’ve seen it drop temperatures by up to 15°C in some games. It does get loud at full speed, but it cools my laptop extremely well, so I think it’s a fair trade-off.

Order on Amazon Canada Link

Image of a indoor hyrdophonic farm kit

iDOO Hydroponics Growing System Kit

A few times I have mentioned that I use Hydrophonic farms to grow things all through out the year. Here is the one that I currently use and can say it is very easy to set up, use and maintain. I love the transparent base so I can see how the roots are developing. I will suggest, however, to make sure what ever seeds you get for it are dwarf varients so that you dont have to worry about over growth.

Order on Amazon Canada Link

Image of a electric battery powered air duster

WOLFBOX MF100 Electric Air Duster

Finding a good air duster for my computer was always challenging, I have been through a few of them, both the electric and canned versions, but never found one I really liked. The canned ones are expensive over time though effective and the electric are cheaper long term but so many of them are just garbage quality. This is why I absolutely love the Wolfbox MF100, it has a great build quality and the air flow is very powerfull. Just remember not to blow into fans cause that is not the best for the fans bearings =)

Order on Amazon Canada Link

A small capture card with the elgato logo

Elgato Game Capture Neo

I don't think I need to introduce this product too much but, this, is a capture card. To be more specific it is a very compact and high quality capture card while not being insanely expensive. I played around with extremely expensive and cheap capture cards and this one is by far my favourite. Its simple to set up and just works. Its low profile too so it barely takes up space on my desk and it fixes the biggest issue I had with capture cards. Audio latency. While its advertising will say it has none, it does but it is exremely minimal and very tolerable. I have to think about it to notice the latency. Picture quality is fantastic supporting 4k60fps passthrough, thought I use it at 1080 or 2k for my streams.

Order on Amazon Canada Link