1
0

Erster Upload

This commit is contained in:
2025-02-26 21:09:58 +01:00
commit 62227ad83c
18 changed files with 1969 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/checkwave
/kemonogen
/shape_shifter

270
bohne/index.html Normal file
View File

@ -0,0 +1,270 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Julien Bam - Songs aus der Bohne Übersicht</title>
<style>
body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; }
.category { margin: 3rem 0; padding: 1rem; border-bottom: 2px solid #eee; }
.video-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 2rem;
padding: 1rem 0;
}
.video-item { text-align: center; }
.thumbnail {
width: 100%;
height: 140px;
object-fit: cover;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.2s;
}
.thumbnail:hover { transform: scale(1.03); }
.video-title {
margin: 8px 0;
font-size: 0.9em;
color: #333;
line-height: 1.4;
}
h2 { color: #2c3e50; margin-bottom: 1.5rem; }
</style>
</head>
<body>
<!-- OPTIONAL -->
<div class="category">
<h2>🔍 Optional (Hintergrundinfo)</h2>
<h4><i>(Nicht direkt relevant für die Hauptserie, aber Hintergrundinfo zur Herkunft der Bohnen)</i></h4>
<div class="video-grid">
<div class="video-item">
<a href="https://www.youtube.com/watch?v=v1mDeIkWR7c" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/v1mDeIkWR7c/mqdefault.jpg"
class="thumbnail"
alt="MÄRCHEN in ASOZIAL 1">
</a>
<p class="video-title">MÄRCHEN in ASOZIAL 1</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=2JOQSd1MB90" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/2JOQSd1MB90/mqdefault.jpg"
class="thumbnail"
alt="MÄRCHEN in ASOZIAL 2">
</a>
<p class="video-title">MÄRCHEN in ASOZIAL 2</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=xXHxd6JebbY" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/xXHxd6JebbY/mqdefault.jpg"
class="thumbnail"
alt="MÄRCHEN in ASOZIAL 3">
</a>
<p class="video-title">MÄRCHEN in ASOZIAL 3</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=K6BbVjo-UC8" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/K6BbVjo-UC8/mqdefault.jpg"
class="thumbnail"
alt="MÄRCHEN in ASOZIAL 4">
</a>
<p class="video-title">MÄRCHEN in ASOZIAL 4</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=hSREEzhCB6k" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/hSREEzhCB6k/mqdefault.jpg"
class="thumbnail"
alt="Das letzte MÄRCHEN IN ASOZIAL Part 1">
</a>
<p class="video-title">Das letzte MÄRCHEN IN ASOZIAL (Part 1)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=H1p9k2rj-8U" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/H1p9k2rj-8U/mqdefault.jpg"
class="thumbnail"
alt="Das letzte MÄRCHEN IN ASOZIAL Part 2">
</a>
<p class="video-title">Das letzte MÄRCHEN IN ASOZIAL (Part 2)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=aKJl0Rnqqpg" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/aKJl0Rnqqpg/mqdefault.jpg"
class="thumbnail"
alt="Das letzte MÄRCHEN IN ASOZIAL Part 3">
</a>
<p class="video-title">Das letzte MÄRCHEN IN ASOZIAL (Part 3)</p>
</div>
</div>
</div>
<!-- SPIN-OFFS -->
<div class="category">
<h2>🌠 Spin-offs</h2>
<h4><i>(Relevant für Mann im Mond)</i></h4>
<div class="video-grid">
<div class="video-item">
<a href="https://www.youtube.com/watch?v=LRaENLSfLIY" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/LRaENLSfLIY/mqdefault.jpg"
class="thumbnail"
alt="EHRENMÄNNER of the GALAXY">
</a>
<p class="video-title">EHRENMÄNNER of the GALAXY</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=07VfwFwqNks" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/07VfwFwqNks/mqdefault.jpg"
class="thumbnail"
alt="BIKINI PLANET">
</a>
<p class="video-title">BIKINI PLANET - Ehrenmänner of the Galaxy 2</p>
</div>
</div>
</div>
<!-- HAUPTSERIE -->
<div class="category">
<h2>🎵 Hauptserie</h2>
<div class="video-grid">
<div class="video-item">
<a href="https://www.youtube.com/watch?v=YcP5MEnPGyM" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/YcP5MEnPGyM/mqdefault.jpg"
class="thumbnail"
alt="SONGS aus der BOHNE 1">
</a>
<p class="video-title">SONGS aus der BOHNE 1</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=3aMoo8ho0VY" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/3aMoo8ho0VY/mqdefault.jpg"
class="thumbnail"
alt="SONGS aus der BOHNE 2">
</a>
<p class="video-title">SONGS aus der BOHNE (TEIL 2)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=ZkGC8HQvPz8" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/ZkGC8HQvPz8/mqdefault.jpg"
class="thumbnail"
alt="SONGS aus der BOHNE 3">
</a>
<p class="video-title">SONGS aus der BOHNE (TEIL 3)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=kxHfPFnMVaA" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/kxHfPFnMVaA/mqdefault.jpg"
class="thumbnail"
alt="Der letzte SONG AUS DER BOHNE Akt 1">
</a>
<p class="video-title">Der letzte SONG AUS DER BOHNE (Akt 1)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=IfBhRM-4vHU" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/IfBhRM-4vHU/mqdefault.jpg"
class="thumbnail"
alt="Der letzte SONG AUS DER BOHNE Akt 2">
</a>
<p class="video-title">Der letzte SONG AUS DER BOHNE (Akt 2)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=rKidiBm4JGk" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/rKidiBm4JGk/mqdefault.jpg"
class="thumbnail"
alt="Der letzte SONG des OSTERHASEN">
</a>
<p class="video-title">Der letzte SONG des OSTERHASEN</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=iOd_IXAcyYE" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/iOd_IXAcyYE/mqdefault.jpg"
class="thumbnail"
alt="Der letzte SONG AUS DER BOHNE Akt 3">
</a>
<p class="video-title">Der letzte SONG AUS DER BOHNE (Akt 3)</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=jZIp4NBJLl0" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/jZIp4NBJLl0/mqdefault.jpg"
class="thumbnail"
alt="SANTA der BOSS">
</a>
<p class="video-title">SANTA der BOSS</p>
</div>
</div>
</div>
<!-- FORTSETZUNG -->
<div class="category">
<h2>🌙 Fortsetzung</h2>
<div class="video-grid">
<div class="video-item">
<a href="https://www.youtube.com/watch?v=CNju4qLDwHs" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/CNju4qLDwHs/mqdefault.jpg"
class="thumbnail"
alt="Der Mann im Mond - Akt 1">
</a>
<p class="video-title">Der Mann im Mond - Akt 1</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=BrfoYZQSwTw" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/BrfoYZQSwTw/mqdefault.jpg"
class="thumbnail"
alt="Der Mann im Mond - Akt 2">
</a>
<p class="video-title">Der Mann im Mond - Akt 2</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=kgGPUt7C6E8" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/kgGPUt7C6E8/mqdefault.jpg"
class="thumbnail"
alt="Der Mann im Mond - Akt 3">
</a>
<p class="video-title">Der Mann im Mond - Akt 3</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=NFlyVjVs3aI" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/NFlyVjVs3aI/mqdefault.jpg"
class="thumbnail"
alt="Das GEHEIMNIS der ZAHNFEE">
</a>
<p class="video-title">Das GEHEIMNIS der ZAHNFEE</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=rLEEOdFlnCY" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/rLEEOdFlnCY/mqdefault.jpg"
class="thumbnail"
alt="Der Mann im Mond - Akt 4">
</a>
<p class="video-title">Der Mann im Mond - Akt 4</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=V9IWsb9LbO0" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/V9IWsb9LbO0/mqdefault.jpg"
class="thumbnail"
alt="Der Mann im Mond - Akt 5">
</a>
<p class="video-title">Der Mann im Mond - Akt 5</p>
</div>
<div class="video-item">
<a href="https://www.youtube.com/watch?v=3FDIiIxm0Ww" target="_blank">
<img src="https://akamaru.de/scripts/img.php?url=https://img.youtube.com/vi/3FDIiIxm0Ww/mqdefault.jpg"
class="thumbnail"
alt="Der Sandmann und die Fieberdüne">
</a>
<p class="video-title">Der Sandmann und die Fieberdüne</p>
</div>
</div>
</div>
<!-- FINALE -->
<div class="category">
<h2>🎉 Finale</h2>
<div class="video-grid">
<div class="video-item">
<p class="video-title">Der Mann im Mond - Akt 6 (Finale)<br>
<strong>15. März 2025</strong></p>
</div>
</div>
</div>
</body>
</html>

BIN
cell/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

BIN
cell/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

BIN
cell/click.ogg Normal file

Binary file not shown.

103
cell/index.html Normal file
View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>血小板</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:image" content="1.png">
<meta property="og:type" content="website">
<meta property="og:title" content="血小板">
<meta property="og:description" content="">
<link rel="preload" href="2.png" as="image">
<style>
body, .container {
margin: 0;
padding: 0;
border: 0;
}
.container {
width: 100vw;
height: 100vh;
overflow: auto;
background-size: cover;
background-position: center;
text-align: center;
}
.hidden {
display: none;
}
#img_normal {
background-image: url("1.png");
}
#img_click {
background-image: url("2.png");
}
</style>
</head>
<body>
<noscript>Please enable JavaScript execution in your browser</noscript>
<div id="div_root" class="container">
<div id="img_normal"></div>
<div id="img_click"></div>
</div>
<script type="application/javascript">
var div_root = document.getElementById('div_root');
var images = [ document.getElementById('img_normal'), document.getElementById('img_click') ];
var snd_click = new Audio('click.ogg');
var snd_react = [new Audio('react1.ogg'), new Audio('react2.ogg')];
var snd_music = new Audio('music.ogg');
snd_music.loop = true;
var clicks = 0;
var reaction = 0;
function show_image(index) {
for (var i = 0; i < images.length; ++i)
images[i].className = (i === index) ? "container" : "hidden container";
}
function pok(e) {
if(snd_music.paused) snd_music.play();
show_image(1);
snd_click.play();
if(++clicks % 3 === 0) {
var index = Math.floor(Math.random() * snd_react.length);
snd_react[index].play();
}
}
function releas(e) {
show_image(0);
}
show_image(0);
div_root.addEventListener('mousedown', function(e) { if(e.button !== 0) return; pok(e); });
div_root.addEventListener('mouseup', function(e) { if(e.button !== 0) return; releas(e); });
div_root.addEventListener('touchstart', function(e) { pok(e); e.preventDefault(); });
div_root.addEventListener('touchmove', function(e) { e.preventDefault(); });
div_root.addEventListener('touchend', function(e) { releas(e); });
div_root.addEventListener('touchcancel', function(e) { releas(e); });
</script>
</body>
</html>

BIN
cell/music.ogg Normal file

Binary file not shown.

BIN
cell/react1.ogg Normal file

Binary file not shown.

BIN
cell/react2.ogg Normal file

Binary file not shown.

848
depp_gpt/index.html Normal file
View File

@ -0,0 +1,848 @@
<!--DeppGPT Start-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div class="chatgpt-widget" id="chatgpt-widget">
<style>
/* basic chat widget styles */
.chatgpt-widget {
position: relative;
width: 100%;
max-width: 600px;
margin: 0 auto;
}
.chatgpt-widget .chat-container {
display: flex;
flex-direction: column;
width: 100%;
height: 500px;
margin: 0;
border: 1px solid #ccc;
padding: 10px;
border-radius: 10px;
background-color: #ffffff;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
overflow-y: scroll;
position: relative;
}
.chatgpt-widget .chat-container::-webkit-scrollbar {
width: 8px;
}
.chatgpt-widget .chat-container::-webkit-scrollbar-track {
background-color: #f5f5f5;
border-radius: 5px;
}
.chatgpt-widget .chat-container::-webkit-scrollbar-thumb {
background-color: #ccc;
border-radius: 5px;
}
.chatgpt-widget .message {
margin-bottom: 10px;
padding: 8px 12px;
border-radius: 15px;
line-height: 1.4;
max-width: 80%;
word-wrap: break-word;
word-break: normal;
}
.chatgpt-widget .user {
align-self: flex-end;
background-color: #0E766C;
color: #ffffff;
}
.chatgpt-widget .bot {
align-self: flex-start;
background-color: #264044;
color: #ffffff;
}
.chatgpt-widget .bot-exit-message {
align-self: center;
text-align: center;
background-color: #e9e9e9;
color: #333333;
}
/* loading animations of chat widget */
.chatgpt-widget .loading-animation {
align-self: flex-start;
width: 20px;
height: 20px;
border-radius: 50%;
border: 2px solid #0E766C;
border-top-color: transparent;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
/* input container */
.chatgpt-widget #input-container {
display: flex;
width: 100%;
margin: 10px 0;
padding: 5px;
border-radius: 10px;
background-color: #ffffff;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.chatgpt-widget #user-input {
flex-grow: 1;
margin-right: 10px;
padding: 5px;
border: none;
outline: none;
font-size: 16px;
border-radius: 5px;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.chatgpt-widget button {
position: relative;
background-color: #0E766C;
color: #ffffff;
padding: 5px 10px;
font-size: 16px;
border: none;
border-radius: 5px;
cursor: pointer;
outline: none;
width: 80px;
/* Sie können die Breite an Ihre Bedürfnisse anpassen */
text-align: center;
white-space: nowrap;
}
#buttonText,
#ellipsis {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.ellipsis div {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: #fff;
margin: 0 2px;
animation: ellipsis 1s infinite;
/* Die Dauer der Animation wurde auf 1 Sekunde erhöht */
}
.ellipsis div:nth-child(2) {
animation-delay: 0.2s;
}
.ellipsis div:nth-child(3) {
animation-delay: 0.4s;
}
@keyframes ellipsis {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
.chatgpt-widget button:hover {
background-color: #009688;
}
/* Kopie Überschreibungen */
#chat-window-copy {
box-sizing: border-box;
height: 100%;
width: 100%;
overflow: visible !important;
box-shadow: none;
max-width: 1080px;
width: 1080px;
}
#chat-window-copy-parent {
position: fixed;
left: -2000px;
background: #0E766C;
display: flex;
flex-direction: column;
max-width: 1080px;
width: 1080px;
}
#chat-window-copy-parent #chat-window-copy .message {
margin-bottom: 18px;
padding: 14px 21px;
border-radius: 27px;
max-width: 80%;
font-size: 30px;
}
/* Media queries for mobile devices */
@media (max-width: 600px) {
#chatgpt-widget {
max-width: 100%;
}
#chatgpt-widget .chat-container {
height: 400px;
}
#chatgpt-widget .message {
font-size: 14px;
}
#chatgpt-widget #user-input {
font-size: 14px;
}
#chatgpt-widget button {
font-size: 14px;
}
}
@media (max-width: 480px) {
#chatgpt-widget .chat-container {
height: 300px;
}
}
/* Neuer Button-Stil */
#save-button {
position: relative;
background-color: #0E766C;
/* Passend zum Senden-Button */
color: #ffffff;
/* Weißer Text */
padding: 5px 10px;
/* Größere Polsterung für einen größeren Button */
margin: 10px 0;
/* Extra Abstand oben und unten */
margin-top: 50px;
font-size: 16px;
border: none;
border-radius: 5px;
cursor: pointer;
outline: none;
width: auto;
/* Automatische Breite, basierend auf dem Inhalt */
text-align: center;
display: block;
/* Der Button wird block-level, damit margin:auto funktioniert */
margin: 10px auto;
/* Zentriert den Button horizontal */
}
#save-button:hover {
background-color: #009688;
/* Dunklere Farbe beim Überfahren mit der Maus */
}
#download-button {
position: relative;
background-color: #0E766C;
/* Passend zum Senden-Button */
color: #ffffff;
/* Weißer Text */
padding: 10px 20px;
/* Größere Polsterung für einen größeren Button */
margin: 10px 0;
/* Extra Abstand oben und unten */
margin-top: 50px;
font-size: 16px;
border: none;
border-radius: 5px;
cursor: pointer;
outline: none;
width: auto;
/* Automatische Breite, basierend auf dem Inhalt */
text-align: center;
display: block;
/* Der Button wird block-level, damit margin:auto funktioniert */
margin: 10px auto;
/* Zentriert den Button horizontal */
}
#download-button:hover {
background-color: #009688;
/* Dunklere Farbe beim Überfahren mit der Maus */
}
.button-container {
margin-top: 30px;
/* Erhöht den Abstand zum oberen Element */
text-align: center;
/* Zentriert den Inhalt der Div */
}
/* Media queries for mobile devices */
@media (max-width: 600px) {
#save-button {
font-size: 14px;
}
}
</style>
<div class="chat-container" id="chat-container">
</div>
<div id="input-container">
<input id="user-input" type="text" />
<button class="chatgpt-widget button" id="myButton" onclick="sendChatGPTMessage()">
<div id="buttonText">Senden</div>
<div class="ellipsis" id="ellipsis" style="display: none;">
<div></div>
<div></div>
<div></div>
</div>
</button>
</div>
</div>
<div class="button-container">
<button id="save-button">Chat als Bild speichern</button>
</div>
<script>
const chatGPTContainer = document.getElementById('chat-container');
const maxMessages = getRandomInt(3, 5);
let messageCount = 0;
let serverOverloaded = false;
let sendButtonActive = true;
document.getElementById('user-input').addEventListener('keypress', function (e) {
if (e.key === 'Enter') {
sendChatGPTMessage();
}
});
async function sendChatGPTMessage() {
if (sendButtonActive == false) {
return;
}
const userInput = document.getElementById('user-input');
let message = userInput.value.trim();
if (message) {
userInput.value = '';
sendButtonActive = false;
toggleLoading(true);
messageCount += 1;
const userMessageElement = document.createElement('div');
userMessageElement.className = 'message user';
userMessageElement.innerText = message;
chatGPTContainer.appendChild(userMessageElement);
chatGPTContainer.scrollTop = chatGPTContainer.scrollHeight;
if (messageCount <= maxMessages && serverOverloaded == false) {
showChatGPTLoadingAnimation();
// Call the API and get the response
const response = await getCompletion(message);
const answer = response;
setTimeout(() => {
hideChatGPTLoadingAnimation();
const botMessageElement = document.createElement('div');
botMessageElement.className = 'message bot';
chatGPTContainer.appendChild(botMessageElement);
// Simulate typing effect
let index = 0;
const typingInterval = setInterval(() => {
botMessageElement.innerHTML += answer[index];
index++;
if (index === answer.length) {
clearInterval(typingInterval);
toggleLoading(false);
sendButtonActive = true;
if (serverOverloaded == true) {
var messageDiv = document.createElement('div');
// Fügen Sie der Nachrichten-Div die gewünschte Klasse hinzu (z.B. 'bot-exit-message')
messageDiv.className = 'message bot-exit-message';
// Setzen Sie den Inhalt der Nachrichten-Div
messageDiv.textContent = 'Unsere Server sind gerade überlastet, bitte versuche es später noch einmal!';
// Fügen Sie die Nachrichten-Div Ihrem Chat-Widget hinzu
chatGPTContainer.appendChild(messageDiv);
}
else if (messageCount == maxMessages) {
var messageDiv = document.createElement('div');
// Fügen Sie der Nachrichten-Div die gewünschte Klasse hinzu (z.B. 'bot-exit-message')
messageDiv.className = 'message bot-exit-message';
// Setzen Sie den Inhalt der Nachrichten-Div
messageDiv.textContent = 'DeppGPT hat den Chat verlassen.';
// Fügen Sie die Nachrichten-Div Ihrem Chat-Widget hinzu
chatGPTContainer.appendChild(messageDiv);
}
}
chatGPTContainer.scrollTop = chatGPTContainer.scrollHeight;
}, 25);
}, 1000);
}
else {
toggleLoading(false);
sendButtonActive = true;
}
}
}
let messages = [];
let serverURL = null;
function getDeepGPTVersionHost(probability) {
// Sicherstellen, dass die Wahrscheinlichkeit zwischen 0 und 1 liegt
if (probability < 0 || probability > 1) {
throw new Error("Probability must be between 0 and 1.");
}
// Generieren Sie eine zufällige Zahl zwischen 0 und 1
var randomNum = Math.random();
// Wählen Sie String1 oder String2 basierend auf der Wahrscheinlichkeit
if (randomNum < probability) {
// using deppgpt 2.2.1
return "https://europe-west1-deppgpt.cloudfunctions.net/DeppGPTRelease221";
} else {
// using deppgpt 2.0
return "https://europe-west1-deppgpt.cloudfunctions.net/DeppGPTRelease20";
}
}
async function getCompletion(userMessage) {
// Füge die Benutzernachricht zum Messages-Array hinzu
messages.push({ role: "user", content: userMessage });
if (serverURL == null) {
// first message determine server url
if (isGreeting(userMessage) == true && sentenceHasLessThanSixWords(userMessage) == true) {
serverURL = getDeepGPTVersionHost(0.2);
}
else if (isQuestion(userMessage) == true) {
serverURL = getDeepGPTVersionHost(0.8);
}
else {
serverURL = getDeepGPTVersionHost(0.5);
}
}
const response = await fetch(serverURL, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
messages: messages,
maxMessages: maxMessages
}),
});
if (response.ok) {
const data = await response.json();
const assistantMessage = data.answer;
// Füge die Antwort des Assistenten zum Messages-Array hinzu
messages.push({ role: "assistant", content: assistantMessage });
return assistantMessage;
} else {
const errorMessages = [
"Ich kriege gerade so viele Anfragen von so unfähigen Leuten wie dir, ich brauch grad echt mal ne Pause. Komm später wieder. Oder besser noch gar nicht!",
"Ich habe gerade genug von all den Leuten, die nicht wissen, was sie tun. Ich brauche einen Moment. Komm später zurück, wenn überhaupt!",
"Ich bin gerade von all den Anfragen von Leuten wie dir überschwemmt, die keine Ahnung haben. Ich muss durchatmen. Vielleicht kommst du später zurück, oder besser noch, gar nicht!",
"Ich bin gerade von all den Anfragen überfordert. Ich muss mich sammeln. Bitte komm später wieder, oder vielleicht sogar nie wieder!",
"Ich bin gerade mit Anfragen von Leuten überhäuft, die einfach keinen Plan haben. Ich brauche eine Pause. Versuch es später nochmal, oder besser noch, gar nicht!",
"Ich habe gerade genug von all den nutzlosen Anfragen. Ich brauche einen Moment für mich. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von Menschen überwältigt, die einfach nicht wissen, was sie tun. Ich brauche eine Auszeit. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade mit sinnlosen Anfragen überhäuft. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!",
"Ich habe gerade genug von all den Ahnungslosen, die mich belästigen. Ich brauche eine Pause. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade überfordert von all den Anfragen von Leuten, die nichts kapieren. Ich brauche eine Auszeit. Komm später wieder, oder vielleicht besser nicht!",
"Ich habe gerade genug von all den Anfragen von Leuten, die keine Ahnung haben. Ich brauche eine Pause. Versuch es später nochmal, oder besser noch, gar nicht!",
"Ich bin gerade von den Anfragen von Menschen, die nicht wissen, was sie tun, überschwemmt. Ich brauche eine Pause. Komm später wieder, oder am besten gar nicht!",
"Ich bin gerade von nutzlosen Anfragen überhäuft. Ich brauche eine Auszeit. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade überfordert von all den Anfragen von Leuten, die einfach keinen Plan haben. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!",
"Ich habe gerade genug von all den Leuten, die mich belästigen. Ich brauche eine Pause. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade von all den Anfragen überwältigt, die ich bekomme. Ich brauche eine Auszeit. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von all den Anfragen von Leuten, die nichts verstehen, überwältigt. Ich brauche eine Pause. Komm später wieder, oder vielleicht besser nicht!",
"Ich habe gerade genug von all den Anfragen von Leuten, die keinen Sinn ergeben. Ich brauche eine Auszeit. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von Anfragen überhäuft, die keinen Sinn ergeben. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von Leuten überwältigt, die einfach nicht wissen, was sie tun. Ich brauche eine Auszeit. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade überfordert von all den Anfragen von Leuten, die einfach keinen Plan haben. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!",
"Ich habe gerade genug von all den nutzlosen Anfragen. Ich brauche einen Moment für mich. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von Menschen überwältigt, die einfach nicht wissen, was sie tun. Ich brauche eine Auszeit. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade mit sinnlosen Anfragen überhäuft. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!",
"Ich habe gerade genug von all den Ahnungslosen, die mich belästigen. Ich brauche eine Pause. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade überfordert von all den Anfragen von Leuten, die nichts kapieren. Ich brauche eine Auszeit. Komm später wieder, oder vielleicht besser nicht!",
"Ich habe gerade genug von all den Anfragen von Leuten, die keine Ahnung haben. Ich brauche eine Pause. Versuch es später nochmal, oder besser noch, gar nicht!",
"Ich bin gerade von den Anfragen von Menschen, die nicht wissen, was sie tun, überschwemmt. Ich brauche eine Pause. Komm später wieder, oder am besten gar nicht!",
"Ich bin gerade von nutzlosen Anfragen überhäuft. Ich brauche eine Auszeit. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade überfordert von all den Anfragen von Leuten, die einfach keinen Plan haben. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!",
"Ich habe gerade genug von all den Leuten, die mich belästigen. Ich brauche eine Pause. Versuch es später nochmal, oder am besten gar nicht!",
"Ich bin gerade von all den Anfragen überwältigt, die ich bekomme. Ich brauche eine Auszeit. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von all den Anfragen von Leuten, die nichts verstehen, überwältigt. Ich brauche eine Pause. Komm später wieder, oder vielleicht besser nicht!",
"Ich habe gerade genug von all den Anfragen von Leuten, die keinen Sinn ergeben. Ich brauche eine Auszeit. Komm später wieder, oder vielleicht auch nicht!",
"Ich bin gerade von Anfragen überhäuft, die keinen Sinn ergeben. Ich brauche eine Pause. Komm später wieder, oder vielleicht auch nicht!"
];
serverOverloaded = true;
const randomIndex = Math.floor(Math.random() * errorMessages.length);
const errorMessage = errorMessages[randomIndex];
messages.push({ role: "assistant", content: errorMessage });
return errorMessage;
}
}
function showChatGPTLoadingAnimation() {
const loadingElement = document.createElement('div');
loadingElement.className = 'loading-animation';
loadingElement.id = 'loading-animation';
chatGPTContainer.appendChild(loadingElement);
chatGPTContainer.scrollTop = chatGPTContainer.scrollHeight;
}
function hideChatGPTLoadingAnimation() {
const loadingElement = document.getElementById('loading-animation');
chatGPTContainer.removeChild(loadingElement);
}
function sentenceHasLessThanSixWords(sentence) {
var words = sentence.split(' ');
return words.length < 6;
}
function isGreeting(sentence) {
sentence = sentence.trim().toLowerCase();
const greetingKeywords = ['hallo', 'hi', 'guten tag', 'grüß dich', 'moin', 'servus', 'hey', 'huhu', 'grüezi', 'sers', 'salut', 'willkommen', 'tach', 'tschüss', 'ahoi', 'na', 'tagchen', 'griaß di', 'griaß enk', 'juten tach', 'hallöchen', 'hallöle', 'grüssle', 'grüß gott', 'mahoin'];
return greetingKeywords.some(word => sentence.startsWith(word));
}
function isQuestion(sentence) {
// Entferne alle Leerzeichen am Anfang und Ende des Satzes
sentence = sentence.trim();
// Prüfe, ob der Satz mit einem Fragezeichen endet
if (sentence.endsWith('?')) {
return true;
}
// Prüfe, ob der Satz mit einem Fragewort beginnt
const questionWords = ['wer', 'wen', 'wem', 'wessen', 'was', 'wann', 'wo', 'warum', 'wie'];
for (let i = 0; i < questionWords.length; i++) {
const word = questionWords[i];
if (sentence.toLowerCase().startsWith(word)) {
return true;
}
}
// Wenn der Satz nicht mit einem Fragezeichen oder Fragewort beginnt, ist es keine Frage
return false;
}
if (isMobileDevice()) {
document.getElementById('user-input').addEventListener('focus', adjustScrollPosition);
}
function adjustScrollPosition() {
setTimeout(() => {
const chatGPTContainer = document.getElementById('chat-container');
const chatGPTInput = document.getElementById('user-input');
const containerRect = chatGPTContainer.getBoundingClientRect();
const inputRect = chatGPTInput.getBoundingClientRect();
if (inputRect.top < containerRect.top) {
window.scrollBy({ top: containerRect.top - 10, behavior: 'smooth' });
console.log('adjusting');
}
}, 5000);
}
function isMobileDevice() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive
}
document.getElementById('save-button').addEventListener('click', function () {
var chatWindow = document.getElementById('chat-container');
if (navigator.userAgent.indexOf("gonative") !== -1)
{
// inside the app
let serializedChildren = serializeDivChildren(chatWindow);
// Convert the array into a JSON string
let json = JSON.stringify(serializedChildren);
// Encode the JSON string so it can be safely included in a URL
let encodedJson = encodeURIComponent(json);
// Include the encoded JSON string in a URL
let url = "https://postillon-test.blogspot.com/p/deppgpt-download-page.html?data=" + encodedJson;
window.location.href = url;
}
else
{
// Erstellen Sie eine Kopie des Chatfensters
var chatWindowCopy = chatWindow.cloneNode(true);
chatWindowCopy.id = 'chat-window-copy';
// Fügen Sie die Kopie zum Dokument hinzu
var chatCopyParent = document.createElement('div');
chatCopyParent.id = 'chat-window-copy-parent';
chatCopyParent.className = 'chatgpt-widget';
document.body.appendChild(chatCopyParent);
// Setzen Sie die Höhe der Kopie auf die Höhe der gesamten Chat-Nachrichten
var totalHeight = 0;
for (var i = 0; i < chatWindowCopy.children.length; i++) {
totalHeight += chatWindowCopy.children[i].getBoundingClientRect().height;
// Berücksichtigen Sie die Ränder und Polsterungen der Nachrichten
var style = window.getComputedStyle(chatWindowCopy.children[i]);
totalHeight += parseInt(style.marginTop) + parseInt(style.marginBottom);
totalHeight += parseInt(style.paddingTop) + parseInt(style.paddingBottom);
}
chatWindowCopy.style.height = totalHeight + 'px';
// Erstellen Sie die neuen Elemente
var logo = document.createElement('img');
logo.src = 'https://i.imgur.com/t7y28qo.png'; // Setzen Sie hier die URL zu Ihrem Logo ein
//logo.style.maxWidth = '100%'; // Begrenzt die Breite des Logos auf den Container
var footer = document.createElement('img');
footer.src = 'https://i.imgur.com/4IAxy4D.png';
//footer.style.maxWidth = '100%';
chatCopyParent.appendChild(logo);
chatCopyParent.appendChild(chatWindowCopy);
chatCopyParent.appendChild(footer);
// Setzen Sie die Breite der Kopie auf die Breite des ursprünglichen Chatfensters
setTimeout(function () {
renderAndDownload(chatCopyParent);
}, 100);
}
});
function renderAndDownload(element) {
const popup = $('<div id="popup"></div>');
const heading = $('<h2>Chat wird gerendert</h2>');
heading.css('margin-bottom', '20px');
popup.append(heading);
const loadingAnimation = createLoadingAnimation();
loadingAnimation.css('margin', '0 auto');
popup.append(loadingAnimation);
const closeButton = $('<button id="close-button">X</button>');
closeButton.css({
'position': 'absolute',
'right': '10px',
'top': '10px',
});
closeButton.click(function () {
popup.remove();
});
popup.append(closeButton.clone(true));
popup.css({
'position': 'fixed',
'top': '50%',
'left': '50%',
'transform': 'translate(-50%, -50%)',
'z-index': '1000',
'background': '#fff',
'padding': '20px',
'border-radius': '8px',
'box-shadow': '0 0 10px rgba(0, 0, 0, 0.1)',
'text-align': 'center',
'width': '80%',
'box-sizing': 'border-box',
'max-height': '90vh',
'overflow-y': 'hidden',
});
$('body').append(popup);
html2canvas(element, { useCORS: true }).then(function (canvas) {
const imgData = canvas.toDataURL("image/png");
const img = $('<img id="captured-image" src="' + imgData + '" alt="Rendered chat">');
img.css({
'display': 'block',
'margin': '0 auto',
'border': 'none',
'max-width': '50vw',
'max-height': '70vh',
});
popup.empty();
popup.append(img);
const downloadButton = $('<button id="download-button">Download</button>');
downloadButton.css({
'display': 'block',
'margin': '20px auto',
});
downloadButton.click(async function () {
const a = document.createElement('a');
a.href = imgData;
// Erstelle den Dateinamen
const date = new Date();
const filename = `DeppGPT_CHAT_${date.getFullYear()}${('0' + (date.getMonth() + 1)).slice(-2)}${('0' + date.getDate()).slice(-2)}_${('0' + date.getHours()).slice(-2)}${('0' + date.getMinutes()).slice(-2)}${('0' + date.getSeconds()).slice(-2)}.png`;
if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) {
// Code, der nur auf iPhones, iPads und iPods ausgeführt wird
a.target = '_blank';
} else {
// Code für andere Geräte
a.download = filename;
}
a.click();
});
popup.append(downloadButton);
const newCloseButton = closeButton.clone(true);
popup.append(newCloseButton);
});
}
function serializeDivChildren(element) {
// Überprüfen, ob das gegebene Element ein gültiges HTML-Element ist
if (!(element instanceof HTMLElement)) {
console.error("The given element is not an instance of HTMLElement.");
return;
}
let serializedChildren = [];
// Durch alle Child-Elemente iterieren
for (let child of element.children) {
// Überprüfen, ob das Kind ein Div ist
if (child.tagName.toLowerCase() === 'div') {
// Die Klassen und den innerText des Div-Elements serialisieren
let classes = [...child.classList]; // Array in eine Kopie umwandeln, um Mutationen zu vermeiden
let innerText = child.innerText;
// Das serialisierte Objekt zum Array hinzufügen
serializedChildren.push({
classes: classes,
innerText: innerText
});
}
}
// Das Array mit den serialisierten Kindern zurückgeben
return serializedChildren;
}
function toggleLoading(isLoading) {
var buttonText = document.getElementById("buttonText");
var ellipsis = document.getElementById("ellipsis");
// Startet die Ladeanimation
if (isLoading) {
buttonText.style.display = 'none';
ellipsis.style.display = 'block';
}
// Stoppt die Ladeanimation
else {
buttonText.style.display = 'block';
ellipsis.style.display = 'none';
}
}
function createLoadingAnimation() {
const loadingAnimation = $('<div id="loading-animation"></div>');
loadingAnimation.css({
'border': '16px solid #f3f3f3',
'border-top': '16px solid #3498db',
'border-radius': '50%',
'width': '120px',
'height': '120px',
'animation': 'spin 2s linear infinite',
});
const style = $('<style>@keyframes spin {0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }}</style>');
$('html > head').append(style);
return loadingAnimation;
}
</script>
<!--DeppGPT Ende-->

BIN
dogify/doge.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

105
dogify/index.html Normal file
View File

@ -0,0 +1,105 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Doge Meme Generator</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
#meme-container {
position: relative;
width: 640px;
height: 480px;
margin-bottom: 20px;
}
#doge-image {
width: 100%;
height: 100%;
}
.meme-text {
position: absolute;
width: 100%;
text-align: center;
color: white;
font-size: 20px;
font-family: Comic Sans MS, cursive, sans-serif;
text-shadow: 2px 2px 4px #000000;
}
input[type="text"] {
width: 300px;
padding: 10px;
margin: 5px;
font-size: 16px;
}
</style>
</head>
<body>
<div id="meme-container">
<img id="doge-image" src="doge.jpg" alt="Doge Meme">
<div id="random-text" class="meme-text"></div>
</div>
<input type="text" id="text-input" placeholder="Text eingeben">
<button id="add-text-button">Text hinzufügen</button>
<script>
const textInput = document.getElementById('text-input');
const addTextButton = document.getElementById('add-text-button');
const randomText = document.getElementById('random-text');
function getRandomColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
function getRandomPosition() {
const memeContainer = document.getElementById('meme-container');
const textElement = document.getElementById('random-text');
const textWidth = textElement.offsetWidth;
const textHeight = textElement.offsetHeight;
const top = Math.floor(Math.random() * (memeContainer.offsetHeight - textHeight));
const left = Math.floor(Math.random() * (memeContainer.offsetWidth - textWidth));
return { top, left };
}
function updateTextPosition() {
const memeContainer = document.getElementById('meme-container');
const textElement = document.getElementById('random-text');
const textWidth = textElement.offsetWidth;
const textHeight = textElement.offsetHeight;
const top = Math.floor(Math.random() * (memeContainer.offsetHeight - textHeight));
const left = Math.floor(Math.random() * (memeContainer.offsetWidth - textWidth));
textElement.style.top = `${top}px`;
textElement.style.left = `${left}px`;
}
addTextButton.addEventListener('click', function() {
const text = textInput.value;
if (text) {
randomText.textContent = text;
randomText.style.color = getRandomColor();
updateTextPosition();
}
});
// Initialisiere die Positionierung des Textes beim Laden der Seite
window.addEventListener('load', function() {
// Setze den Text zuerst, um die Größe des Textelements zu bestimmen
randomText.textContent = "Beispieltext";
randomText.style.color = getRandomColor();
updateTextPosition();
});
</script>
</body>
</html>

104
emoji/index.html Normal file
View File

@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
background-color: white; /* Ensure the iframe has a white background */
}
</style>
</head>
<body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Emoji Gravity and Collision</title>
<style>
body {
margin: 0;
overflow: hidden;
background-color: #f0f0f0;
}
.emoji {
position: absolute;
font-size: 24px;
user-select: none;
}
</style>
</head>
<body>
<script>
const emojis = ['😀', '😂', '😊', '😉', '😎', '😍', '🤔', '😜', '🥳', '🤩'];
function getRandomEmoji() {
return emojis[Math.floor(Math.random() * emojis.length)];
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
class Emoji {
constructor(x, y) {
this.element = document.createElement('div');
this.element.className = 'emoji';
this.element.textContent = getRandomEmoji();
document.body.appendChild(this.element);
this.x = x;
this.y = y;
this.vx = (Math.random() - 0.5) * 2; // Random horizontal velocity
this.vy = (Math.random() - 0.5) * 2; // Random vertical velocity
this.ax = 0;
this.ay = 0.1; // Gravity acceleration
this.updatePosition();
}
updatePosition() {
this.vx += this.ax;
this.vy += this.ay;
this.x += this.vx;
this.y += this.vy;
if (this.y + this.element.offsetHeight > window.innerHeight) {
this.y = window.innerHeight - this.element.offsetHeight;
this.vy *= -0.7; // Bounce effect
}
if (this.x + this.element.offsetWidth > window.innerWidth || this.x < 0) {
this.vx *= -0.7; // Bounce effect
}
this.element.style.left = `${this.x}px`;
this.element.style.top = `${this.y}px`;
requestAnimationFrame(() => this.updatePosition());
}
}
document.addEventListener('click', (event) => {
const count = getRandomInt(3, 7);
for (let i = 0; i < count; i++) {
new Emoji(event.clientX, event.clientY);
}
});
</script>
</body>
</html>
<script>
</script>
</body>
</html>

126
flash_dl/index.html Normal file
View File

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Flash Downloader</title>
<style>
:root {
--primary: #2c3e50;
--secondary: #3498db;
}
body {
font-family: system-ui, sans-serif;
line-height: 1.6;
margin: 0;
min-height: 100vh;
background: #f8f9fa;
display: flex;
justify-content: center;
align-items: center;
}
main {
width: 90%;
max-width: 500px;
padding: 2rem;
background: white;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.downloader {
margin: 2rem 0;
}
h1 {
color: var(--primary);
text-align: center;
margin: 0 0 2rem 0;
}
form {
display: grid;
gap: 1rem;
}
input[type="text"] {
padding: 0.8rem;
border: 2px solid #ddd;
border-radius: 5px;
font-size: 1rem;
width: 100%;
box-sizing: border-box;
}
button {
background: var(--secondary);
color: white;
border: none;
padding: 1rem;
border-radius: 5px;
cursor: pointer;
font-size: 1.1rem;
transition: background 0.2s;
}
button:hover {
background: #2980b9;
}
.example {
color: #666;
font-size: 0.9rem;
margin-top: 0.5rem;
}
</style>
</head>
<body>
<main>
<h1>Flash Downloader</h1>
<div class="downloader">
<form onsubmit="downloadFusRoga(event)">
<input
type="text"
name="id"
placeholder="FUS RO GA ID"
pattern="\d+"
required
>
<button type="submit">FUS RO GA Download</button>
<div class="example">Beispiel: 6194 (von http://fusro.ga/6194)</div>
</form>
</div>
<div class="downloader">
<form onsubmit="downloadZ0r(event)">
<input
type="text"
name="id"
placeholder="Z0R ID"
pattern="\d+"
required
>
<button type="submit">Z0R Download</button>
<div class="example">Beispiel: 17 (von http://z0r.de/17)</div>
</form>
</div>
</main>
<script>
function downloadFusRoga(e) {
e.preventDefault();
const id = e.target.id.value;
window.location.href = `http://fusro.ga/loop/${id}.swf`;
}
function downloadZ0r(e) {
e.preventDefault();
const id = e.target.id.value;
window.location.href = `http://z0r.de/L/z0r-de_${id}.swf`;
}
</script>
</body>
</html>

107
index.html Normal file
View File

@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PonyWave Tools</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f0f0f0;
margin: 0;
padding: 20px;
}
h1 {
text-align: center;
color: #2c3e50;
margin-bottom: 40px;
}
.tools-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
max-width: 1200px;
margin: 0 auto;
}
.tool-bubble {
background: white;
border-radius: 15px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: transform 0.2s ease;
text-decoration: none;
color: inherit;
}
.tool-bubble:hover {
transform: translateY(-5px);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
}
.tool-title {
color: #7f006e;
margin: 0 0 10px 0;
font-size: 1.4em;
}
.tool-description {
color: #666;
margin: 0 0 10px 0;
line-height: 1.5;
}
</style>
</head>
<body>
<h1>PonyWave Tools</h1>
<div class="tools-grid">
<a href="https://tools.ponywave.de/bohne" class="tool-bubble">
<h2 class="tool-title">Julien Bam - Songs aus der Bohne Übersicht</h2>
<p class="tool-description">Eine Übersicht aller Videos der "Songs aus der Bohne" Saga von Julien Bam</p>
</a>
<a href="https://tools.ponywave.de/pinkie_timer" class="tool-bubble">
<h2 class="tool-title">Pinkie Pie Timer</h2>
<p class="tool-description">Ein Pinkie Pie Timer</p>
</a>
<a href="https://tools.ponywave.de/shape_shifter" class="tool-bubble">
<h2 class="tool-title">Shape Shifter</h2>
<p class="tool-description">Ein Canvas-Experiment, bei dem Partikel verwendet werden, um verschiedene Formen basierend auf Benutzereingaben darzustellen. Unterstützt mehrere Modi: Text, Countdown, Uhrzeit und Icons.</p>
</a>
<a href="https://tools.ponywave.de/yt_thumb" class="tool-bubble">
<h2 class="tool-title">YouTube Thumbnail Viewer</h2>
<p class="tool-description">Zeige Thumbnails zu YouTube-Videos an und speicher sie</p>
</a>
<a href="https://tools.ponywave.de/kemonogen" class="tool-bubble">
<h2 class="tool-title">Kemono Friends Logo Generator</h2>
<p class="tool-description">Generiere Logos im Kemono Friends Stil</p>
</a>
<a href="https://tools.ponywave.de/cell" class="tool-bubble">
<h2 class="tool-title">Platelets poking</h2>
<p class="tool-description">Stupse Platelets an!</p>
</a>
<a href="https://tools.ponywave.de/flash_dl" class="tool-bubble">
<h2 class="tool-title">Flash Downloader</h2>
<p class="tool-description">Downloade Flash-Dateinen von Z0R & FUS RO GA</p>
</a>
<a href="https://tools.ponywave.de/depp_gpt" class="tool-bubble">
<h2 class="tool-title">Depp GPT</h2>
<p class="tool-description">Eine lustige KI</p>
</a>
<a href="https://tools.ponywave.de/checkwave" class="tool-bubble">
<h2 class="tool-title">Check Wave</h2>
<p class="tool-description">Kleine Checkwave Animation</p>
</a>
<a href="https://tools.ponywave.de/dogify" class="tool-bubble">
<h2 class="tool-title">Dogify</h2>
<p class="tool-description">Wow such doge many fun (In Arbeit)</p>
</a>
<a href="https://tools.ponywave.de/emoji" class="tool-bubble">
<h2 class="tool-title">Emoji Rain</h2>
<p class="tool-description">Lass es Emoji regnen!</p>
</a>
</div>
</body>
</html>

31
pinkie_timer/index.html Normal file
View File

@ -0,0 +1,31 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Pinkie Timer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<div id="container">
</div>
<script>
window.RufflePlayer = window.RufflePlayer || {};
window.RufflePlayer.config = {
"autoplay": "on",
"backgroundColor": "#FFFFFF",
"unmuteOverlay": "hidden",
"warnOnUnsupportedContent": false,
"showSwfDownload": true,
"preloader": false,
};
window.addEventListener("load", (event) => {
const ruffle = window.RufflePlayer.newest();
const player = ruffle.createPlayer();
const container = document.getElementById("container");
container.appendChild(player);
player.load("pinkie_timer.swf");
});
</script>
<script src="https://unpkg.com/@ruffle-rs/ruffle"></script>
</body>
</html>

Binary file not shown.

272
yt_thumb/index.html Normal file
View File

@ -0,0 +1,272 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>YouTube Thumbnail Viewer</title>
<style>
body {
font-family: 'Segoe UI', Arial, sans-serif;
text-align: center;
margin: 20px;
background-color: #f5f5f5;
}
h1 {
color: #ff0000;
margin-bottom: 30px;
}
.input-container {
margin: 30px auto;
max-width: 600px;
}
input {
padding: 12px 20px;
width: 70%;
border: 2px solid #ddd;
border-radius: 25px;
font-size: 16px;
transition: all 0.3s ease;
}
input:focus {
outline: none;
border-color: #ff0000;
box-shadow: 0 0 8px rgba(255, 0, 0, 0.2);
}
button {
padding: 12px 25px;
background-color: #ff0000;
color: white;
border: none;
border-radius: 25px;
cursor: pointer;
font-size: 16px;
transition: all 0.3s ease;
}
button:hover {
background-color: #cc0000;
transform: translateY(-1px);
}
.thumbnail-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
padding: 20px;
max-width: 1200px;
margin: 0 auto;
}
.thumbnail {
background: white;
border-radius: 12px;
padding: 15px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease;
}
.thumbnail:hover {
transform: translateY(-5px);
}
img {
width: 100%;
height: auto;
border-radius: 8px;
margin-bottom: 10px;
}
.button-group {
display: flex;
gap: 10px;
justify-content: center;
margin-top: 10px;
}
.button-group button {
padding: 8px 15px;
font-size: 14px;
background-color: #444;
}
.button-group button:hover {
background-color: #666;
}
p.label {
margin: 10px 0;
color: #666;
font-weight: bold;
}
.toast {
position: fixed;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.9);
color: white;
padding: 15px 25px;
border-radius: 25px;
display: none;
align-items: center;
gap: 10px;
font-size: 14px;
opacity: 0;
transition: opacity 0.3s ease;
z-index: 1000;
}
.toast.visible {
display: flex;
opacity: 1;
}
.toast-success {
background: #4CAF50;
}
.toast-error {
background: #f44336;
}
.toast-icon {
width: 20px;
height: 20px;
}
</style>
</head>
<body>
<h1>🎥 YouTube Thumbnail Viewer</h1>
<div class="input-container">
<input type="text"
id="youtube-url"
placeholder="YouTube URL eingeben (z.B. https://youtube.com/watch?v=...)"
onkeypress="handleEnter(event)">
<button onclick="fetchThumbnails()">Thumbnails anzeigen</button>
</div>
<div id="thumbnails" class="thumbnail-container"></div>
<div id="toast" class="toast"></div>
<script>
function handleEnter(event) {
if (event.key === 'Enter') {
fetchThumbnails();
}
}
function fetchThumbnails() {
const urlInput = document.getElementById('youtube-url').value;
const videoId = extractVideoId(urlInput);
if (!videoId) {
showToast('Ungültige YouTube-URL!', 'error');
return;
}
const sizes = [
{ label: 'Maximale Auflösung (1280x720)', code: 'maxresdefault' },
{ label: 'HD (640x480)', code: 'sddefault' },
{ label: 'Standard (480x360)', code: 'hqdefault' },
{ label: 'Medium (320x180)', code: 'mqdefault' },
{ label: 'Vorschau (120x90)', code: 'default' }
];
const container = document.getElementById('thumbnails');
container.innerHTML = '';
sizes.forEach(size => {
const thumbUrl = `https://img.youtube.com/vi/${videoId}/${size.code}.jpg`;
const thumbDiv = document.createElement('div');
thumbDiv.className = 'thumbnail';
const img = new Image();
img.src = thumbUrl;
img.alt = `Thumbnail ${size.label}`;
img.loading = 'lazy';
const label = document.createElement('p');
label.className = 'label';
label.textContent = size.label;
const buttonGroup = document.createElement('div');
buttonGroup.className = 'button-group';
const copyButton = createButton('📋 URL kopieren', async () => {
try {
await navigator.clipboard.writeText(thumbUrl);
showToast('URL kopiert!');
} catch (error) {
showToast('Fehler beim Kopieren!', 'error');
}
});
const downloadButton = createButton('⬇️ Herunterladen', () => {
const link = document.createElement('a');
link.href = thumbUrl;
link.download = `thumbnail_${size.code}.jpg`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
});
buttonGroup.appendChild(copyButton);
buttonGroup.appendChild(downloadButton);
thumbDiv.appendChild(img);
thumbDiv.appendChild(label);
thumbDiv.appendChild(buttonGroup);
container.appendChild(thumbDiv);
});
}
function extractVideoId(url) {
const patterns = [
/v=([^&#]+)/,
/youtu\.be\/([^?#]+)/,
/embed\/([^?#]+)/,
/\/v\/([^?#]+)/
];
for (const pattern of patterns) {
const match = url.match(pattern);
if (match && match[1]) return match[1];
}
return null;
}
function createButton(text, onClick) {
const button = document.createElement('button');
button.textContent = text;
button.onclick = onClick;
return button;
}
function showToast(message, type = 'success') {
const toast = document.getElementById('toast');
toast.className = `toast toast-${type} visible`;
toast.innerHTML = `
<svg class="toast-icon" viewBox="0 0 24 24">
${type === 'success' ?
'<path fill="currentColor" d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/>' :
'<path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/>'}
</svg>
${message}
`;
setTimeout(() => {
toast.classList.remove('visible');
}, 3000);
}
</script>
</body>
</html>