Python-SDK
Markieren Sie KI-Bilder, -Songs und -Clips aus Python mit einer Zeile: in der Cloud oder, bei Bildern, auf Ihrem eigenen Rechner, den sie dann nie verlassen. Sicherheitsprüfung und Verifizierung sind enthalten. Unter MIT-Lizenz; der Cloud-Client braucht keine Abhängigkeiten.
Installation
pip install kennmarq # the cloud API: no dependencies
pip install "kennmarq[local]" # local mode
pip install "kennmarq[safety]" # the safety check on your machine tooDas SDK liest Ihren Schlüssel aus KENNMARQ_API_KEY oder nimmt ihn über api_key= entgegen. Python 3.10 oder neuer.
In der Cloud
from kennmarq import Kennmarq
k = Kennmarq()
result = k.mark("render.png", "render.marked.png", source="created", model="FLUX.1 schnell")
print(result.mark_id, result.watermark_id, result.marks_used)Das Bild geht an POST /v1/mark: Unsere Server in Zürich markieren es im Arbeitsspeicher und bewahren nichts auf. Eine Datei über 4 MB, bis 25 MB, lädt das SDK selbstständig zuerst über POST /v1/uploads hoch; check() und verify() tun dasselbe (ein Upload braucht einen Schlüssel).
Songs und Clips
song = k.mark("track.mp3", "track.marked.mp3", model="Song Model 2")
print(song.marks_counted, song.audio_watermark) # 15 (five per started minute), "claimed"
clip = k.mark("clip.mp4", "clip.marked.mp4", check="ai-act") # waits for the job, then downloads
print(clip.watermark_id, clip.marks_counted)
job = k.mark("long.mp4", wait=False) # or start it now…
clip = k.wait_for(job.mark_id, "long.marked.mp4") # …and fetch it latermark() nimmt in der Cloud auch Songs (MP3, WAV, M4A) und Clips (MP4) entgegen: Ein Clip ist ein Auftrag, auf den mark() wartet (bis zu 40 Minuten), bevor es den markierten Clip herunterlädt; ein Clip bis 1 GB wird zuerst selbstständig hochgeladen. Ein blockiertes Einzelbild löst ContentBlocked aus, mit dem Einzelbild in safety. Der lokale Modus markiert vorerst nur Bilder.
mark(..., label=True) zeichnet die sichtbare Kennzeichnung der EU („AI GENERATED“) in ein Bild oder in jedes Einzelbild eines Clips; deepfake=True schaltet sie ein, und label_language, label_position, label_size und label_style gestalten sie. Kennzeichnungen werden in der Cloud gezeichnet: mark_file() zeichnet sie noch nicht.
Auf Ihrem Rechner
result = k.mark_file("render.png", "render.marked.png", source="created", model="FLUX.1 schnell")
assert result.mode == "local"- Wasserzeichen und Content Credentials entstehen auf Ihrem Rechner. Nur das Manifest, etwa 13 KB und nie Pixel, geht an POST /v1/sign, um signiert und mit einem Zeitstempel versehen zu werden. Jede Datei zählt eine Markierung.
- Bevor es etwas schreibt, liest das SDK die Datei mit unseren Wurzelzertifikaten: Das Ergebnis muss Trusted lauten, mit einem validierten Zeitstempel und vorhandenem Wasserzeichen. Andernfalls löst es
InvalidSignedFileaus und schreibt nichts. - Content Credentials, die die Datei bereits trägt, bleiben als Bestandteil („Ingredient“) erhalten, wie es der Verhaltenskodex verlangt, und werden mit dem Manifest mitgesendet; mit
keep_input_credentials=Falsebleiben keine erhalten. - Das Modell des Wasserzeichens (65 MB) wird einmalig nach
~/.cache/kennmarq/modelsoderKENNMARQ_MODELS_DIRheruntergeladen und gegen seinen festgelegten SHA-256-Hash geprüft. - Wo es für die C2PA-Bibliothek keinen Build gibt (vorerst Windows), entsteht das Wasserzeichen auf Ihrem Rechner und das Manifest in der Cloud: Das Bild mit dem Wasserzeichen wird an
POST /v1/markgesendet (mode == "hybrid"). - Ohne Schlüssel schreibt
watermark_file()nur das Wasserzeichen und die IPTC-KI-Kennzeichnung, ohne Content Credentials.
Die Sicherheitsprüfung
answer = k.check("render.png", policy="ai-act") # in the cloud: two marks
answer = k.check("render.png", policy="ai-act", local=True) # on your machine: nothing sent, nothing counted
result = k.mark_file("render.png", "out.png", check="ai-act") # a block raises ContentBlockedDieselbe Prüfung wie POST /v1/check, mit denselben Modellen und denselben Fehlerraten. Auf Ihrem Rechner werden ihre Modelle einmalig heruntergeladen, etwa 2,3 GB.
Datei verifizieren
Kennmarq().verify("render.marked.png") # free, no key neededFehler
API-Fehler lösen KennmarqError aus, mit code, status und request_id der API (Fehler). ContentBlocked trägt die Antwort der Prüfung in safety; MissingApiKey, LocalModeUnavailable und InvalidSignedFile sagen, was fehlt.