OpenThermaCore 1.0

Impression thermique ESC/POS · Toshiba TEC TRST

ESC/POS thermal printing · Toshiba TEC TRST

ESC/POS-Thermodruck · Toshiba TEC TRST

OpenThermaCore

Une imprimante de tickets que Windows refusait de faire vivre. Ce programme la sauve.

A receipt printer today's Windows refused to keep alive. This program saves it.

Ein Bondrucker, den das heutige Windows nicht mehr am Leben lassen wollte. Dieses Programm rettet ihn.

Le pilote d'origine est ancien et non signé numériquement. OpenThermaCore s'en passe : il parle ESC/POS, le standard ouvert que la machine comprend nativement, et envoie des données brutes à travers Windows. Le pilote utilisé n'a alors plus aucune importance.

The original driver is old and not digitally signed. OpenThermaCore does without it: it speaks ESC/POS, the open standard the machine understands natively, and sends raw data through Windows. The driver in use then stops mattering.

Der Originaltreiber ist alt und nicht digital signiert. OpenThermaCore kommt ohne ihn aus: Es spricht ESC/POS, den offenen Standard, den das Gerät von Haus aus versteht, und schickt Rohdaten durch Windows. Welcher Treiber benutzt wird, spielt dann keine Rolle mehr.

Hébergé sur GitLab, en accès libre et sans compte. Domaine public sous CC0 1.0 : rien à accepter, rien à devoir.

Hosted on GitLab, freely accessible, no account needed. Public domain under CC0 1.0: nothing to accept, nothing owed.

Auf GitLab gehostet, frei zugänglich, ohne Konto. Gemeinfrei unter CC0 1.0: nichts zuzustimmen, nichts geschuldet.


Ce qu'il fait

What it does

Was es kann

Sept choses, et aucune n'entre dans la machine

Seven things, and none of them enters the machine

Sieben Dinge, und keines davon greift in das Gerät ein

  • Tickets de texte
    Text receipts
    Textbons
    Largeur 58 ou 80 mm, gras, centrage, taille double, sept modes de fin, et plusieurs tickets d'un coup séparés par une ligne de tirets.
    58 or 80 mm width, bold, centring, double size, seven ending modes, and several receipts at once separated by a line of dashes.
    Breite 58 oder 80 mm, fett, zentriert, doppelte Größe, sieben Abschlussarten, und mehrere Bons auf einmal, getrennt durch eine Strichlinie.
  • Impression d'images
    Image printing
    Bilddruck
    BMP et PNG lus par le programme lui-même, JPEG et GIF avec Pillow. Diffusion d'erreur pour les photos, seuil net pour les logos.
    BMP and PNG read by the program itself, JPEG and GIF with Pillow. Error diffusion for photographs, hard threshold for logos.
    BMP und PNG liest das Programm selbst, JPEG und GIF mit Pillow. Fehlerdiffusion für Fotos, harte Schwelle für Logos.
  • Logo de session
    Session logo
    Sitzungslogo
    Une image convertie une fois et imprimée en tête de chaque ticket — gardée dans la mémoire du programme, jamais dans celle de l'imprimante.
    An image converted once and printed at the top of every receipt — held in the program's memory, never in the printer's.
    Ein Bild, einmal umgewandelt und über jedem Bon gedruckt — im Speicher des Programms gehalten, nie in dem des Druckers.
  • Pages de diagnostic
    Diagnostic pages
    Diagnoseseiten
    Mire de caractères, balayage des tables de codes, test thermique de la tête.
    Character chart, code page scan, thermal head test.
    Zeichentafel, Durchlauf der Codetabellen, Thermotest des Druckkopfs.
  • Scripts ESC/POS
    ESC/POS scripts
    ESC/POS-Skripte
    Octets bruts écrits à la main, envoyés exactement tels quels. 0x1B 0x40, et rien de plus.
    Raw bytes written by hand, sent exactly as typed. 0x1B 0x40, and nothing more.
    Von Hand geschriebene Rohbytes, genau so gesendet, wie sie dastehen. 0x1B 0x40, und nichts weiter.
  • Création d'imprimante
    Printer creation
    Drucker anlegen
    L'imprimante Windows créée en un clic, en appelant directement l'API du système — ni PowerShell, ni programme externe.
    The Windows printer created in one click, calling the system API directly — no PowerShell, no external program.
    Der Windows-Drucker mit einem Klick angelegt, durch direkten Aufruf der System-Schnittstelle — kein PowerShell, kein fremdes Programm.
  • 13 langues
    13 languages
    13 Sprachen
    Français, anglais, allemand, polonais, hongrois, tchèque, slovaque, slovène, italien, arabe, occitan, japonais — et une treizième pour le plaisir.
    French, English, German, Polish, Hungarian, Czech, Slovak, Slovenian, Italian, Arabic, Occitan, Japanese — and a thirteenth one for fun.
    Französisch, Englisch, Deutsch, Polnisch, Ungarisch, Tschechisch, Slowakisch, Slowenisch, Italienisch, Arabisch, Okzitanisch, Japanisch — und eine dreizehnte zum Vergnügen.

Le test thermique

The thermal test

Der Thermotest

Cinq densités sur une page

Five densities on one page

Fünf Dichten auf einer Seite

L'outil de maintenance du constructeur imprime une densité à la fois. Les avoir côte à côte rend un défaut bien plus lisible : une raie claire qui traverse les cinq bandes désigne un élément de tête mort, sans ambiguïté possible.

The manufacturer's maintenance tool prints one density at a time. Having them side by side makes a defect far more legible: a pale streak crossing all five bands points to a dead head element, with no ambiguity left.

Das Wartungswerkzeug des Herstellers druckt eine Dichte nach der anderen. Nebeneinander wird ein Fehler weit besser lesbar: ein heller Streifen, der alle fünf Bänder durchzieht, zeigt ein totes Heizelement an, ohne jede Mehrdeutigkeit.

Aucune commande propriétaire n'a été devinée pour cela : un motif de densité est une image, et le motif est fabriqué par le programme. Les taux sont donc exacts par construction. À gauche, le motif tel que le programme le calcule, dessiné ici par la même règle.

No proprietary command was guessed for this: a density pattern is an image, and the pattern is built by the program. The ratios are therefore exact by construction. On the left, the pattern as the program computes it, drawn here by the same rule.

Dafür wurde kein herstellereigener Befehl erraten: Ein Dichtemuster ist ein Bild, und das Muster baut das Programm selbst. Die Anteile stimmen also schon von der Konstruktion her. Links das Muster, wie das Programm es berechnet, hier nach derselben Regel gezeichnet.

À droite, la même page sortie de la machine et passée au scanner. Les cinq bandes montent régulièrement et aucune raie claire ne les traverse : cette tête thermique n'a pas d'élément mort. Les marques pâles en filigrane sont les mentions imprimées au dos du rouleau, qui transparaissent — le papier, pas l'imprimante.

On the right, the same page as it came out of the machine, then scanned. The five bands climb evenly and no pale streak crosses them: this thermal head has no dead element. The faint marks showing through are the notices printed on the back of the roll — the paper, not the printer.

Rechts dieselbe Seite, wie sie aus dem Gerät kam, danach eingescannt. Die fünf Bänder steigen gleichmäßig an, und kein heller Streifen durchzieht sie: dieser Thermokopf hat kein totes Element. Die blassen Zeichen im Hintergrund sind die Aufdrucke auf der Rückseite der Rolle, die durchscheinen — das Papier, nicht der Drucker.

Un ticket sorti de l'imprimante, portant les cinq bandes de densité du test thermique, de 12,5 % à 100 %.
Sur du vrai papier — Toshiba TEC TRST, 576 points de large
On real paper — Toshiba TEC TRST, 576 dots wide
Auf echtem Papier — Toshiba TEC TRST, 576 Punkte breit

Deux défauts trouvés sur le papier

Two defects found on paper

Zwei Fehler, auf Papier gefunden

Ce qu'aucune relecture de code n'aurait révélé

What no amount of code review would have revealed

Was keine noch so gründliche Code-Durchsicht gezeigt hätte

L'euro sortait en « Ç »

The euro printed as "Ç"

Das Euro-Zeichen kam als „Ç“ heraus

La numérotation des tables de codes n'est pas la même chez tous les constructeurs. Chez Epson, la table occidentale porte le numéro 16, et c'est ce que le programme envoyait. La réponse était dans le pilote officiel de Toshiba : sur ce modèle, c'est le numéro 9.

Code page numbering is not the same across manufacturers. At Epson the Western table is number 16, and that is what the program was sending. The answer was in Toshiba's official driver: on this model, it is number 9.

Die Nummerierung der Codetabellen ist nicht bei allen Herstellern dieselbe. Bei Epson trägt die westliche Tabelle die Nummer 16, und genau die schickte das Programm. Die Antwort stand in Toshibas eigenem Treiber: bei diesem Modell ist es die Nummer 9.

1B 74 101B 74 09

La coupe emportait la dernière ligne

The cut carried off the last line

Der Schnitt nahm die letzte Zeile mit

La lame se trouve 140 points après la tête, et une ligne fait 27 points. Une avance de quatre lignes n'en fait que 108 : la dernière ligne imprimée n'avait pas atteint la lame et repartait avec le ticket suivant.

The blade sits 140 dots past the head, and a line is 27 dots. A four-line feed is only 108: the last printed line had not reached the blade and left with the next receipt.

Die Klinge sitzt 140 Punkte hinter dem Druckkopf, und eine Zeile misst 27 Punkte. Ein Vorschub von vier Zeilen ergibt nur 108: Die zuletzt gedruckte Zeile hatte die Klinge nicht erreicht und ging mit dem nächsten Bon weg.

L'avance est désormais complétée en points.

The feed is now topped up in dots.

Der Vorschub wird jetzt in Punkten aufgefüllt.


La garantie

The guarantee

Die Zusicherung

Il n'écrit jamais dans l'imprimante

It never writes into the printer

Es schreibt nie in den Drucker

Une imprimante de tickets garde ses réglages, et peut garder des logos, en mémoire non volatile. Les commandes qui y écrivent existent — mais leur correspondance exacte n'est pas publiée pour ce modèle, et une erreur dans cette zone est définitive. Aucune de celles-ci n'est envoyée, nulle part :

A receipt printer keeps its settings, and can keep logos, in non-volatile memory. The commands that write there exist — but their exact mapping is not published for this model, and a mistake in that area is permanent. None of these is sent, anywhere:

Ein Bondrucker hält seine Einstellungen — und kann Logos halten — in nichtflüchtigem Speicher. Die Befehle, die dorthin schreiben, gibt es; ihre genaue Zuordnung ist für dieses Modell aber nicht veröffentlicht, und ein Fehler in diesem Bereich ist endgültig. Keiner von ihnen wird gesendet, nirgends:

CommandeCe qu'elle ferait Command BefehlWhat it would doWas er täte
1F 36Modifier un réglage en mémoire non volatileChange a setting in non-volatile memoryEine Einstellung im nichtflüchtigen Speicher ändern
1F 35 31Effacer un secteur de mémoire flashErase a flash memory sectorEinen Sektor des Flash-Speichers löschen
1F 34 05 00Réallouer la mémoire flashReallocate flash memoryDen Flash-Speicher neu aufteilen
1F 30Définir un logo en mémoireDefine a logo in memoryEin Logo im Speicher festlegen
1F 28 4CTélécharger en mémoire non volatileDownload into non-volatile memoryIn den nichtflüchtigen Speicher laden
1C 71Définir un logo non volatileDefine a non-volatile logoEin nichtflüchtiges Logo festlegen
1D 28 4CEnregistrer un graphique en mémoireStore a graphic in memoryEine Grafik im Speicher ablegen

Ce n'est pas une intention affichée. 326 contrôles automatiques relisent les octets réellement produits par chaque fonction — tickets, pages de test, images, logo — et échouent si un seul de ces motifs y apparaît. C'est aussi pourquoi le logo vit dans la mémoire du programme : il repart à la fermeture, mais rien ne peut être abîmé.

This is not a stated intention. 326 automated checks re-read the bytes each function actually produces — receipts, test pages, images, logo — and fail if a single one of those patterns appears. It is also why the logo lives in the program's memory: it is gone when the program closes, but nothing can be bricked.

Das ist keine bloße Absichtserklärung. 326 automatische Prüfungen lesen die Bytes zurück, die jede Funktion tatsächlich erzeugt — Bons, Testseiten, Bilder, Logo — und schlagen fehl, sobald auch nur eines dieser Muster darin auftaucht. Auch deshalb lebt das Logo im Speicher des Programms: Es ist beim Schließen weg, aber nichts kann unbrauchbar werden.


Le programme

The program

Das Programm

Quatre portes d'entrée, au choix

Four ways in, take your pick

Vier Türen zur Auswahl

Tout est sur GitLab, librement accessible et sans compte. Les deux exécutables sont exactement ceux dont les empreintes sont publiées plus bas sur cette page. Le code, lui, se lit avant de s'exécuter.

Everything is on GitLab, freely accessible, no account needed. The two executables are exactly the ones whose fingerprints are published further down this page. The source can be read before it is run.

Alles liegt auf GitLab, frei zugänglich und ohne Konto. Die beiden ausführbaren Dateien sind genau die, deren Prüfsummen weiter unten auf dieser Seite stehen. Den Quelltext kann man lesen, bevor man ihn ausführt.

L'installateur propose d'installer pour tous les utilisateurs ou pour vous seul : prenez seulement pour vous. Le programme n'a aucun besoin des droits administrateur, et le dit lui-même à cette étape.

The installer offers to install for all users or for you alone: choose for yourself only. The program has no use for administrator rights, and says so itself at that step.

Das Installationsprogramm bietet an, für alle Benutzer oder nur für Sie zu installieren: wählen Sie nur für sich. Das Programm braucht keine Administratorrechte und sagt das an dieser Stelle selbst.

La fenêtre Choix du mode d'installation : deux options, « Installer seulement pour moi (recommandé) » et « Installer pour tous les utilisateurs », sous la phrase qui déconseille les droits administrateur.
Le choix du mode d'installation, tel qu'il s'affiche
The install-mode dialog, as it appears — shown here in French
Die Auswahl des Installationsmodus — hier auf Französisch

Conservé par Software Heritage

Preserved by Software Heritage

Von Software Heritage bewahrt

Le dépôt est archivé par Software Heritage, l'archive universelle du logiciel portée par l'Inria avec l'UNESCO. Chaque fichier y reçoit un identifiant calculé à partir de son contenu : il ne désigne pas un serveur mais ces octets-là, et il reste valable même si GitLab venait à disparaître.

The repository is archived by Software Heritage, the universal software archive run by Inria with UNESCO. Every file there gets an identifier computed from its content: it designates not a server but those bytes, and it stays valid even if GitLab were to disappear.

Das Repository ist bei Software Heritage archiviert, dem universellen Software-Archiv von Inria mit der UNESCO. Jede Datei erhält dort eine Kennung, die aus ihrem Inhalt berechnet wird: Sie bezeichnet keinen Server, sondern genau diese Bytes, und bleibt gültig, selbst wenn GitLab verschwände.

Ces trois identifiants ont été recalculés sur les fichiers publiés : ils correspondent. C'est une seconde vérification, indépendante des empreintes SHA-256 données plus bas.

These three identifiers were recomputed on the published files: they match. It is a second check, independent of the SHA-256 fingerprints given further down.

Diese drei Kennungen wurden an den veröffentlichten Dateien nachgerechnet: Sie stimmen. Das ist eine zweite Prüfung, unabhängig von den weiter unten genannten SHA-256-Prüfsummen.


Si votre antivirus s'inquiète

If your antivirus objects

Wenn Ihr Virenscanner Einspruch erhebt

Une fausse alerte est possible, et voici pourquoi

A false alarm is possible, and here is why

Ein Fehlalarm ist möglich, und hier ist der Grund

Windows peut afficher « Windows a protégé votre ordinateur », ou un antivirus mettre le fichier en quarantaine sous un nom générique du genre Trojan:Win32/Wacatac. Cela n'a rien d'étonnant, et cela ne dit rien du contenu du programme. Trois raisons, toutes vérifiables.

Windows may show "Windows protected your PC", or an antivirus may quarantine the file under a generic name like Trojan:Win32/Wacatac. None of this is surprising, and none of it says anything about what the program contains. Three reasons, all of them checkable.

Windows zeigt vielleicht „Der Computer wurde durch Windows geschützt“, oder ein Virenscanner schiebt die Datei unter einem allgemeinen Namen wie Trojan:Win32/Wacatac in Quarantäne. Nichts davon ist überraschend, und nichts davon sagt etwas über den Inhalt des Programms. Drei Gründe, alle nachprüfbar.

Le fichier n'est pas signé

The file is not signed

Die Datei ist nicht signiert

Une signature de code s'achète auprès d'une autorité de certification, plusieurs centaines d'euros par an. Un programme donné au domaine public par une personne seule n'en a pas. Windows affiche donc « Éditeur inconnu », ce qui veut dire « je ne sais pas qui a fait ça », et non « ceci est dangereux ».

A code signature is bought from a certification authority for several hundred euros a year. A program given to the public domain by one person does not have one. Windows therefore says "Unknown publisher", which means "I don't know who made this", not "this is dangerous".

Eine Codesignatur kauft man bei einer Zertifizierungsstelle, für mehrere hundert Euro im Jahr. Ein Programm, das eine einzelne Person gemeinfrei macht, hat keine. Windows meldet daher „Unbekannter Herausgeber“, was heißt „ich weiß nicht, wer das gemacht hat“, und nicht „das ist gefährlich“.

Il n'a aucune réputation

It has no reputation

Es hat keinerlei Ruf

SmartScreen et la plupart des antivirus jugent aussi sur la réputation : un fichier vu par peu de monde, mis en ligne récemment, est suspect par construction. Tout programme neuf commence à zéro. C'est la raison d'être des dates ci-dessous.

SmartScreen and most antivirus engines also judge on reputation: a file seen by few people, published recently, is suspect by construction. Every new program starts at zero. That is what the dates below are for.

SmartScreen und die meisten Virenscanner urteilen auch nach dem Ruf: Eine Datei, die wenige Leute gesehen haben und die erst seit Kurzem online ist, ist schon von der Anlage her verdächtig. Jedes neue Programm fängt bei null an. Dafür stehen die Zeitpunkte weiter unten.

L'empaquetage ressemble à celui des logiciels malveillants

The packaging looks like malware's

Die Verpackung sieht aus wie die von Schadsoftware

Un programme Python transformé en fichier unique par PyInstaller se décompresse dans le dossier temporaire puis s'exécute depuis là. C'est exactement le comportement que surveillent les détections heuristiques. La version portable est donc compilée avec Nuitka, en vrai code machine, ce qui supprime cette signature — mais ne rend pas le fichier signé pour autant.

A Python program turned into a single file by PyInstaller unpacks into the temporary folder and runs from there. That is precisely the behaviour heuristic detection watches for. The portable version is therefore compiled with Nuitka, into real machine code, which removes that signature — but does not make the file signed.

Ein Python-Programm, das PyInstaller zu einer einzigen Datei macht, entpackt sich in den temporären Ordner und läuft von dort. Genau dieses Verhalten beobachten heuristische Erkennungen. Die portable Fassung wird deshalb mit Nuitka in echten Maschinencode übersetzt, was diese Signatur beseitigt — die Datei aber nicht signiert macht.

Mise en ligne

Published

Veröffentlichung

Les heures sont données pour que chacun puisse situer ce qu'il a téléchargé. Un fichier qui se présente comme OpenThermaCore et qui serait apparu ailleurs avant ces dates ne vient pas d'ici.

The times are given so that anyone can place what they downloaded. A file presenting itself as OpenThermaCore that appeared elsewhere before these dates did not come from here.

Die Uhrzeiten stehen hier, damit jeder einordnen kann, was er heruntergeladen hat. Eine Datei, die sich als OpenThermaCore ausgibt und vor diesen Zeitpunkten anderswo aufgetaucht ist, stammt nicht von hier.

Ce qui a été publiéQuand What was published Was veröffentlicht wurdeWhenWann
Code source Python Python source code Python-Quelltext vendredi 18 septembre 2026, 12 h 00 Friday 18 September 2026, 12:00 Freitag, 18. September 2026, 12:00 Uhr
Portable .exe et installateur Portable .exe and installer Portable .exe und Installationsprogramm vendredi 18 septembre 2026, 16 h 30 Friday 18 September 2026, 16:30 Freitag, 18. September 2026, 16:30 Uhr

Les exécutables sont sortis quatre heures et demie après le code, et c'est l'ordre normal : ils sont ce code, empaqueté. Le programme lui-même n'a pas changé entre les deux.

The executables came out four and a half hours after the source, and that is the normal order: they are that source, packaged. The program itself did not change in between.

Die ausführbaren Dateien kamen viereinhalb Stunden nach dem Quelltext heraus, und das ist die normale Reihenfolge: Sie sind dieser Quelltext, verpackt. Das Programm selbst hat sich dazwischen nicht geändert.

Ce qui se vérifie vraiment

What can actually be checked

Was sich wirklich prüfen lässt

  • Le code, en entier
    The source, all of it
    Der Quelltext, vollständig
    Rien n'est compilé à l'avance ni caché : le programme est livré en Python, lisible, et c'est la seule chose qu'il faille croire. L'exécutable n'en est qu'un emballage.
    Nothing is precompiled or hidden: the program ships as readable Python, and that is the only thing anyone has to take on trust. The executable is merely a wrapper around it.
    Nichts ist vorkompiliert oder versteckt: Das Programm kommt als lesbares Python, und das ist das Einzige, was man glauben muss. Die ausführbare Datei ist nur eine Verpackung darum.
  • Fabriquez-le vous-même
    Build it yourself
    Bauen Sie es selbst
    Le fichier creer_exe.bat fourni reconstruit l'exécutable sur votre machine, à partir du code que vous venez de lire. Vous n'avez alors plus à faire confiance à un fichier téléchargé.
    The supplied creer_exe.bat rebuilds the executable on your own machine, from the source you have just read. You then have no downloaded file to trust at all.
    Die mitgelieferte Datei creer_exe.bat baut die ausführbare Datei auf Ihrem eigenen Rechner, aus dem Quelltext, den Sie gerade gelesen haben. Dann gibt es keine heruntergeladene Datei mehr, der Sie trauen müssten.
  • Sans exécutable du tout
    No executable at all
    Ganz ohne ausführbare Datei
    pip install pywin32 puis python openthermacore.py. Le programme fonctionne à l'identique, et la question de l'antivirus ne se pose plus.
    pip install pywin32 then python openthermacore.py. The program behaves identically, and the antivirus question disappears.
    pip install pywin32, dann python openthermacore.py. Das Programm verhält sich genauso, und die Frage nach dem Virenscanner stellt sich nicht mehr.
  • Les empreintes des fichiers
    The file fingerprints
    Die Prüfsummen der Dateien
    Une empreinte est un nombre de 64 caractères calculé à partir du fichier entier : qu'un seul octet change, et elle change entièrement. Celles de la version 1.0 sont publiées ici même, sur cette page, et pas seulement chez l'hébergeur.
    A fingerprint is a 64-character number computed from the whole file: change a single byte and it changes completely. The ones for version 1.0 are published here, on this page, and not only at the host.
    Eine Prüfsumme ist eine 64-stellige Zahl, die aus der ganzen Datei berechnet wird: Ändert sich ein einziges Byte, ändert sie sich vollständig. Die der Version 1.0 stehen hier auf dieser Seite — nicht nur beim Anbieter.

Les empreintes, en clair

The fingerprints, in plain sight

Die Prüfsummen, offen genannt

Voici celles des trois fichiers publiés. Sous Windows, ouvrez une invite de commandes dans le dossier du fichier téléchargé et tapez certutil -hashfile OpenThermaCore-portable.exe SHA256 : si les 64 caractères ne correspondent pas, le fichier n'est pas celui publié ici.

Here are the three published files. On Windows, open a command prompt in the folder holding the downloaded file and type certutil -hashfile OpenThermaCore-portable.exe SHA256: if the 64 characters do not match, the file is not the one published here.

Hier die drei veröffentlichten Dateien. Unter Windows öffnen Sie eine Eingabeaufforderung im Ordner der heruntergeladenen Datei und geben certutil -hashfile OpenThermaCore-portable.exe SHA256 ein: Stimmen die 64 Zeichen nicht überein, ist es nicht die hier veröffentlichte Datei.

ff96a473a30f7d4236d575beb03043addfa1d3b343e688ed974a1bf195706911  OpenThermaCore-portable.exe
59236bbb0e5b9f8e5dcea487e93c1dbf718a6c54d19194f94c4bc49c5e79423e  OpenThermaCore_Setup.exe
c46fdf8d56ccda5fec98c71decfb635bf64f63b5bdb1f55be32785e323a25ed4  OpenThermaCore_1.0_complet.zip

Si le fichier a été mis en quarantaine, vous pouvez le restaurer et ajouter une exception pour son dossier — mais seulement après avoir vérifié qu'il vient bien d'ici. Sinon, lancez le programme directement avec Python : c'est la voie qui ne demande de confiance à personne.

If the file has been quarantined, you can restore it and add an exclusion for its folder — but only once you have confirmed it came from here. Otherwise run the program directly with Python: that is the route that asks nobody to be trusted.

Wurde die Datei in Quarantäne verschoben, können Sie sie wiederherstellen und eine Ausnahme für ihren Ordner eintragen — aber erst, wenn Sie geprüft haben, dass sie von hier stammt. Sonst starten Sie das Programm direkt mit Python: Das ist der Weg, der von niemandem Vertrauen verlangt.

Il faut le dire clairement : rien de tout cela ne supprime les fausses alertes. Seule une signature de code y parvient vraiment, et elle coûte chaque année plus cher que l'imprimante d'occasion qui a motivé ce programme. Le choix a été fait de publier quand même, en expliquant.

It should be said plainly: none of this removes false alarms. Only a code signature really does, and it costs more every year than the second-hand printer that prompted this program. The choice was to publish anyway, and explain.

Es sei klar gesagt: Nichts davon beseitigt Fehlalarme. Nur eine Codesignatur tut das wirklich, und sie kostet jedes Jahr mehr als der gebrauchte Drucker, der zu diesem Programm geführt hat. Die Entscheidung war, trotzdem zu veröffentlichen — und es zu erklären.

L'interface

The interface

Die Oberfläche

Quatre onglets, rien de caché

Four tabs, nothing hidden

Vier Registerkarten, nichts versteckt

L'onglet Texte libre : zone de saisie du ticket et réglages de mise en forme.
Texte libre — le ticket, l'image, le logo
Free text — the receipt, the image, the logo
Freier Text — der Bon, das Bild, das Logo
L'onglet Tests : quatre pages de diagnostic, chacune avec sa description.
Tests — les quatre pages de diagnostic
Tests — the four diagnostic pages
Tests — die vier Diagnoseseiten
L'onglet Script ESC/POS : un script d'octets bruts avec ses commentaires.
Script ESC/POS — les octets bruts
ESC/POS script — the raw bytes
ESC/POS-Skript — die Rohbytes
L'onglet Créer l'imprimante : choix du pilote, du port et du nom.
Créer l'imprimante — un pilote, un port, un nom
Create printer — a driver, a port, a name
Drucker anlegen — ein Treiber, ein Anschluss, ein Name

Sur le papier

On paper

Auf dem Papier

Ce que la machine a vraiment sorti

What the machine actually produced

Was das Gerät wirklich ausgegeben hat

Rien de ce qui suit n'est une simulation : ce sont des tickets sortis d'une TRST-A10, posés sur un scanner tels quels. Les marques pâles en filigrane sont les mentions imprimées au dos du rouleau, qui transparaissent — le papier, pas l'imprimante.

None of what follows is a simulation: these are receipts that came out of a TRST-A10 and went straight onto a scanner. The faint marks showing through are the notices printed on the back of the roll — the paper, not the printer.

Nichts davon ist eine Simulation: Das sind Bons, die aus einem TRST-A10 kamen und unverändert auf den Scanner gelegt wurden. Die blassen Zeichen im Hintergrund sind die Aufdrucke auf der Rückseite der Rolle, die durchscheinen — das Papier, nicht der Drucker.

Une règle pour compter la largeur réelle, et la table des caractères où chercher l'euro.
La page de test — Une règle pour compter la largeur réelle, et la table des caractères où chercher l'euro.
The test page — A ruler to count the real width, and the character table in which to hunt for the euro.
Die Testseite — Ein Lineal, um die wirkliche Breite zu zählen, und die Zeichentabelle, in der das Euro-Zeichen zu suchen ist.
La machine imprime son propre inventaire, table par table, jusqu'à ce que « € » apparaisse. Ici, à partir de n=9.
Le balayage des tables — La machine imprime son propre inventaire, table par table, jusqu'à ce que « € » apparaisse. Ici, à partir de n=9.
The code page scan — The machine prints its own inventory, table by table, until « € » shows up. Here, from n=9 onwards.
Der Durchlauf der Codetabellen — Das Gerät druckt sein eigenes Verzeichnis, Tabelle für Tabelle, bis „€“ erscheint. Hier ab n=9.
L'euro sort enfin en euro, une fois la table 9 choisie. Et le prix du programme, imprimé en toutes lettres.
La vérification — L'euro sort enfin en euro, une fois la table 9 choisie. Et le prix du programme, imprimé en toutes lettres.
The check — The euro finally prints as a euro, once table 9 is selected. And the price of the program, printed out.
Die Gegenprobe — Das Euro-Zeichen kommt endlich als Euro heraus, sobald Tabelle 9 gewählt ist. Und der Preis des Programms, ausgedruckt.
La page que vous lisez, imprimée par l'imprimante dont elle parle.
Cette page, sur du papier thermique — La page que vous lisez, imprimée par l'imprimante dont elle parle.
This page, on thermal paper — The page you are reading, printed by the printer it is about.
Diese Seite, auf Thermopapier — Die Seite, die Sie gerade lesen, gedruckt von dem Drucker, um den es geht.

Une photographie, point par point

A photograph, dot by dot

Eine Fotografie, Punkt für Punkt

Une tête thermique ne connaît que le noir et le blanc : pas de gris, pas de demi-teinte. Le programme répartit donc l'erreur de chaque point sur ses voisins, et c'est la densité des points qui simule les nuances. À trente centimètres, l'œil recompose l'image.

A thermal head knows only black and white: no grey, no half-tone. So the program spreads each dot's error over its neighbours, and it is the density of dots that stands in for shading. At thirty centimetres, the eye puts the picture back together.

