Hardlimit banner in app broadcasts tournaments between elite UCI chess engines
-
Hello comrades, a warm greeting to all and especially to my friends krampak, Cobito and all those who taught me a lot at a time when I didn't know anything.
I'll get straight to the point, for some time now I've been busy with a GNU/Xboard open-source application or graphical interface, with the aim of making real-time broadcasts. Basically the structure was Xboard or Winboard (windows) a client (tlcs) tunnel (Wireguard) vps and node-tlcv which allowed to display games in real-time on a web viewer (html). But the limitations were that I couldn't make tournaments, only matches between two engines. I have managed to do that, but it's not my goal. Then I set out to create (I had the more modern interface, but I lost it and those who use it don't share it) a more modern application with the basics so that live broadcasts can be made in real-time between a list of the top 10 chess engines that are on the most popular rating lists worldwide. But unfortunately, they don't share how to do it, and in some cases you have to pay (I respect that, but I don't share it in this specific case that is not a software to commercialize and that was previously free and still is in GNU, that have taken advantage of the GNU source code to then close the code and make those tests). Well, as a proposal for everything I have learned here and that I continue to learn, I would like to include a Hardlitmit Banner (unique, I won't put anything else) so that people who connect to watch the tournaments can know about our forum.) Without any commitment and for my gratitude and good memories of this endearing place and good people. https://github.com/jordiqui/IjccrlChessGui/tree/main (here is the project on github, it's not finished, but when it is and I hope to compile today to test, I would like to add hardlimit in a relevant place of the web viewer. Happy weekend and happy christmas to all forum members, especially to my friend krampak (I'm back on the bike this year from Guardamar del segura, Alicante to reach 4 w/kg) and Cobito for his tremendous work on this forum. -
@jordiqui Hello. I think it's a good idea. In fact, if you want, you could use the forum as the program's support center. Probably at the end of January, the first multi-language tests of the forum will begin, in case you have an international user base.
I'm away and I can't look at the details of your development (I'm on my mobile). When I get back, I'll take a look.
Best regards, thanks for thinking of Hardlimit and congratulations on the tool.
-
@cobito said in Hardlimit banner in app broadcast tournaments between elite UCI chess engines:
@jordiqui Hi. I think it's a good idea. In fact, if you want, you could use the forum as the program's support center. Probably by the end of January, the forum's first multilingual tests will begin, in case you have an international user base.
I'm away and I can't look at the details of your development (I'm on my mobile). When I get back, I'll take a look.
Best regards, thanks for thinking of Hardlimit and congratulations on the tool.
Well, it's a good idea to use the forum as a support center, because you know how to program, many of you actually work on it and from my side, I use GPT and GPT's Codex for complex tasks, but I can barely write three lines of code. What I did have clear was the project's architecture since for months I've reviewed what little there was on this topic with sourcode. We're in the holiday season and everyone is busy. But of course, it hadn't crossed my mind and you've hit the nail on the head. And yes, I have thought about you, about the forum, it couldn't be otherwise. I take this opportunity to wish everyone a Merry Christmas and if you tell me where you think it's more appropriate to open the thread. Hugs!
-
This post is being processed/translated. The original version will be shown:
Perfecto. Vamos a endurecer el tono, hacerlo más “hardlimit”, y añadir fragmentos de código clave, sin postureo ni marketing. Esto es para gente que ha peleado con IPC, clocks y procesos en Windows/Linux.
Te dejo un post técnico, listo para publicar, con propuesta clara del banner de hardlimit al final.
Retransmisión de ajedrez en tiempo real – arquitectura UCI + Node.js (sin PGN, sin WinBoard)Buenas,
abro este mensaje para documentar una solución técnica real encontrada hoy, después de meses de pruebas con arquitecturas que funcionaban pero no resolvían el problema de fondo.
Lo comparto aquí porque el enfoque es interesante desde el punto de vista de arquitectura de sistemas, IPC, tiempo real y diseño limpio, independientemente de que os interese o no el ajedrez.
El problema (definido correctamente)Objetivo:
- Retransmitir partidas jugada a jugada en tiempo real
- Motores locales (Stockfish y derivados)
- Relojes exactos (control tipo 120+1)
- Latencia mínima
- Visualización estable durante horas
- Control total del stack
Restricciones reales:
PGN no es tiempo real (es un log)
WinBoard/XBoard es frágil bajo ejecución prolongada
Grabación de pantalla no es una solución técnica
APIs cerradas / servicios externos = caja negra
Conclusión temprana (que tardamos en aceptar):
El problema no se resuelve añadiendo capas, sino quitándolas.
Por qué descartamos la app “clásica”Durante meses usamos:
- cutechess-cli
- WinBoard
- VPS + scripts
- parsing de PGN
- polling periódico
Sí, funcionaba… pero:
- Latencia acumulada
- Relojes inexactos
- Estados inconsistentes
- Complejidad innecesaria
- Demasiados puntos de fallo
El error no era de implementación.
Era arquitectónico.
Arquitectura final (la que sí funciona)La solución fue bajar al nivel correcto: UCI puro.
[ Motor A ] [ Motor B ] │ │ └────── UCI ───────┘ │ Node.js (proxy UCI) child_process.spawn │ WebSocket (push) │ NavegadorSin PGN.
Sin WinBoard.
Sin polling.
Fragmento clave 1: Lanzar motores (IPC real)import { spawn } from "child_process"; const engine = spawn( "C:/engines/brainlearnjrc.exe", [], { stdio: "pipe", windowsHide: true } ); engine.stdin.write("uci\n"); engine.stdin.write("isready\n");Esto no es un wrapper mágico.
Es stdin/stdout directo, como debe ser.
♟️ Fragmento clave 2: Loop UCI mínimo
engine.stdout.on("data", (buf) => { const lines = buf.toString().split("\n"); for (const line of lines) { if (line.startsWith("info ")) { // depth, eval, pv → streaming } if (line.startsWith("bestmove")) { // aplicar jugada inmediatamente } } });Cada
bestmovees la verdad.
No hay estados intermedios ni reinterpretaciones.
️ Fragmento clave 3: Relojes exactos (no simulados)Este era el punto crítico.
En lugar de
movetime, se usa reloj real UCI:go wtime 120000 btime 120000 winc 1000 binc 1000En el proxy:
thinkingStartedAt = Date.now(); // cuando llega bestmove const elapsed = Date.now() - thinkingStartedAt; wTime = wTime - elapsed + increment;Resultado:
- Relojes exactos
- Incremento real
- Comportamiento idéntico a un GUI serio
- Sin drift acumulado
Fragmento clave 4: WebSocket (push real)Nada de polling.
const wss = new WebSocketServer({ server }); function broadcast(obj) { const msg = JSON.stringify(obj); wss.clients.forEach(ws => ws.send(msg)); }Eventos emitidos:
moveclockinfo
Latencia perceptible ≈ cero.
️ Visualización: decisiones pragmáticas- Piezas Unicode
- CSS local
- Sin CDN
- Sin SVG
- Sin dependencias externas
¿Por qué?
Porque no se rompe.
Esto tiene que aguantar horas/días en directo.
Resultado realEn pocas horas:
- Retransmisión jugada a jugada
- Tiempo real auténtico
- Relojes exactos
- Eval/PV en vivo
- Sistema estable
- Código simple y auditable
Lo que durante meses no cuajó con arquitecturas más “bonitas”.
🧠 Conclusión (para ingenieros)
- El PGN no es tiempo real
- WinBoard no está pensado para streaming moderno
- El nivel correcto era UCI, no por encima
- Menos capas = más fiabilidad
A veces la optimización real no es micro, sino conceptual.
🧩 Propuesta: banner de HardLimit
Dado que este proyecto se ha desbloqueado gracias a debates y mentalidad técnica como la que siempre ha habido aquí, me gustaría integrar un banner discreto de HardLimit en el visor live, por ejemplo:
“Proyecto desarrollado y documentado por miembros veteranos de HardLimit.com”
Con enlace directo al foro/hilo.
Si a los moderadores o a la comunidad le parece bien, encantado de hacerlo.
Si alguien quiere:
- revisar código
- debatir clocks / scheduling
- portar a Linux puro
- o discutir escalado
lo comentamos sin problema.
Un saludo

y larga vida a los foros técnicos de verdad. -
Now I write, because I am half-blind from writing. As you can read, we have found the way to do it precisely because I suggested it to GPT plus, because with the app (I do not rule out using it if I can get out of the funnel, to run it from linux on a vps, but that would be later) there was no way. Now it is solved, as the IA has explained well. A hug, comrades. -
I have planned to take a look at the code, but between one thing and another, I haven't had time. Let's see if I can wrap up a few things.
-
I'll send you the link with my contacts, most of whom are all foreigners, except for a couple of subscribers who are from here (one of them lives in my old neighborhood in BCN). https://pixeldrain.com/u/7g3JuJrn
-
@jordiqui That site is blocked. At least, I can't access it.
-
@cobito I just opened it from my side, and without problems. Anyway, I'm uploading it to mega. I take the opportunity to also upload the source code of the project that we have obtained for fih real-time transmission.
https://mega.nz/file/BjtQSIpa#Qgch1fBAWD3T3GfUPMVT8_BMail7b1ceD4WANXjfvxY -
The link with the sourcode (ui and details need polishing, but it already works)
https://mega.nz/file/By9nxagA#WKCU20-l_zDJkYJzFgsdMHP_IiSwpyYz-3cGFDuRVvU -
) -

Now I'm uploading the complete code for you. For @cobito when you can and have time in the index.html to put the hardlimit banner. I have already finished polishing it as much as I could, but since everything can always be improved, now that it works without breaking, I will see if I can upload it to the hostinguer cloud, which is where I have the website, which allows me to install node and upload the entire project to run on the server to avoid the most likely crashes at home and that consumes my resources, which are crashes in the cloud. The ideal is vps, but since I have cloud and this generates nothing, then if hostinguer allows it in this hosting modality, then we put it there. But anyway, you can comment and propose things, for this we leave the thread as the center of operations. -
-
said in Hardlimit banner in app broadcast tournaments between elite UCI chess engines:
Now I'm uploading the complete code. So that @cobito when you can and have time in the index.html put the hardlimit banner. I have already finished polishing it as much as I could, but as everything can always be improved, now that it works without breaking I will see if I can upload it to the hostinguer cloud which is where I have the web, which allows me to install node and upload the entire project to run on the server to avoid the most likely crashes at home and that consumes my resources, which are the crashes in the cloud. The ideal is VPS, but as I have cloud and this generates nothing, then if hostinguer allows it in this hosting modality then we put it there. But we can comment and propose things, for this we leave the thread as the center of operations.https://ijccrl-live.ijccrl.com/ ( now it is already seen in real time, I have had to get a little dizzy having to use cloudfare, tunnel etc, but now it is a matter of you saying where we can place the banner, because it will have guaranteed visits)
-
UI build: 2026-02-12F (Rules v1 enforced + /conditions aligned)
In these weeks we have consolidated a truly operational base for broadcasting UCI engine tournaments (beta mode), focusing on robustness and traceability:
- list item
Stable UI live: automatic WebSocket reconnection + inactivity watchdog + HTTP fallback to prevent “frozen screens” when changing matches or after server restarts.
No GUI dependency: UCI → server → sockets → UI pipeline; the front only renders what the backend emits.
Telemetry and clear reading: panels per side (score/depth/nodes/nps/time/PV), clocks and turn state, main board + minis.
Rules v1 already applied: the rules are executed in the backend and remain visible/auditable in endpoints.
/conditions aligned: the conditions endpoint becomes the source of truth (time control, adjudications/claims, etc.) and the UI synchronizes with it.
Summary: today it is no longer “a pretty demo”; it is a platform that withstands long sessions and game changes without manual intervention, and with visible and aligned rules for auditing.

- list item
-
Hello @jordiqui First of all, sorry for the delay in responding. I've been swamped.
My ISP doesn't allow me to access Pixeldrain, so I can't see the latest version of the code. I've added the logo in the previous version of index.html to keep testing. To avoid third-party dependencies (I personally try to avoid them at all costs with Hardlimit), I've added the image in base64 so that it's self-contained in the HTML itself. But if you want, it can be taken out into a separate image file or I can put it on public access from hardlimit.com to keep the html clean.
I've made a "dark" version in the style of the test bench.
I see that you have the page pretty well laid out and I'm not sure where I could fit it in; maybe in the footer, in a corner. Or if you want, I'll pass by here the HTML code with the logo in its own div so that you just have to copy and paste it where you want.
Let me know and congratulations on the project. It's very cool.
-
@cobito said in Hardlimit banner in app broadcast tournaments between elite UCI chess engines:
Hello @jordiqui, First of all, sorry for the delay in responding. I've been swamped.
My ISP doesn't allow me to access Pixeldrain, so I can't see the latest version of the code. I've added the logo in the previous version of the index.html to start testing. To avoid third-party dependencies (I personally try to avoid them at all costs with Hardlimit), I've added the image in base64 so that it's self-contained in the HTML itself. But if you want, it can be put in a separate image file or I can make it publicly accessible from hardlimit.com to keep the HTML clean.
I've made a "dark" version in the style of the test bench.
I see that you've laid out the page pretty well and I'm not sure where I could fit it; maybe in the footer, in a corner. Or if you want, I'll send you the HTML code with the logo in its own div so you can just copy and paste it wherever you want.
Let me know and congratulations on the project. It's really cool.
Hi buddy, I've made a.zip of the UI source code so you can see where we can fit the banner so that it's well encapsulated in a box (the ideal is that it's visible) within the current distribution with a link to the forum. (currently analyzing the data from cloudfare, we're not going below 1000k daily without doing any promotion because we're in the testing phase and trying to get the pairings right, scripts to audit the completed tests, until we go to production, which is when visits will really increase since it's a niche that's perhaps little known, but with thousands of followers. United States, Spain, Russia, Denmark, etc. (since I'm using the free plan from cloudfare, I can't count exactly how many of those 1000k+ daily visitors come from bots and how many from real users, but considering we haven't done anything official, it can be considered a good sign.) Regards!
-
I am "arguing with gtp" to move to an iframe and get the necessary space for the banner to be visible. We are working on it, and as soon as we have a properly formatted layout, I will upload the source code of the index.html because I am launching the first tournament on March 1st and I would like to have the banner there. However, I do not know how to embed it with html code, css, etc. I leave it to your discretion, as I know it is always correct.
-
Hello colleagues. To make it more interesting, since the community of chess engine programmers (not all) hates those who make mods, substantial changes to the code, but they are still derivatives of Stockfish, it makes life difficult for you. In the mini pc I have ported the project, and what has been months, in an afternoon we have changed the routes, created another subdomain, etc., and I have another tournament but of original chess engines. @cobito the ui that I have already left in zip for you and for the colleagues of the forum, is almost ready, to be able to put a vertical banner in a fourth block of the layout, but it was necessary to touch the backend and I could not do it anymore.
I stop again and this build does have improvements compared to the first photo of this thread, to download. Index.html.Best regards and happy weekend.
-
@jordiqui That's up to you. I think the simplest way is inside a simple div. Something like
<div class=logo><img src="https://hardlimit.com/logo.png" alt="Hardlimit's logo"></div>Or by embedding the image within the HTML with base64:
<div class=logo><img src="data:image/png;base64, [...]==" alt="Hardlimit's logo" /></div>I think it's the simplest and you can always style it from CSS.