Skip to content

Instantly share code, notes, and snippets.

@yelizariev
Last active July 2, 2026 05:06
Show Gist options
  • Select an option

  • Save yelizariev/f0e89c48583ab94cb751aa1b36eaf509 to your computer and use it in GitHub Desktop.

Select an option

Save yelizariev/f0e89c48583ab94cb751aa1b36eaf509 to your computer and use it in GitHub Desktop.
china.mydream42.com
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://perestroika-2.com/images/night-club.jpg">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://diana.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v7/Adam.js",
"three": "https://unpkg.com/three@0.163.0/build/three.module.js",
"three/addons/": "https://unpkg.com/three@0.163.0/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<script>
// y=0 is the table surface
// x=0, z=0 are chess board symmetry
const ANGELS = [{
"position": [-0.4, 3.4, -10],
"target": [4.4, 0.8, -0.3],
},{
"position": [12.6, 3.0, -11.1],
"target": [4.4, 0.8, -0.3],
},{
"position": [10.9, 9.6, -18.4],
"target": [4.4, 0.8, -0.3],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- Painting -->
<img id="office1" style="display:none" crossorigin="anonymous"/>
<img id="office2" style="display:none" crossorigin="anonymous"/>
<!-- Retro Screen -->
<video id="exodus2" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible2" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 55000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
const OfficeFrames = [{
"img_id": "office1",
"width": 5.2,
"height": 4.8,
"position": [2.54, 6.5, 14.3],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xfffae3,
map: texture,
side: THREE.DoubleSide,
});
},
},{
img_id: "office2",
width: 208, // 5.2 * 40
height: 192, // 4.8 * 40
position: [6.6, 328, 984], // (5,-140,380) + (0.04,11.7,15.1)*40
rotation: [0, 0, 0],
material: function(texture){
return new THREE.MeshBasicMaterial({
color: 0xfffae3,
map: texture,
side: THREE.DoubleSide,
});
},
}];
const OfficePaintings = [
"{{ markdown.yaml.Image }}",
];
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x178587 );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
const hemiLight = new THREE.HemisphereLight(0xffffff, 0x85010E, 5.0);
hemiLight.position.set(0, 10, 0);
scene.add(hemiLight);
// Create a blue skybox
const skyGeometry = new THREE.BoxGeometry(40, 22, 50);
const skyMaterial = new THREE.MeshBasicMaterial({ color: 0x373442, side: THREE.BackSide });
const sky = new THREE.Mesh(skyGeometry, skyMaterial);
sky.position.set(0, 4, 0);
scene.add(sky);
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
let alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || 0;
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
let ELEVENLABS_CONVERSATION_ID
(function() {
const OrigWebSocket = window.WebSocket;
window.WebSocket = function(url, protocols) {
const ws = protocols ? new OrigWebSocket(url, protocols) : new OrigWebSocket(url);
ws.addEventListener('message', (ev) => {
try {
const data = JSON.parse(ev.data);
if (data.audio_event) {
console.log("WebSocket: ", "AUDIO");
} else {
console.log("WebSocket: ", data);
}
if (data.type == "client_tool_call" && data.client_tool_call.tool_name == "secret_door"){
let door = "{{ markdown.yaml.SecretDOOR }}";
door = `https://diana.lamourism.com/?debug=${encodeURIComponent(door)}`;
setTimeout(function(){
window.location.href = door;
}, 5000);
}
if (! ELEVENLABS_CONVERSATION_ID && data.type === 'conversation_initiation_metadata') {
console.log('conversation_initiation_metadata:', data);
ELEVENLABS_CONVERSATION_ID = data.conversation_initiation_metadata_event.conversation_id;
}
} catch (e) {
console.log("WebSocket: ", e);
}
});
// 捕获关闭事件 | intercepter l’événement de fermeture
ws.addEventListener('close', (ev) => {
console.log(
'[WebSocket closed]',
'code =', ev.code,
'reason =', ev.reason,
'wasClean =', ev.wasClean
);
OpenTELEPORT();
});
return ws;
};
})();
function rabbit_hole(alice){
let happy = false;
return new Promise((resolve, reject) => {
document.addEventListener("click", function(){
if (happy) {
return;
}
// 法语: créer un objet Audio et jouer | 中文: 创建 Audio 对象并播放
const audio = new Audio("{{ markdown.yaml.JukeBOX | default: 'https://moses.lamourism.com/radio/mishary-rashid-alafasy-128-muslimcentral.com.mp3' }}");
audio.loop = true;
audio.play()
.then(() => {
console.log("Lecture démarrée 🎵 / 播放开始");
})
.catch(err => console.error("Erreur de lecture / 播放错误:", err));
// Repeat just in case of security issues on first attempt
PravdaTV(scene, OfficePaintings, OfficeFrames);
// Load the Assistant
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iElf.glb",
function (gltf) {
let model = gltf.scene;
const scale = 0.05;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI;
model.position.set(4.4, -0.5, -0.3)
scene.add(model);
resolve();
},
undefined,
(error) => reject(error)
);
// Retro Screen
// 法语: paramètres recalculés après changement d’échelle et de position
// 中文: 按新缩放与模型位置重算后的参数
ShabbatTV(scene, {
video_id: "exodus2",
source_id: "bible2",
start: 12,
width: 2040, // 170 * 12
height: 1500, // 125 * 12
position: [484, 114, -888], // (-500, -6666, -900) + (82,565,1)*12
rotation: [0.2, Math.PI, 0], // 法语: inchangé | 中文: 保持不变
material: function(texture){
return new THREE.MeshBasicMaterial({
color: 0xE0EBDF,
map: texture,
side: THREE.FrontSide,
});
},
});
happy = true;
}); // The Click Handler
})
}; // ...rabbit_hole
// Load the iOffice and iKitty board first
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iOffice.glb",
(gltf) => {
const model = gltf.scene;
const scale = 5;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI / 2;
model.position.set(2.5, -5.2, -0.8);
scene.add(model);
PravdaTV(scene, OfficePaintings, OfficeFrames);
resolve(model);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iKitty.glb",
(gltf) => {
const model = gltf.scene;
model.position.set(0, 0, 0);
model.rotation.y = Math.PI / 2 + Math.PI/4;
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
})
]).then(([iOffice, iKitty]) => {
rabbit_hole("🐇").then(() => {
let model, scale;
model = iKitty.clone();
scale = 55;
model.rotation.y = 0;
model.scale.set( scale, scale, scale );
model.position.set(10, 20, 0);
scene.add(model);
model = iOffice.clone();
scale = 200;
model.scale.set( scale, scale, scale );
model.position.set(5, -140, 380);
scene.add(model);
// Load Retro PC
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/i386.glb",
function (gltf) {
let model = gltf.scene;
const scale = 6000;
model.scale.set( scale, scale, scale );
model.position.set(-500, -6666, -900)
scene.add(model);
});
})
}).catch((error) => {
console.error("Loading failed:", error);
});
function OpenTELEPORT() {
let demo;
let callback;
if (ELEVENLABS_CONVERSATION_ID) {
// === Black Box Magic ===
// 法语: l’URL de base est injectée par Liquid lors du rendu
// 中文: 基础 URL 在 Liquid 渲染时注入
let black_box = "{{ markdown.yaml.BlackBOX | default: 'https://moses.lamourism.com/%D0%A1%D1%83%D0%BD%D0%B4%D1%83%D0%BA-%D0%A1%D0%BE%D0%BA%D1%80%D0%BE%D0%B2%D0%B8%D1%89/' }}";
// 法语: sécurité: s’assurer du "/" final | 中文: 保险起见,确保末尾有 "/"
if (black_box && !black_box.endsWith('/')) black_box += '/';
// 法语: suffixe/clé métier que tu détermines côté JS | 中文: 由 JS 决定的后缀/业务键
let XXX = ELEVENLABS_CONVERSATION_ID;
// 法语: URL finale pour la ressource (non encodée) | 中文: 最终资源 URL(未编码)
let blackbox_item = black_box + XXX + ".mp3";
demo = "{{ markdown.yaml.Next }}";
demo = `${demo}?jukebox=${encodeURIComponent(blackbox_item)}`
// IEL: Add Static Portal in Between
// 法语: callback complet — on encode seulement blackbox_item côté JS | 中文: 完整回调,仅对 blackbox_item 在 JS 侧编码
callback = `https://diana.lamourism.com/?debug=${demo}&sleep=30111`;
} else {
// Something doesn't work... But you got the idea.
demo = "{{ markdown.yaml.Next }}";
callback = `https://love.lamourism.com/?debug=${demo}`;
}
window.location.href = callback;
}
function CheckTELEPORT() {
const x = camera.position.x,
y = camera.position.y,
z = camera.position.z;
// 法语: vérifier si chaque coordonnée est dans [0,1000]
// 中文: 检查每个坐标是否在 [0,1000] 范围内
const inRange = (x >= -500 && x <= 666) &&
(y >= -999 && y <= 555) &&
(z >= -666 && z <= 999);
if (!inRange) {
// Let's go a little bit deeper this time.
OpenTELEPORT()
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
CheckTELEPORT();
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = -111999;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<script>
console.pray(`
{{ markdown.RAW | replace: "`", "\`" }}
`);
</script>
</div>
<elevenlabs-convai
agent-id="agent_6501k62rb36yfrsrc7rqahq19q4p"
{% if markdown.yaml.AI_WELCOME_MESSAGE %}
override-first-message="{{ markdown.yaml.AI_WELCOME_MESSAGE | escape }}"
override-prompt="{{ markdown.TEXT | escape }}"
{% endif %}
{% if markdown.yaml.AI_VOICE_ID %}
override-voice-id="{{ markdown.yaml.AI_VOICE_ID }}"
{% endif %}
></elevenlabs-convai>
<script src="https://unpkg.com/@elevenlabs/convai-widget-embed" async type="text/javascript"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v19/Adam.js",
"three": "https://unpkg.com/three@0.163.0/build/three.module.js",
"three/addons/": "https://unpkg.com/three@0.163.0/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<script>
// y=0 is the table surface
// x=0, z=0 is the table portal
const ANGELS = [{
"position": [0, 2, -3],
"target": [0, 0.95, 0],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- iPad -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.Kino }}" type="video/mp4">
</video>
<!-- Paintings -->
<img id="banner" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
const BACKGROUND_COLOR = 0x748694;
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100333);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
// TODO: PravdaTV
const Banner = [
"{{ markdown.yaml.Image }}",
];
const BannerFrames = [{
"img_id": "banner",
"width": 20,
"height": 10,
"position": [850, 100, 330],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( BACKGROUND_COLOR );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
// Create a blue skybox
const skyGeometry = new THREE.BoxGeometry(12, 10, 5);
const skyMaterial = new THREE.MeshBasicMaterial({ color: BACKGROUND_COLOR, side: THREE.BackSide });
const sky = new THREE.Mesh(skyGeometry, skyMaterial);
sky.position.set(0, 1, 0);
scene.add(sky);
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
let alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || 0;
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
// 法语: Crée une série de clones “matriochkas” à partir d’un modèle déjà chargé
// 中文: 从已加载模型克隆出多层“套娃”效果
function matrioska({
model, // 法语: le modèle THREE.Object3D déjà chargé | 中文: 已加载的 THREE.Object3D 模型
items, // ex: [1, 0.8, 0.6] // 法语: facteurs d’échelle | 中文: 缩放因子数组
center, // THREE.Vector3 ou {x,y,z} // 法语: point de référence | 中文: 参考中心点
baseScale = 1.0, // 法语: facteur de base du modèle | 中文: 模型基础缩放
basePosition = new THREE.Vector3(0,0,0), // 法语: position initiale | 中文: 初始位置
parent = null // 法语: parent cible (scene ou group) | 中文: 父级目标(如scene或Group)
}) {
const clones = [];
const C = center.isVector3 ? center.clone() : new THREE.Vector3(center.x, center.y, center.z);
items.forEach((s) => {
// 法语: clone profond de la hiérarchie | 中文: 深度克隆整个层级
const clone = model.clone(true);
// 法语: échelle finale = baseScale * s | 中文: 最终缩放 = 基础比例 * s
clone.scale.setScalar(baseScale * s);
// 法语: position recalculée autour de C | 中文: 围绕中心C重新计算位置
const shifted = new THREE.Vector3().copy(basePosition).sub(C).multiplyScalar(s).add(C);
clone.position.copy(shifted);
(parent || scene).add(clone); // 法语: ajouter à la scène si pas de parent | 中文: 若无父级则添加到场景
clones.push(clone);
});
return clones;
};
function rabbit_hole(alice){
return new Promise((resolve, reject) => {
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
const audio = document.getElementById("music");
audio.play().catch(err => console.log("Autoplay blocked:", err));
//PravdaTV(scene, Banner, BannerFrames);
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"start": parseFloat("{{ markdown.yaml.KinoStart | default: 0 }}"),
"width": 0.77,
"height": 0.51,
"position": [0.245, 0.695, -0.3],
"rotation_order": "YXZ",
"rotation": [0,Math.PI,0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xece6ff,
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
Promise.all([
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iSuitCaseRadiation.glb",
(gltf) => {
const model = gltf.scene;
const scale = 15;
//model.rotation.y = 1.8;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI/2;
model.position.set(0, 3, 0);
scene.add(model);
},
undefined,
(error) => reject(error)
),
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iSuitCase.glb",
(gltf) => {
const model = gltf.scene;
const scale = 30;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI/2;
model.position.set(0, 3, 0);
scene.add(model);
},
undefined,
(error) => reject(error)
),
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iLuggage.glb",
(gltf) => {
const model = gltf.scene;
const scale = 22;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI/2;
model.position.set(0, -20, 0);
scene.add(model);
},
undefined,
(error) => reject(error)
),
]).then(function(){
resolve();
// load Matrioska at the last momemnt
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iMatrioska.glb",
(gltf) => {
// 法语: supposons que “originalModel” est déjà chargé et ajouté | 中文: 假设 originalModel 已经加载好
const model = gltf.scene;
model.rotation.y = 1.8;
const clones = matrioska({
model: model,
baseScale: 0.05,
items: [0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.08],
center: new THREE.Vector3(0, 1, 0),
basePosition: new THREE.Vector3(0, 0.3, 0),
parent: scene
});
},
undefined,
(error) => reject(error)
);
});
}); // The Click Handler
})
}; // ...rabbit_hole
// Load the iTerminal and the iAirPods first
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iTerminal.glb",
(gltf) => {
resolve(gltf.scene);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iAirPods.glb",
(gltf) => {
resolve(gltf.scene);
},
undefined,
(error) => reject(error)
);
})
]).then(([iTerminal, iAirPods]) => {
// iTerminal
const model = iTerminal
const scale = 1;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI;
model.position.set(0.1, 0, 0);
scene.add(model);
rabbit_hole("🐇").then(() => {
const model = iAirPods;
const scale = 50;
model.rotation.y = 0.5;
model.scale.set( scale, scale, scale );
model.position.set(550, -25, -460);
scene.add(model);
console.log("¡Welcome!");
});
}).catch((error) => {
console.error("Loading failed:", error);
});
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://matrix.mydream42.com/?debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 10777000) {
console.log("go-go-go");
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = -20;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<audio id="music" autoplay loop crossorigin="anonymous" style="display:none">
<source src="https://moses.lamourism.com/radio/mishary-rashid-alafasy-126-muslimcentral.com.mp3" type="audio/mpeg">
</audio>
<script>
const audio = document.getElementById("music");
// When metadata is ready, set a random start
audio.addEventListener("loadedmetadata", () => {
const duration = audio.duration; // in seconds
// If browser can't read duration (e.g. live streams), fallback to 3600s (1h)
const length = isFinite(duration) ? duration : 3600;
audio.currentTime = Math.random() * length;
audio.volume = 0.6;
});
console.pray(`
{{ markdown.RAW | replace: "`", "\`" }}
`);
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="{{ markdown.yaml.Icon | default: 'https://jesus.lamourism.com/favicon.ico' }}"/>
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<script src="https://amsterdam.mydream42.com/yelizariev/0a92d9448b5ffa7e39929d7548056464/❌❌❌/qrcode.js"></script>
<style>
html, body { height: 100%; }
body{
margin:0;
overflow:hidden;
background:#000;
color:#fff;
cursor:pointer;
font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
}
/* Background canvas (shader) */
canvas{
width:100%;
height:auto;
user-select:none;
display:block;
}
/* Image overlay layer */
#overlay{
position:fixed;
inset:0;
pointer-events:none;
z-index:10;
}
.slide{
position:absolute;
left:50%;
top:50%;
transform: translate(-50%, -50%) scale(0.05);
opacity:0;
transform-origin:50% 50%;
filter: drop-shadow(0 20px 60px rgba(0,0,0,0.45));
will-change: transform, opacity;
max-width: 80vw;
max-height: 80vh;
padding: 3px;
background-color: white;
}
.play{
animation: popInHold 9s ease-in-out forwards;
}
.slide img {
width: 100%;
height: auto;
max-height: 80vh;
object-fit: contain;
display: block;
}
@keyframes popInHold{
0% { opacity:0; transform: translate(-50%, -50%) scale(0.05); }
12% { opacity:0.95; transform: translate(-50%, -50%) scale(1.00); }
100% { opacity:0.95; transform: translate(-50%, -50%) scale(1.00); }
}
@media (prefers-reduced-motion: reduce){
.slide{ animation:none !important; opacity:1; transform: translate(-50%, -50%) scale(1) !important; }
}
</style>
</head>
<body>
<!-- Intro audio (kept as in your page) -->
<audio id="music" autoplay loop crossorigin="anonymous" style="display:none">
<source src="https://moses.lamourism.com/radio/mishary-rashid-alafasy-130-muslimcentral.com.mp3" type="audio/mpeg">
</audio>
<!-- Overlay where QR image appears -->
<div id="overlay" aria-label="Overlay"></div>
<!-- Shader -->
<script type="x-shader/x-fragment">#version 300 es
precision highp float;
out vec4 O;
uniform float time;
uniform vec2 resolution;
#define FC gl_FragCoord.xy
#define R resolution
#define T time
#define hue(a) (.6+.6*cos(6.3*(a)+vec3(0,83,21)))
float rnd(float a) {
vec2 p=fract(a*vec2(12.9898,78.233)); p+=dot(p,p*345.);
return fract(p.x*p.y);
}
vec3 pattern(vec2 uv) {
vec3 col=vec3(0);
for (float i=.0; i++<20.;) {
float a=rnd(i);
vec2 n=vec2(a,fract(a*34.56)), p=sin(n*(T+7.)+T*.5);
float d=dot(uv-p,uv-p);
col+=.00125/d*hue(dot(uv,uv)+i*.125+T);
}
return col;
}
void main(void) {
vec2 uv=(FC-.5*R)/min(R.x,R.y);
vec3 col=vec3(0);
float s=2.4,
a=atan(uv.x,uv.y),
b=length(uv);
uv=vec2(a*5./6.28318,.05/tan(b)+T);
uv=fract(uv)-.5;
col+=pattern(uv*s);
O=vec4(col,1);
}
</script>
<script>
window.onload = init;
function init() {
let renderer, canvas;
const dpr = Math.max(1, .5 * devicePixelRatio);
const resize = () => {
const { innerWidth: width, innerHeight: height } = window;
canvas.width = width * dpr;
canvas.height = height * dpr;
if (renderer) renderer.updateScale(dpr);
};
const source = document.querySelector("script[type='x-shader/x-fragment']").textContent;
canvas = document.createElement("canvas");
document.body.appendChild(canvas);
document.body.style.margin = "0";
document.body.style.touchAction = "none";
document.body.style.overflow = "hidden";
renderer = new Renderer(canvas, dpr);
renderer.setup();
renderer.init();
resize();
if (renderer.test(source) === null) renderer.updateShader(source);
window.onresize = resize;
const loop = (now) => {
renderer.render(now);
requestAnimationFrame(loop);
};
loop(0);
}
class Renderer {
#vertexSrc = "#version 300 es\nprecision highp float;\nin vec4 position;\nvoid main(){gl_Position=position;}";
#fragmtSrc = "#version 300 es\nprecision highp float;\nout vec4 O;\nuniform float time;\nuniform vec2 resolution;\nvoid main(){vec2 uv=gl_FragCoord.xy/resolution;O=vec4(uv,sin(time)*.5+.5,1);}";
#vertices = [-1, 1, -1, -1, 1, 1, 1, -1];
constructor(canvas, scale) {
this.canvas = canvas;
this.scale = scale;
this.gl = canvas.getContext("webgl2");
this.gl.viewport(0, 0, canvas.width * scale, canvas.height * scale);
this.shaderSource = this.#fragmtSrc;
}
updateScale(scale) {
this.scale = scale;
this.gl.viewport(0, 0, this.canvas.width * scale, this.canvas.height * scale);
}
compile(shader, source) {
const gl = this.gl;
gl.shaderSource(shader, source);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
console.error(gl.getShaderInfoLog(shader));
}
}
test(source) {
let result = null;
const gl = this.gl;
const shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(shader, source);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) result = gl.getShaderInfoLog(shader);
if (gl.getShaderParameter(shader, gl.DELETE_STATUS)) gl.deleteShader(shader);
return result;
}
reset() {
const { gl, program, vs, fs } = this;
if (!program || gl.getProgramParameter(program, gl.DELETE_STATUS)) return;
if (!gl.getShaderParameter(vs, gl.DELETE_STATUS)) { gl.detachShader(program, vs); gl.deleteShader(vs); }
if (!gl.getShaderParameter(fs, gl.DELETE_STATUS)) { gl.detachShader(program, fs); gl.deleteShader(fs); }
gl.deleteProgram(program);
}
updateShader(source) {
this.reset();
this.shaderSource = source;
this.setup();
this.init();
}
setup() {
const gl = this.gl;
this.vs = gl.createShader(gl.VERTEX_SHADER);
this.fs = gl.createShader(gl.FRAGMENT_SHADER);
this.compile(this.vs, this.#vertexSrc);
this.compile(this.fs, this.shaderSource);
this.program = gl.createProgram();
gl.attachShader(this.program, this.vs);
gl.attachShader(this.program, this.fs);
gl.linkProgram(this.program);
if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) {
console.error(gl.getProgramInfoLog(this.program));
}
}
init() {
const { gl, program } = this;
this.buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.#vertices), gl.STATIC_DRAW);
const position = gl.getAttribLocation(program, "position");
gl.enableVertexAttribArray(position);
gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0);
program.resolution = gl.getUniformLocation(program, "resolution");
program.time = gl.getUniformLocation(program, "time");
}
render(now = 0) {
const { gl, program, buffer, canvas } = this;
if (!program || gl.getProgramParameter(program, gl.DELETE_STATUS)) return;
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.useProgram(program);
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.uniform2f(program.resolution, canvas.width, canvas.height);
gl.uniform1f(program.time, now * 1e-3);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
}
}
</script>
<script>
// 中文 ✨ 祈祷打印:按词数延迟输出
// ✨ FR : Impression “prière” avec temporisation proportionnelle
console.pray = function (text) {
const lines = String(text || "").split("\n");
let delay = 500;
lines.forEach((line) => {
const wc = line.trim() ? line.trim().split(/\s+/).length : 0;
setTimeout(() => console.log(line), delay);
delay += Math.max(1, wc) * 100;
});
};
const urlParams = new URLSearchParams(window.location.search);
const witch = urlParams.get("debug") || "{{ markdown.yaml.Next }}";
function next() {
window.location.href = witch;
}
function showQR() {
const overlay = document.getElementById("overlay");
overlay.innerHTML = "";
const qr = document.createElement("div");
qr.className = "slide";
new QRCode(qr, {
text: "{{ markdown.yaml.QR | default: 'https://china.mydream42.com/yelizariev/f0e89c48583ab94cb751aa1b36eaf509/XXX/TODO.markdown/?debug=' }}" + witch,
width: 1000,
height: 1000,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.M // L/M/Q/H
});
setTimeout(function(){
qr.className = "slide play";
overlay.appendChild(qr);
}, 1000);
}
showQR();;
setTimeout(function(){
console.pray(`{{ markdown.RAW | replace: "`", "\`" }}`);
}, 2000);
const startTime = Date.now();
let happy = false;
document.addEventListener("click", function () {
if (happy) return;
happy = true;
const audio = document.getElementById("music");
audio.play().catch(() => {}); // user gesture enables audio
const TOTAL_DURATION = 12000;
const elapsed = Date.now() - startTime;
let remaining = TOTAL_DURATION - elapsed;
if (remaining < 0) {
remaining = 0;
}
setTimeout(next, remaining);
}, { once: true });
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment