Wandelt gescannte PDF-Dateien und Bilddokumente in durchsuchbare PDFs um: per lokaler OCR (optische Zeichenerkennung) mit Tesseract. Bietet Mehrformat-Stapelverarbeitung, auswählbare OCR-Sprache mit automatischem Sprachpaket-Download, verlustfreien Erhalt der Originaldateien, barrierefreie Benutzeroberfläche und portable Tesseract/Poppler-Integration.
Maschinenlesbarer Projektkontext: llms.txt | English Documentation | Sicherheitsrichtlinie
Note
KI & LLM-Integration: Dieses Repository enthält eine strukturierte llms.txt-Datei mit maschinenlesbarem Kontext, Architektur-Details, CLI/GUI-Schnittstellen und Test-Einstiegspunkten für autonome KI-Agenten und Entwickler-Workflows.
Tip
Datenschutz & Lokale Verarbeitung: PDF- und Bilddateien werden zu 100% lokal auf Ihrem Rechner verarbeitet. Dokumente und OCR-Texte werden niemals auf externe Server oder Cloud-APIs übertragen (INV-LOCAL-01).
- 📸 Visuelle Showcase-Galerie & Benutzeroberfläche
- 🏛️ Systemarchitektur & 5-Schichten-Topologie
- 🔄 Lokaler Datenfluss & Dokument-OCR-Verarbeitungslebenszyklus
- 🚀 Schnelleinstieg & Kernabläufe
- ✨ Funktionen & Leistungsmerkmale
- 🎯 Zielgruppen & Auffindbarkeit
- ⚖️ 10-Dimensionen-Vergleichsmatrix vs. 5 Alternativen
- ⌨️ Barrierefreiheit, WCAG-Ergonomie & Tastenkürzel
- 💻 Voraussetzungen & Plattformmatrix
- 📦 Installation & Portables Setup
- 🖥️ Nutzung & Ausführungsrichtlinien
- 🧪 Automatisierte Tests & Qualitätsprüfung
- 🌐 Geschwister-Tools & Ökosystem-Integration
- 📜 Level 1 SBOM & Drittanbieter-Lizenzen-Transparenz
- 🔒 Datenschutz- & Sicherheitsmodell (Invarianten INV-LOCAL-01..INV-SLA-10)
- 🪟 EXE & Distributions-Packaging (Windows Store MSIX & Portable)
- 🤖 Maschinenlesbarer LLM-Kontext (llms.txt)
- ⚖️ Gesetzlicher Hinweis (§ 521 BGB) & Lizenz
flowchart TD
subgraph UI ["Schicht 1: Benutzeroberfläche & Aufnahme"]
GUI["PySide6 Desktop-Anwendung<br/>(PDFtoPDFocr_2.py)"]
QUEUE["Drag & Drop Dateiwarteschlange<br/>(PDFListWidget & Pfad-Normalisierung)"]
I18N["Lokalisierungs-Engine<br/>(translations.json - DE/EN/ES/ZH/JA/RU)"]
A11Y["WCAG AA Barrierefreiheits-Schicht<br/>(Screen-Reader Namen, Kontrast-Badges)"]
end
subgraph Router ["Schicht 2: Asynchrone Orchestrierung & Dispatcher"]
DISPATCHER["Task-Dispatcher & Worker-Thread<br/>(Blockierungsfreie QThread-Ausführung)"]
CANCEL["Abbruch- & Safe-Lease Guard<br/>(Threadsichere Unterbrechungs-Fallen)"]
MANIFEST["Job-Manifest-Generator<br/>(pdftopdfocr-job-v1.json)"]
end
subgraph Core ["Schicht 3: OCR- & Transformations-Pipeline"]
RASTER["pdf2image Rasterisierer<br/>(Poppler Engine Subprozess)"]
IMGNORM["Bild-Normalisierer<br/>(Alpha-Compositing & EXIF-Ausrichtung)"]
OCR["Tesseract OCR Engine<br/>(Portable Binärdatei & Auto-Sprach-Download)"]
ASSEMBLER["pikepdf Ausgabe-Assembler<br/>(Verlustfreie Erzeugung durchsuchbarer PDFs)"]
end
subgraph Storage ["Schicht 4: Lokale Speicher- & Sicherheitsgrenze"]
FS["Lokale Dateisystemgrenze<br/>(Zero-Egress / 100% Offline)"]
NONDEST["Verlustfreie Zielpfadsicherung<br/>(*_ocred.pdf / Zielordner)"]
SEC["Sicherheits- & Invarianten-Engine<br/>(INV-LOCAL-01 bis INV-SLA-10)"]
end
subgraph Packaging ["Schicht 5: Paketierung & Distribution"]
PYINSTALLER["PyInstaller Bundle-Engine<br/>(Single-File / Portables Onedir)"]
MSIX["Windows Store MSIX-Bridge<br/>(store_package.json & AppxManifest)"]
end
GUI --> DISPATCHER
QUEUE --> DISPATCHER
I18N --> GUI
A11Y --> GUI
DISPATCHER --> RASTER
DISPATCHER --> IMGNORM
IMGNORM --> OCR
RASTER --> OCR
OCR --> ASSEMBLER
ASSEMBLER --> NONDEST
NONDEST --> FS
DISPATCHER --> MANIFEST
MANIFEST --> FS
SEC -.-> FS
PYINSTALLER -.-> GUI
MSIX -.-> GUI
sequenceDiagram
autonumber
actor User as Benutzer / Batch-Operator
participant GUI as PySide6 Desktop GUI
participant Worker as Hintergrund Worker-Thread
participant Normalizer as Bild-Normalisierer
participant Poppler as Poppler / pdf2image
participant Tesseract as Tesseract OCR Engine
participant Assembler as pikepdf PDF-Assembler
participant FS as Lokale Dateisystemgrenze
User->>GUI: PDF- oder Bilddateien hinzufügen (Drag & Drop / Dateidialog)
User->>GUI: OCR-Zielsprache auswählen (z.B. deu, eng, fra, spa)
User->>GUI: Stapelverarbeitung starten (Strg+Eingabetaste oder Button)
GUI->>Worker: Asynchrone Konvertierungsaufgabe starten
loop Für jedes Dokument in der Warteschlange
alt Eingabe ist gescannte PDF
Worker->>Poppler: PDF-Seiten in Arbeitsspeicher-Bitmaps rasterisieren
Poppler-->>Worker: Hochauflösende gerenderte Seitenpuffer
else Eingabe ist Direktbild (PNG, JPG, mehrseitiges TIFF)
Worker->>Normalizer: Alpha-Kanal auf weißem Hintergrund zusammensetzen
Normalizer-->>Worker: Standardisierte RGB-Bildframes
end
loop Für jede Seite / Frame
Worker->>Tesseract: Textextraktion & Bounding-Boxes via lokaler Engine
Tesseract-->>Worker: OCR-Text & hOCR / PDF-Ebenen zurückgeben
end
Worker->>Assembler: Durchsuchbare Volltext-Ebene in PDF-Struktur einbetten
Assembler->>FS: Ausgabe als <dateiname>_ocred.pdf speichern (Verlustfrei)
Worker-->>GUI: Fortschrittsbalken & Farbstatus-Badge aktualisieren
end
opt Portabler Job-Manifest-Export
GUI->>FS: pdftopdfocr-job-v1.json schreiben (0 rohe Dokumenten-Bytes)
end
Note over User,FS: 100% Local-First / Zero-Egress Betrieb (Kein Netzwerk-/Cloud-Upload)
| Aufgabe | Schnittstelle / Befehl | Ausgabe / Ergebnis |
|---|---|---|
| Desktop-App starten | python PDFtoPDFocr_2.py oder START.bat |
PySide6 Desktop-GUI mit Drag & Drop Warteschlange |
| Gescannte PDFs umwandeln | Dateien hinzufügen, Sprache wählen, "Start" (Strg+Eingabetaste) |
Verlustfreie *_ocred.pdf mit Volltext-Suchlayer |
| Direkte Bild-OCR | JPG, PNG oder mehrseitige TIFF-Dateien hineinziehen | Zusammengefügtes durchsuchbares PDF-Dokument |
| In Sammel-PDF vereinen | "Auto-Merge" in Menüleiste aktivieren | Konsolidierte mehrseitige durchsuchbare Sammel-PDF |
| Job-Manifest exportieren | Klick auf "Job-Export" (Strg+E) |
Portables pdftopdfocr-job-v1.json Manifest |
| Testsuite ausführen | python -m pytest |
120+ verifizierte Unit-, Regressions-, Barrierefreiheits- und Metadaten-Tests |
| Portablen Build erzeugen | python build_release.py --clean |
Eigenständige ausführbare Datei in dist/PDFtoPDFocr/ |
- Batch-Verarbeitung – Mehrere PDFs und Bilder gleichzeitig konvertieren (Dateiauswahl oder Drag & Drop).
- Direkter Bild-Import – JPG, PNG und mehrseitige TIFF-Dateien direkt ohne Zwischenschritte per OCR in durchsuchbare PDFs umwandeln.
- Auswählbare OCR-Sprache – Schnellwahl für Deutsch, Englisch, Französisch, Spanisch und dutzende weitere Sprachen.
- Auto-Download – Fehlende Tesseract-Sprachpakete (
.traineddata) werden bei Bedarf automatisch von offiziellen GitHub-Repositories geladen. - Auto-Merge & Stapeln – Mehrere verarbeitete OCR-Ergebnisse zu einer konsolidierten Sammel-PDF zusammenfassen.
- Portable Tesseract & Poppler – Tesseract OCR ist lokal gebündelt; keine systemweite Installation erforderlich.
- Verlustfreier Originaldateischutz – Ergebnisse werden standardmäßig mit dem Suffix
_ocred.pdfoder im Zielordner abgelegt; Originale bleiben unberührt. - Job-Manifest-Export – Speichert portable
pdftopdfocr-job-v1.json-Dateien mit Einstellungen, Status und Metadaten. - Vollständige Barrierefreiheit (A11y) – Screen-Reader-gerechte Bezeichnungen aller Steuerelemente, Tooltips in aktiver Sprache und vollständige Tastaturkürzel (
Strg+O,Strg+Eingabetaste,Strg+E,F5,Strg+Umschalt+O,Entf/Rücktaste). - Kontrastreicher Fortschritt – WCAG-konforme Farbkodierung (
#0b6e4f/#b45309) und Einzeldateistatus per Mouseover.
-
[PERSONA-01] Rechtswesen, Gesundheitswesen & Compliance-Beauftragte:
- Kontext: Verwaltung vertraulicher Patientenakten, Mandantenverträge, Gerichtsakten und Steuerunterlagen unter strengen DSGVO- und Berufsgeheimnis-Vorgaben.
- Kernproblem: Das Hochladen von Dokumenten zu Cloud-OCR-Diensten (z.B. Adobe Cloud, Smallpdf, Google Vision) verletzt Zero-Egress-Vorschriften und birgt erhebliche Datenschutzrisiken.
- Lösung durch PDFtoPDFocr: 100% lokale, abgeschottete OCR-Verarbeitung direkt auf dem Endgerät (
INV-LOCAL-01). Unprivilegierte Ausführung (INV-UNPRIV-02). Quelldokumente bleiben strikt unverändert (INV-NONDEST-03).
-
[PERSONA-02] Archivare, Historiker & Akademische Forscher:
- Kontext: Digitalisierung umfangreicher historischer Buchbestände, mehrseitiger TIFF-Manuskripte und mehrsprachiger Archivbestände.
- Kernproblem: Kommerzielle Cloud-OCR verlangt prohibitive Seitenpreise und scheitert an großen Stapelverarbeitungen oder mehrseitigen TIFF-Scans.
- Lösung durch PDFtoPDFocr: Unbegrenzte lokale Stapelverarbeitung für PDFs und Bildformate (JPG, PNG, TIFF), freie Sprachmodellauswahl mit automatischem Download offizieller
.traineddata-Modelle und optionaler Sammel-PDF-Zusammenführung.
-
[PERSONA-03] Datenschutzbewusste Wissensarbeiter & Desktop-Anwender:
- Kontext: Fachanwender, die Rechnungen, Quittungen und Unterlagen auf Windows-Arbeitsplätzen oder mobilen Laptops im Volltext durchsuchbar machen wollen.
- Kernproblem: Kommerzielle Desktop-Suiten (Adobe Acrobat, ABBYY) erzwingen teure Abonnements, Cloud-Logins, aufdringliche Hintergrund-Dienste und Administratorrechte.
- Lösung durch PDFtoPDFocr: Kostenloses, quelloffenes MIT-Desktop-Tool ohne Telemetrie, Ausführung im Standard-Benutzerkonto, portable Zero-Install-Ordner (
INV-PORTABLE-06) und barrierefreie Tastaturbedienung (INV-A11Y-08).
-
[PERSONA-04] Automatisierungs-Entwickler & Pipeline-Integratoren:
- Kontext: Entwickler, die OCR-Schritte in lokale Archivierungs-, Ingest- oder Sicherungs-Pipelines einbetten wollen.
- Kernproblem: Den meisten Desktop-Tools fehlen maschinenlesbare Protokolle, nachvollziehbare Fehlerbehandlung und standardisierte Schnittstellen.
- Lösung durch PDFtoPDFocr: Strukturierter Job-Manifest-Export (
pdftopdfocr-job-v1.json/INV-MANIFEST-07), Fail-Closed Einzelfehler-Abfangung (INV-FAILCLOSED-09) und maschinenlesbare Dokumentation viallms.txt.
| Sprache | Primärer Suchbegriff | Zielintention & Persona |
|---|---|---|
| DE | gescannte pdf durchsuchbar machen lokal kostenlos |
Kostenlose lokale Texterkennung für Rechnungen und Dokumente ([PERSONA-03]) |
| DE | offline pdf ocr texterkennung windows tesseract |
Lokales Tesseract-Desktop-Tool mit deutscher Benutzeroberfläche ([PERSONA-02], [PERSONA-03]) |
| DE | datenschutzkonforme ocr software ohne cloud dsgvo |
100% DSGVO-konforme Texterkennung für Kanzleien und Praxen ([PERSONA-01]) |
| DE | tiff mehrseitig in durchsuchbare pdf umwandeln |
Stapelverarbeitung für historische Scan-Archive ([PERSONA-02]) |
| DE | portable ocr software ohne installation windows |
Portable Ausführung ohne Administratorrechte ([PERSONA-03], [PERSONA-04]) |
| EN | local pdf ocr converter windows 10 11 |
Local-First, offline Erstellung durchsuchbarer PDFs ([PERSONA-01], [PERSONA-03]) |
| EN | tesseract ocr batch desktop gui python pyside6 |
Python/PySide6 Desktop-Lösung für Stapel-OCR ([PERSONA-02], [PERSONA-04]) |
| EN | offline searchable pdf creator zero egress gdpr |
DSGVO- und Zero-Egress-konforme Dokumentenverarbeitung ([PERSONA-01]) |
| Bewertungsdimension | Governance-Invariante | PDFtoPDFocr (doc-bricks) | Adobe Acrobat Pro | ABBYY FineReader PDF | OCRmyPDF (CLI) | Cloud SaaS (Smallpdf/iLovePDF) |
|---|---|---|---|---|---|---|
| Zero-Egress Datenschutz | INV-LOCAL-01 |
100% Offline (Lokal) | Cloud-Sync Standard | Cloud-Optionen | 100% Offline (Lokal) | Nein (Cloud-Upload Pflicht) |
| Keine Privilegien-Erhöhung | INV-UNPRIV-02 |
Standard-Benutzermodus | Admin-Dienst / Daemon | Admin-Dienst / Daemon | Abhängig von Host/Docker | Remote Cloud Host |
| Verlustfreie Sicherheit | INV-NONDEST-03 |
Strikte _ocred.pdf |
Überschreibt / Fragt | Überschreibt / Fragt | In-Place oder neue Datei | Erzeugt Cloud-Objekt |
| Prozess- & Copyleft-Schutz | INV-ISOLATION-04 |
Subprozess-Grenze | Proprietär (Closed) | Proprietär (Closed) | MPL-2.0 / Subprozesse | Proprietäres Backend |
| Begrenzter Speicherbedarf | INV-BOUNDED-05 |
Seitenweises Streaming | Hoher Cache-Bedarf | Hoher Cache-Bedarf | Speicherlastig bei Groß-PDFs | Server-Allokation |
| Portabilität / Zero-Install | INV-PORTABLE-06 |
Portabler Ordner / EXE | Schwerer Installer | Schwerer Installer | Paketmanager erforderlich | Web-Client im Browser |
| Prüfbare Job-Manifeste | INV-MANIFEST-07 |
pdftopdfocr-job-v1.json |
Proprietäre Logs | Proprietäre Logs | Terminal stdout/stderr | JSON REST-Antwort |
| Screen-Reader & Tastatur | INV-A11Y-08 |
Vollständiges WCAG AA | Standard | Standard | Nur Terminal-Bedienung | Web-UI variiert |
| Fail-Closed Fehlerbehandlung | INV-FAILCLOSED-09 |
Seitenweiser Skip | Modale Dialogblocker | Modale Dialogblocker | CLI Fehlercode | HTTP 5xx Fehlercode |
| Sicherheits-Reaktions-SLA | INV-SLA-10 |
48h Antwort / 5d Triage | Enterprise-Support | Enterprise-Support | Best-Effort GitHub | Ticket-Warteschlange |
| Aktion | Tastenkürzel | Beschreibung |
|---|---|---|
| Dateien hinzufügen | Strg+O |
Dateiauswahldialog öffnen |
| OCR starten | Strg+Eingabetaste |
Stapel-OCR-Verarbeitung beginnen |
| Job-Manifest exportieren | Strg+E |
Auftragszustand als JSON-Manifest speichern |
| Liste zurücksetzen | F5 |
Dateiliste leeren und Statusanzeige zurücksetzen |
| Ausgabeordner wählen | Strg+Umschalt+O |
Benutzerdefinierten Zielordner festlegen |
| Ausgewählte Datei entfernen | Entf oder Rücktaste |
Gewählte Datei aus der Warteschlange entfernen |
- Python 3.10+
- Windows 10/11 (Primäre Distributions-Plattform)
- macOS / Linux (Ausführung aus Quellcode)
pip install -r requirements.txtPoppler muss für pdf2image verfügbar sein (entweder im System-PATH oder portabel im Projektverzeichnis hinterlegt).
python PDFtoPDFocr_2.pyUnter Windows kann START.bat per Doppelklick als Direktstarter genutzt werden.
- PDFs oder Bilder per Dateiauswahl oder Drag & Drop hinzufügen.
- OCR-Sprache wählen (fehlende Sprachpakete werden automatisch geladen).
- Auf "Start" klicken – fertig.
- Optional per "Job-Export" ein portables
pdftopdfocr-job-v1.json-Manifest sichern.
python -m pip install -r requirements-dev.txt
python -m pytestDie Testsuite deckt ab:
- UI-Barrierefreiheit & Tastenkürzel (
tests/test_ui_accessibility.py) - Tesseract-Konfiguration (
tests/test_tesseract_config.py) - Job-Exportformat & Manifest-Schema (
tests/test_export_format.py) - Sprachumschaltung & Mehrsprachigkeit (
tests/test_language_switch.py) - Fehler-Regressionen & Ressourcen-Lebenszyklus (
tests/test_bug_regressions.py) - App-Icons & Bild-Assets (
tests/test_app_assets.py) - Plattform-Paketierung & Release-Validierung (
tests/test_build_release.py,tests/test_platform_package_gate.py) - Metadaten, Sicherheit & Paritäts-Governance (
tests/test_metadata.py,tests/test_security_license_contract.py)
PDFtoPDFocr ist Teil der doc-bricks Dokumenten-Werkzeugfamilie und des open-bricks Open-Source-Ökosystems:
| Werkzeug | Ökosystem | Zweck | Repository |
|---|---|---|---|
| DokuReader | doc-bricks |
Lokale Dokumentenbibliothek, Lese-Arbeitsplatz & Viewer | doc-bricks/DokuReader |
| MediaBrain | doc-bricks |
Medien-Metadaten-Inspektor, EXIF-Analyzer & Batch-Klassifizierer | doc-bricks/MediaBrain |
| UniversalDocsGrabber | doc-bricks |
Automatisierte E-Mail-Dokumentenextraktion & Batch-Ingest | doc-bricks/UniversalDocsGrabber |
| UniversalInvoiceMail | doc-bricks |
Intelligente Rechnungsextraktion & DATEV-Export | doc-bricks/UniversalInvoiceMail |
| UniversalMailCleaner | doc-bricks |
Datenschutzorientierter Postfach-Cleaner & Newsletter-Abbesteller | doc-bricks/UniversalMailCleaner |
| CleanMarkdown | doc-bricks |
Markdown-Bereinigung, Tabellenformatierung & Dokumenten-Linter | doc-bricks/CleanMarkdown |
| LitZentrum | doc-bricks |
Literaturverwaltung, BibTeX-Zitationsmanager & Forschungs-Workspace | doc-bricks/LitZentrum |
| MailProcessor | doc-bricks |
Regelbasierte E-Mail-Archivierung & Anhang-Sortierung | doc-bricks/MailProcessor |
| ProFiler | file-bricks |
Schnelle Dateisuche nach Kriterien, Regex & Batch-Umbenennung | file-bricks/ProFiler |
| ExplorerPro | file-bricks |
Zweifenster-Dateimanager mit Tabs, Lesezeichen & Hex-Vorschau | file-bricks/ExplorerPro |
| DevCenter | dev-bricks |
Entwicklungsumgebungs-Manager, Toolchain-Orchestrierer & Starter | dev-bricks/DevCenter |
| CodeBox | dev-bricks |
Offline Code-Playground, Snippet-Sammlung & Sandbox | dev-bricks/CodeBox |
| open-bricks | open-bricks |
Dachorganisation für datenschutzkonforme Desktop-Software | open-bricks |
PDFtoPDFocr erzwingt 100% Open-Source-Transparenz, verifizierte Lieferkettenhygiene und strikte Copyleft-Isolationsgrenzen:
- Keine AGPL / SSPL Belastung: Die Anwendung ist frei von Netzwerk-Copyleft oder restriktiven dualen Lizenzen.
- LGPL-3.0 Dynamische Verlinkung:
PySide6(Qt für Python) ist dynamisch gemäß LGPLv3 Abschnitt 4 angebunden; Austausch der Bibliotheken ist unterstützt. - Strikte Subprozess-Grenzen für Hilfswerkzeuge: Externe Werkzeuge (
Poppler-Utilities wiepdftoppmundpdfinfo) laufen strikt in isolierten Betriebssystem-Subprozessen mit begrenzten Parametern, wodurch GPL-Code sauber isoliert bleibt (INV-ISOLATION-04). - Freizügige Kern-Laufzeit:
pytesseract(Apache-2.0),Pillow(HPND),pdf2image(MIT),pikepdf(MPL-2.0) undrequests(Apache-2.0) sind 100% kompatibel mit der übergeordneten MIT-Lizenz.
Das vollständige Software-Inventar und die Governance-Invarianten sind in THIRD_PARTY_LICENSES.md und MARKETING-LOG.txt dokumentiert.
PDF-Dateien und Bilder werden ausschließlich lokal verarbeitet und niemals hochgeladen. Netzwerkzugriff beschränkt sich strikt auf den manuell ausgelösten Download öffentlicher Tesseract-Sprachpakete von GitHub. Vollständige Sicherheitsprinzipien finden sich in SECURITY.md.
python build_release.py --clean
# oder unter Windows per Doppelklick / Konsole:
build_exe.bat
# oder direkt per PyInstaller:
python -m PyInstaller --noconfirm --clean PDFtoPDFocr.specDas fertige Paket wird in dist/PDFtoPDFocr/ erzeugt. Falls vorhanden, werden tesseract_portable/ und poppler/ automatisch eingebunden.
Für autonome KI-Programmierassistenten und automatisierte CI-Pipelines stellt dieses Repository eine dedizierte llms.txt-Datei nach modernen Konventionen bereit. Sie enthält:
- Architektur-Zusammenfassung und Komponenten-Rollen
- Testbefehle und Verifikations-Gates
- Sicherheits- und Laufzeit-Invarianten (
INV-LOCAL-01bisINV-SLA-10) - Dateisystem-Übersicht und Abhängigkeits-Matrizen
Important
Haftungsbeschränkung bei unentgeltlicher Softwareüberlassung (§ 521 BGB): Da diese Software unentgeltlich als Open-Source-Software zur Verfügung gestellt wird, haften die Autoren und Beitragenden gemäß § 521 BGB (Schenkungsrecht/Gefälligkeitsrecht) nur für Vorsatz und grobe Fahrlässigkeit. Die Software wird ohne ausdrückliche oder stillschweigende Gewährleistung in der vorliegenden Form ("as is") bereitgestellt.
Beiträge, Fehlermeldungen und Pull Requests sind willkommen! Bitte stellen Sie sicher, dass alle Pull Requests vor dem Einreichen die Testsuite (pytest) und den Linter (ruff check .) erfolgreich durchlaufen.
Dieses Projekt steht unter der MIT-Lizenz.

