Read the statement by Michael Teeuw here.
Clock Clock 24
- 
 Hello, has anyone ever tried to make a module for clock clock 24? The original Clock Clock 24 is kinetic art by Humans since 1982. Twenty-four analog clocks form a large digital clock. Clever arrangement of the clock hands transforms the analog clocks into seven-segment displays. At the time of writing you can buy the clock at $ 5,999.00 in the MoMA store. I found a guy who actualy created the code for this all this requires is just creating a module for this for MM which i can’t do. Check out the link https://codepen.io/Lorti/details/XpQewQ. 
- 
 @cmgp looks good. Have fun programming it :-D 
 Seriously, the mirror has proven not to be very strong with animations. You could think about leaving the animations out.
 I think that would miss the fun part.
- 
 Do you mean it  
- 
 @Piranha1605 @cmgp LOL! 
- 
 @lavolp3 Actually the programmer posted the code too bad i can’t make a module: HTML 
 .art- var d = 0;
 while d < 4
 .digit
 - var c = 0;
 while c < 6
 svg(class=clock clock--${d * 6 + c}width=“100” height=“100” viewBox=“0 0 100 100”)
 path(class=“clock-smallHand” d=“M50,47 C48.3431458,47 47,48.3431458 47,50 C47,51.6568542 48.3431458,53 50,53 L95,53 L95,47 L50,47 Z” stroke=“none” fill=“#4A4A4A” fill-rule=“evenodd”)
 path(class=“clock-largeHand” d=“M50,47 C48.3431458,47 47,48.3431458 47,50 C47,51.6568542 48.3431458,53 50,53 L100,53 L100,47 L50,47 Z” stroke=“none” fill=“#4A4A4A” fill-rule=“evenodd”)
 - c++
 - d++
 .text
 h1 Clock Clock 24
 p
 small Code
 br
 a(href=“https://manu.ninja/”) Manuel Wieser
 p
 small Design
 br
 a(href=“http://www.humanssince1982.com/”) Humans since 1982
 .trigger.trigger–left
 .trigger.trigger–right
 CSS html { 
 width: 100%;
 height: 100%;
 }body { 
 min-height: 100%;display: flex; 
 flex-direction: column;
 align-items: center;
 justify-content: center;font-family: ‘Source Sans Pro’, sans-serif; 
 color: #4a4a4a;cursor: default; 
 }.art { 
 cursor: zoom-in;
 margin: 5vw 0;
 }.art–full { 
 cursor: zoom-out;
 }.text { 
 margin-bottom: 5vw;
 text-align: center;
 }a { 
 color: lighten(#4a4a4a, 25%);
 text-decoration: none;
 }.digit { 
 float: left;
 }.clock { 
 –small-hand: -135deg;
 –large-hand: -45deg;margin: .3vw; // 3px 
 width: 10vw;
 height: 10vw;border-radius: 50%; 
 box-shadow: inset 0 1px 3px rgba(0, 0, 0, .25);float: left; 
 &:nth-of-type(2n+1) {
 clear: left;
 }
 }.clock-smallHand, 
 .clock-largeHand {
 transform-origin: 50px center;
 transition: transform 10s;
 }.clock-smallHand { 
 transform: rotateZ(var(–small-hand));
 }.clock-largeHand { 
 transform: rotateZ(var(–large-hand));
 }.s-hidden { 
 display: none;
 }.trigger { 
 position: fixed;
 bottom: 0;
 width: 25%;
 height: 5vw;
 cursor: help;
 }.trigger–left { 
 left: 0;
 }.trigger–right { 
 right: 0;
 }JS const digits = [ 
 [ // 0
 { hour: 6, minute: 15 },
 { hour: 9, minute: 30 },
 { hour: 6, minute: 0 },
 { hour: 0, minute: 30 },
 { hour: 3, minute: 0 },
 { hour: 0, minute: 45 }
 ], [ // 1
 { hour: 7.5, minute: 37.5 },
 { hour: 6, minute: 30 },
 { hour: 7.5, minute: 37.5 },
 { hour: 6, minute: 0 },
 { hour: 7.5, minute: 37.5 },
 { hour: 0, minute: 0 }
 ], [ // 2
 { hour: 3, minute: 15 },
 { hour: 9, minute: 30 },
 { hour: 6, minute: 15 },
 { hour: 0, minute: 45 },
 { hour: 0, minute: 15 },
 { hour: 9, minute: 45 }
 ], [ // 3
 { hour: 3, minute: 15 },
 { hour: 9, minute: 30 },
 { hour: 3, minute: 15 },
 { hour: 9, minute: 0 },
 { hour: 3, minute: 15 },
 { hour: 9, minute: 0 }
 ], [ // 4
 { hour: 6, minute: 30 },
 { hour: 6, minute: 30 },
 { hour: 0, minute: 15 },
 { hour: 6, minute: 0 },
 { hour: 7.5, minute: 37.5 },
 { hour: 0, minute: 0 }
 ], [ // 5
 { hour: 6, minute: 15 },
 { hour: 9, minute: 45 },
 { hour: 0, minute: 15 },
 { hour: 6, minute: 45 },
 { hour: 3, minute: 15 },
 { hour: 0, minute: 45 }
 ], [ // 6
 { hour: 6, minute: 15 },
 { hour: 9, minute: 45 },
 { hour: 6, minute: 0 },
 { hour: 6, minute: 45 },
 { hour: 0, minute: 15 },
 { hour: 0, minute: 45 }
 ], [ // 7
 { hour: 3, minute: 15 },
 { hour: 6, minute: 45 },
 { hour: 7.5, minute: 37.5 },
 { hour: 6, minute: 0 },
 { hour: 7.5, minute: 37.5 },
 { hour: 0, minute: 0 }
 ], [ // 8
 { hour: 6, minute: 15 },
 { hour: 6, minute: 45 },
 { hour: 0, minute: 15 },
 { hour: 0, minute: 45 },
 { hour: 0, minute: 15 },
 { hour: 0, minute: 45 }
 ], [ // 9
 { hour: 6, minute: 15 },
 { hour: 6, minute: 45 },
 { hour: 3, minute: 0 },
 { hour: 6, minute: 0 },
 { hour: 3, minute: 15 },
 { hour: 0, minute: 45 }
 ]
 ];const happyDigit = Array(6).fill({ hour: 22.5, minute: 7.5 }); 
 const neutralDigit = Array(6).fill({ hour: 7.5, minute: 7.5 });function showSpecialState(digit) { 
 stopClock();
 for (let x = 0; x < 4; x++) {
 setDigit(x, digit);
 }
 window.setTimeout(() => startClock(), 10000);
 }document.querySelector(‘.trigger–left’).addEventListener(‘click’, e => { 
 showSpecialState(happyDigit);
 });document.querySelector(‘.trigger–right’).addEventListener(‘click’, e => { 
 showSpecialState(neutralDigit);
 });window.addEventListener(‘keydown’, e => { 
 const h = 72;
 const n = 78;
 if (h === e.keyCode) {
 showSpecialState(happyDigit);
 }
 if (n === e.keyCode) {
 showSpecialState(neutralDigit);
 }
 });document.querySelector(‘.art’).addEventListener(‘click’, e => { 
 document.querySelector(‘.text’).classList.toggle(‘s-hidden’);
 document.querySelector(‘.art’).classList.toggle(‘art–full’);
 })function hourToDegrees(hour) { 
 return hour * (360 / 12) - 90;
 }function minuteToDegrees(minute) { 
 return minute * (360 / 60) - 90;
 }function setHands(id, hour, minute) { 
 const clock = document.querySelector(.clock--${id});
 clock.style.setProperty(--small-hand,${hourToDegrees(hour) + 360}deg);
 clock.style.setProperty(--large-hand,${minuteToDegrees(minute) - 360}deg);
 }function setDigit(id, values) { 
 for (let x = 0; x < 6; x++) {
 setHands(id * 6 + x, values[x].hour, values[x].minute);
 }
 }function setTime(time) { 
 setDigit(0, digits[time.charAt(0)]);
 setDigit(1, digits[time.charAt(1)]);
 setDigit(2, digits[time.charAt(3)]);
 setDigit(3, digits[time.charAt(4)]);
 }let state; 
 let interval;function startClock() { 
 state = ‘----’;
 interval = window.setInterval(() => {
 const time = new Date(Date.now() + 10000).toTimeString();
 if (time !== state) {
 setTime(time);
 state = time;
 }
 }, 1000);
 }function stopClock() { 
 clearInterval(interval);
 }startClock(); 
- var d = 0;
- 
 Download the zip file from codepen and load everything with MMM-iFrame or with my MMM-Watchstore. 
- 
 @Piranha1605 Thanks for the help works perfectly with watchstore couldn’t get it to work with iframe. 