Ein Thermokopf kennt nur Schwarz und Weiß: kein Grau, keine Halbtöne. Das Programm verteilt daher den Fehler jedes Punktes auf seine Nachbarn, und die Dichte der Punkte vertritt die Abstufungen. Auf dreißig Zentimeter setzt das Auge das Bild wieder zusammen.

La Toshiba TEC TRST, photographiée au téléphone.
L'original — La Toshiba TEC TRST, photographiée au téléphone.
The original — The Toshiba TEC TRST, photographed with a phone.
Das Original — Der Toshiba TEC TRST, mit dem Telefon fotografiert.
La même image, en diffusion d'erreur, sur 576 points de large.
Le tirage — La même image, en diffusion d'erreur, sur 576 points de large.
The print — The same image, by error diffusion, 576 dots wide.
Der Ausdruck — Dasselbe Bild, per Fehlerdiffusion, 576 Punkte breit.
Evolidemment, co-créateur du programme et propriétaire de la machine.
L'original — Evolidemment, co-créateur du programme et propriétaire de la machine.
The original — Evolidemment, the program's co-creator and the owner of the machine.
Das Original — Evolidemment, Mitschöpfer des Programms und Besitzer des Geräts.
Un visage est ce qu'il y a de plus difficile à rendre sans une seule nuance de gris. C'est la densité des points qui fait tout le modélé.
Le tirage — Un visage est ce qu'il y a de plus difficile à rendre sans une seule nuance de gris. C'est la densité des points qui fait tout le modélé.
The print — A face is the hardest thing to render without a single shade of grey. The density of the dots does all the modelling.
Der Ausdruck — Ein Gesicht ist das Schwerste, was sich ohne einen einzigen Grauton wiedergeben lässt. Die Dichte der Punkte macht die ganze Modellierung.
Une photographie de New York, pleine de détails fins.
L'original — Une photographie de New York, pleine de détails fins.
The original — A photograph of New York, full of fine detail.
Das Original — Eine Fotografie von New York, voller feiner Details.
Les fenêtres, les arbres, les reflets sur l'eau : tout tient dans une trame de points noirs sur 8 cm de large.
Le tirage — Les fenêtres, les arbres, les reflets sur l'eau : tout tient dans une trame de points noirs sur 8 cm de large.
The print — Windows, trees, reflections on the water: all of it held in a screen of black dots, 8 cm across.
Der Ausdruck — Fenster, Bäume, Spiegelungen auf dem Wasser: alles steckt in einem Raster schwarzer Punkte, 8 cm breit.

Les aplats, au seuil net

Flat areas, hard threshold

Flächen, harte Schwelle

Pour un logo, la trame est l'ennemi : un aplat doit rester un aplat. Le programme bascule alors en seuil net — chaque point de l'image devient noir ou blanc selon sa clarté, sans aucune diffusion. Les contours restent francs, et le noir est plein.

For a logo, dithering is the enemy: a flat area must stay flat. The program then switches to a hard threshold — every dot of the image becomes black or white according to its lightness, with no diffusion at all. Edges stay crisp and the black stays solid.

Bei einem Logo ist das Raster der Feind: Eine Fläche muss Fläche bleiben. Das Programm schaltet dann auf harte Schwelle um — jeder Punkt des Bildes wird je nach Helligkeit schwarz oder weiß, ganz ohne Diffusion. Die Kanten bleiben sauber, das Schwarz bleibt voll.

L'image de test était le logo de l'IA qui a écrit le programme. C'est une image d'essai : le projet n'est ni affilié à Anthropic, ni approuvé par eux.
Le logo de Claude — L'image de test était le logo de l'IA qui a écrit le programme. C'est une image d'essai : le projet n'est ni affilié à Anthropic, ni approuvé par eux.
Claude's logo — The test image was the logo of the AI that wrote the program. It is a test image: the project is neither affiliated with Anthropic nor endorsed by them.
Das Logo von Claude — Das Testbild war das Logo der KI, die das Programm geschrieben hat. Es ist ein Testbild: Das Projekt ist weder mit Anthropic verbunden noch von ihnen unterstützt.
Une plaisanterie du co-créateur, qui sert ici de second essai : cercle plein, lettrage épais, réserve blanche au milieu. Le seuil net s'en tire sans une bavure.
Un logo inventé — Une plaisanterie du co-créateur, qui sert ici de second essai : cercle plein, lettrage épais, réserve blanche au milieu. Le seuil net s'en tire sans une bavure.
An invented logo — A joke of the co-creator's, used here as a second test: solid circle, heavy lettering, white knockout in the middle. The hard threshold handles it without a smudge.
Ein erfundenes Logo — Ein Scherz des Mitschöpfers, hier als zweiter Versuch: volle Kreisfläche, fette Schrift, weiße Aussparung in der Mitte. Die harte Schwelle meistert das ohne Fleck.

La documentation

The documentation

Die Dokumentation

Un manuel de 25 pages, en trois langues

A 25-page manual, in three languages

Ein Handbuch von 25 Seiten, in drei Sprachen

Installation, chaque onglet en détail, les réglages internes de l'imprimante et comment les lire, un tableau de dépannage symptôme par symptôme, et une annexe technique avec les commandes employées.

