PXF Format – Das offene Austauschformat von Publixx
Version 2.3 | Stand: Januar 2026 | incoxx GmbH
Warum PXF?
PXF (Publixx Exchange Format) löst ein fundamentales Problem: Wie teilt man komplette Publikationen, ohne Abhängigkeiten zu schaffen?
Andere Systeme exportieren proprietäre Binärdateien, die nur mit derselben Software geöffnet werden können. PXF ist anders: Es ist offenes JSON – lesbar mit jedem Texteditor, versionierbar mit Git, analysierbar mit Standard-Tools.
Praktischer Nutzen:
- Template-Austausch zwischen Agenturen und Kunden ohne IT-Projekte
- Archivierung von Kampagnen mit garantierter Wiederherstellbarkeit
- Offline-Distribution an Händler ohne Netzwerkzugang
- Backup-Strategie unabhängig von Cloud-Diensten
- Versionskontrolle für Template-Entwicklung
Offenes JSON – Nichts versteckt
PXF-Dateien sind reines JSON. Kein proprietäres Binärformat, keine versteckten Strukturen. Sie können jede PXF-Datei öffnen und lesen:
{
"version": "2.3.0",
"created": "2025-01-07T14:30:00.000Z",
"generator": "Publixx v1.4",
"template": { ... },
"datasets": [ ... ],
"metadata": { ... },
"config": { ... }
}
Was bedeutet "offen"?
- Lesbar: JSON ist ein Industriestandard, lesbar mit jedem Texteditor
- Dokumentiert: Jedes Feld hat eine klare Bedeutung
- Portabel: UTF-8 Encoding, keine Systemabhängigkeiten
- Versionierbar: Git-freundlich, Diff-fähig, Merge-fähig
- Erweiterbar: Neue Felder brechen keine Abwärtskompatibilität
Die drei Säulen: Template, Daten, Metadaten
Eine PXF-Datei besteht aus drei logisch getrennten Bereichen:
1. Template – Das Layout
Das Template definiert WIE Inhalte dargestellt werden:
"template": {
"name": "Produktdatenblatt A4",
"width": 2480,
"height": 3508,
"backgroundColor": "#ffffff",
"elements": [
{
"id": "titel_001",
"type": "text",
"x": 100, "y": 80,
"width": 600, "height": 50,
"bind": "produktname",
"fontSize": 36,
"fontFamily": "Arial",
"color": "#1a1a1a"
},
{
"id": "bild_001",
"type": "image",
"x": 100, "y": 150,
"width": 400, "height": 400,
"bind": "produktbild"
}
]
}
Enthält: Position, Größe, Styling, Bindings zu Datenfeldern
2. Datasets – Die Inhalte
Die Datasets enthalten WAS dargestellt wird:
"datasets": [
{
"produktname": "Hydraulikpumpe X200",
"produktbild": "https://cdn.example.com/pumpe-x200.jpg",
"preis": "1.299,00 €",
"technische_daten": [
{ "label": "Leistung", "value": "2,5 kW" },
{ "label": "Druck", "value": "350 bar" }
]
},
{
"produktname": "Hydraulikpumpe X300",
"produktbild": "https://cdn.example.com/pumpe-x300.jpg",
"preis": "1.799,00 €"
}
]
Enthält: Texte, Bild-URLs, Tabellen, Listen – alle variablen Inhalte
3. Metadata & Config – Der Kontext
Metadaten beschreiben WOHER und WOFÜR:
"metadata": {
"author": "Max Mustermann",
"company": "ACME Industries",
"tags": ["hydraulik", "pumpen", "industrie"],
"language": "de",
"exportDate": "2025-01-07"
},
"config": {
"assetBase": "https://cdn.example.com/",
"defaultFontFamily": "Arial",
"testMode": false,
"brandKit": { "name": "Corporate 2025", ... }
}
Enthält: Autor, Erstellungsdatum, Branding-Einstellungen, Asset-Pfade
zPXF – Mit eingebetteten Bildern
Das Problem: PXF referenziert Bilder per URL. Wenn die URL offline geht, fehlt das Bild.
Die Lösung: zPXF packt alles in ein ZIP-Archiv.
Struktur einer zPXF-Datei
kampagne-winter-2025.zpxf
│
├── manifest.json ← Template + Daten + Metadata
│
└── assets/ ← Alle Bilder eingebettet
├── img_0001.jpg
├── img_0002.png
└── img_0003.webp
Automatische URL-Konvertierung
Beim Export: URLs werden zu lokalen Pfaden
// Vorher (PXF)
"produktbild": "https://cdn.example.com/pumpe.jpg"
// Nachher (zPXF)
"produktbild": "assets/img_0001.jpg",
"_original_produktbild": "https://cdn.example.com/pumpe.jpg"
Beim Import: Lokale Pfade werden zu Blob-URLs
"produktbild": "blob:http://localhost/abc123-def456"
Die Original-URL bleibt als _original_* erhalten – für späteren Abgleich oder Re-Synchronisation.
Wann PXF, wann zPXF?
| Anwendung | Format | Grund |
|---|---|---|
| Git-Versionierung | PXF | Kompakt, Diff-fähig |
| Schneller Austausch | PXF | Kleine Dateigröße |
| Offline-Präsentation | zPXF | Keine URL-Abhängigkeiten |
| Langzeit-Archivierung | zPXF | Vollständig autark |
| Händler-Distribution | zPXF | Funktioniert ohne Internet |
| API-Integration | PXF | JSON direkt nutzbar |
Verschlüsselung – Enterprise-Grade Security
PXF unterstützt AES-256-GCM Verschlüsselung – derselbe Standard, den Banken und Regierungen verwenden.
Verschlüsselungsmodi
1. Unverschlüsselt (.pxf / .zpxf)
- Standard für interne Nutzung
- Volle Lesbarkeit
2. Lizenz-Key Verschlüsselung
- Automatisch mit Publixx-Lizenzschlüssel
- Jeder mit gültiger Lizenz kann öffnen
- Ideal für Team-intern
3. Custom-Key Verschlüsselung (.pxf.enc / .zpxf.enc)
- Eigenes Passwort wählen
- Maximale Kontrolle
- Ideal für externe Weitergabe
Technische Details
Algorithmus: AES-256-GCM (Galois/Counter Mode)
Key-Derivation: PBKDF2 mit 100.000 Iterationen
Hash: SHA-256
Salt: Fixed (Kompatibilität) + Random IV
Authentifizierung: Integriert (GCM-Tag)
Warum AES-256-GCM?
- 256-Bit Schlüssel: Praktisch unknackbar (2²⁵⁶ Möglichkeiten)
- GCM-Modus: Authentifiziert – erkennt Manipulation
- PBKDF2: Schützt vor Brute-Force durch hohe Iteration
- Web Crypto API: Native Browser-Implementierung, keine externen Libs
Verschlüsselungs-Scope (ab v2.1)
Manifest-Only (Legacy): Nur die JSON-Daten sind verschlüsselt, Bilder im Klartext.
Full (Enterprise): Manifest UND alle Assets verschlüsselt – maximaler Schutz.
{
"encrypted": true,
"encryptionScope": "full",
"encryptionVersion": "1.1"
}
Dateiendungen im Überblick
| Endung | Format | Verschlüsselung | Bilder |
|---|---|---|---|
.pxf |
JSON | Nein | URLs (extern) |
.pxf.enc |
JSON | AES-256-GCM | URLs (extern) |
.zpxf |
ZIP | Nein | Eingebettet |
.zpxf.enc |
ZIP | AES-256-GCM | Eingebettet + verschlüsselt |
Praxisbeispiel: Vollständige PXF-Datei
{
"version": "2.3.0",
"created": "2025-01-07T10:30:00.000Z",
"generator": "Publixx v1.4.2",
"template": {
"name": "Produktdatenblatt",
"width": 2480,
"height": 3508,
"unit": "px",
"backgroundColor": "#ffffff",
"pages": 1,
"elements": [
{
"id": "elem_title",
"type": "text",
"x": 120, "y": 100,
"width": 800, "height": 60,
"bind": "title",
"fontSize": 48,
"fontFamily": "Arial Black",
"fontWeight": "bold",
"color": "#1a1a1a",
"textAlign": "left"
},
{
"id": "elem_image",
"type": "image",
"x": 120, "y": 200,
"width": 600, "height": 600,
"bind": "mainImage",
"objectFit": "contain"
},
{
"id": "elem_specs",
"type": "table",
"x": 800, "y": 200,
"width": 500, "height": 400,
"bind": "specifications"
}
]
},
"datasets": [
{
"title": "Hydraulikpumpe X200",
"mainImage": "https://assets.example.com/pumpe-x200.jpg",
"specifications": [
{ "label": "Leistung", "value": "2,5 kW" },
{ "label": "Max. Druck", "value": "350 bar" },
{ "label": "Fördervolumen", "value": "45 l/min" },
{ "label": "Gewicht", "value": "28 kg" }
],
"price": "1.299,00",
"sku": "HP-X200-DE"
}
],
"metadata": {
"author": "Produktmanagement",
"company": "MAHLE Aftermarket",
"language": "de",
"tags": ["hydraulik", "pumpen", "ersatzteile"],
"version": "1.0",
"approved": true
},
"config": {
"assetBase": "https://assets.example.com/",
"defaultFontFamily": "Arial",
"defaultFontSize": 14,
"testMode": false
}
}
Technische Zusammenfassung
| Aspekt | Spezifikation |
|---|---|
| Format | JSON (UTF-8) bzw. ZIP |
| MIME-Type | application/x-publixx-pxf |
| Encoding | UTF-8 ohne BOM |
| Kompression | ZIP Deflate (nur zPXF) |
| Verschlüsselung | AES-256-GCM, PBKDF2 |
| Max. Dateigröße | Unbegrenzt (praktisch: 100 MB) |
| Bildformate | JPEG, PNG, WebP, GIF, SVG |
| Abwärtskompatibilität | v2.3 liest v2.0, v2.1, v2.2 |
Fazit
PXF ist das Format für professionellen Template-Austausch:
✅ Offen: Reines JSON, keine versteckten Strukturen
✅ Lesbar: Mit jedem Texteditor analysierbar
✅ Portabel: zPXF enthält alles, funktioniert offline
✅ Sicher: AES-256-GCM für sensible Daten
✅ Zukunftssicher: Dokumentiert, versioniert, erweiterbar
Ein Template. Alle Daten. Ein Format.
© 2026 incoxx GmbH | Publixx Exchange Format v2.3