Installation, every tab in detail, the printer's internal settings and how to read them, a symptom-by-symptom troubleshooting table, and a technical appendix listing the commands used.

Installation, jede Registerkarte im Einzelnen, die internen Einstellungen des Druckers und wie man sie liest, eine Fehlertabelle Symptom für Symptom, und ein technischer Anhang mit den verwendeten Befehlen.


Pourquoi ce nom

Why this name

Warum dieser Name

OpenThermaCore, en trois morceaux

OpenThermaCore, in three pieces

OpenThermaCore, in drei Teilen

Le cœur ouvert de l'impression thermique. Le nom dit ce que fait le programme, et rien de plus — ni promesse, ni marque, ni jeu de mots.

The open core of thermal printing. The name says what the program does, and nothing more — no promise, no brand, no pun.

Der offene Kern des Thermodrucks. Der Name sagt, was das Programm tut, und nichts weiter — kein Versprechen, keine Marke, kein Wortspiel.

Open

Le code se lit, se copie, se modifie. Domaine public sous CC0 1.0 : aucun droit revendiqué, aucune permission à demander, aucune contrepartie attendue.

The source can be read, copied, modified. Public domain under CC0 1.0: no rights reserved, no permission to ask for, nothing expected in return.

Der Quelltext lässt sich lesen, kopieren, ändern. Gemeinfrei unter CC0 1.0: keine Rechte beansprucht, keine Erlaubnis einzuholen, keine Gegenleistung erwartet.

Therma

Ni encre ni cartouche : une tête qui chauffe, un papier qui noircit. C'est la machine dont il est question — une Toshiba TEC TRST, et toute imprimante qui parle le même langage.

No ink, no cartridge: a head that heats, a paper that blackens. That is the machine in question — a Toshiba TEC TRST, and any printer that speaks the same language.

Keine Tinte, keine Patrone: ein Kopf, der erhitzt, ein Papier, das schwarz wird. Das ist das Gerät, um das es geht — ein Toshiba TEC TRST, und jeder Drucker, der dieselbe Sprache spricht.

Core

Plutôt que de refaire toute la pile logicielle du constructeur, le programme va à l'essentiel : envoyer les données ESC/POS. Il ne touche ni aux réglages internes ni à la mémoire non volatile — le cerveau de la machine reste exactement tel qu'il est.

Rather than rebuilding the manufacturer's whole software stack, the program goes straight to the essential act: sending the ESC/POS data. It touches neither the internal settings nor the non-volatile memory — the machine's brain is left exactly as it is.

Statt den ganzen Software-Unterbau des Herstellers nachzubauen, geht das Programm direkt zum Wesentlichen: die ESC/POS-Daten senden. Es rührt weder die internen Einstellungen noch den nichtflüchtigen Speicher an — das Gehirn des Geräts bleibt genau so, wie es ist.

Open + Therma + Core : aller droit à l'essentiel, et ne toucher à rien d'autre.

Open + Therma + Core: go straight to what matters, and touch nothing else.

Open + Therma + Core: geradewegs zum Wesentlichen — und sonst nichts anrühren.

Qui l'a écrit

Who wrote it

Wer es geschrieben hat

Une IA et quelqu'un qui avait du papier

An AI, and someone who had paper

Eine KI und jemand, der Papier hatte

L'intégralité du code a été écrite par l'IA Claude, d'Anthropic.

The entire source code was written by the AI Claude, from Anthropic.

Der gesamte Quelltext wurde von der KI Claude von Anthropic geschrieben.

Co-créateur : Evolidemment. C'est lui qui a trouvé la machine — une Toshiba TEC TRST d'occasion — et l'a mise entre les mains d'une IA. Il a fourni les documents : tickets de diagnostic, manuels du constructeur, pilotes et outils d'origine. Il a donné les directives, essayé chaque version sur du vrai papier, et rapporté ce qui n'allait pas.

Co-creator: Evolidemment. He found the machine — a second-hand Toshiba TEC TRST — and put it in the hands of an AI. He supplied the documents: diagnostic tickets, manufacturer manuals, original drivers and tools. He gave the directions, tried every version on real paper, and reported what went wrong.

Mitschöpfer: Evolidemment. Er hat das Gerät gefunden — einen gebrauchten Toshiba TEC TRST — und es einer KI in die Hand gegeben. Er lieferte die Unterlagen: Diagnosebons, Handbücher des Herstellers, Originaltreiber und -werkzeuge. Er gab die Anweisungen, probierte jede Fassung auf echtem Papier aus und meldete, was nicht stimmte.

L'euro en « Ç », la coupe qui emportait une ligne, la fenêtre qui se figeait sur un périphérique occupé : les trois se sont vus sur le papier.

The euro as "Ç", the cut that carried off a line, the window freezing on a busy device: all three showed themselves on paper.

Das Euro-Zeichen als „Ç“, der Schnitt, der eine Zeile mitnahm, das Fenster, das an einem belegten Gerät einfror: Alle drei zeigten sich auf dem Papier.

Une imprimante ne se sauve pas depuis un écran.

A printer cannot be rescued from behind a screen.

Einen Drucker rettet man nicht vom Bildschirm aus.