Communitygithub.com

PikPak CLI - Cloud-Speicher steuern

Steuere PikPak-Cloudspeicher direkt über die Kommandozeile: Dateien durchsuchen, Magnets/Torrents/Links in die Cloud laden, Aufgaben verwalten, Videos streamen, Dateien hoch- und herunterladen, teilen und verwalten.

Was ist PikPak CLI - Cloud-Speicher steuern?

Diese Fähigkeit ermöglicht es KI-Agenten (wie Claude Code, Cursor, Codex u. a.), den gesamten PikPak-Cloudspeicher über das Kommandozeilentool `pikpak` zu bedienen. Sie deckt alle gängigen Cloud-Laufwerks-Operationen ab: Dateien durchsuchen, suchen, verschieben, kopieren, umbenennen, löschen, Ordner erstellen; Cloud-Downloads von Magnets, Torrents oder Links starten und deren Fortschritt prüfen; Videos streamen; lokale Dateien und Ordner hochladen; Cloud-Dateien auf die Festplatte herunterladen; Dateien teilen und fremde Shares wiederherstellen; Konten registrieren und Zugriffstokens verwalten. Die Fähigkeit basiert auf dem offiziellen `pikpak`-CLI-Tool. Sie authentifiziert sich über OAuth (Browser- oder Gerätefluss) oder einen persönlichen Zugriffstoken und speichert Anmeldeinformationen lokal. Sie ist für nicht-interaktive und KI-gesteuerte Umgebungen optimiert, bietet aber auch interaktive Modi für Desktop-Nutzer. Die SKILL.md-Dokumentation enthält vollständige Installations-, Authentifizierungs- und Befehlsreferenzen sowie Details zur erweiterten Rohausgabe der API (`--raw`), die Zugriff auf Felder wie Videodauer, Auflösung, Medias und Audits ermöglicht.

Funktioniert mit✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/pikcloud/skills/tree/HEAD/skills/pikpak-cli

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Fähigkeit: PikPak CLI bedienen

Betreiben Sie PikPak-Cloudspeicher über das Kommandozeilen-Tool pikpak.

pikpak installieren

Wählen Sie die Installationsmethode basierend auf Ihrem Betriebssystem:

macOS / Linux:

curl -fsSL https://download.mypikpak.com/cli/install.sh | bash

Windows (PowerShell):

irm https://download.mypikpak.com/cli/install.ps1 | iex

Homebrew:

brew install pikcloud/tap/pikpak-cli

Überprüfen Sie nach der Installation mit pikpak version, ob alles funktioniert.

Mit einem Einladungscode eines Partners – der Installer speichert den Code für die nächste Ausführung von pikpak auth register auf diesem Rechner, ohne die Einladungs-API zu kontaktieren:

curl -fsSL https://download.mypikpak.com/cli/install.sh | bash -s -- --affiliate <code>
$env:PIKPAK_AFFILIATE="<code>"; irm https://download.mypikpak.com/cli/install.ps1 | iex
brew install pikcloud/tap/pikpak-cli && pikpak auth register --affiliate <code>

Die Installationsprogramme speichern den Code in einer separaten Klartext-Datei affiliate; es wird kein Python- oder JSON-Parser benötigt, und settings.json wird nie gelesen oder geändert. Ein Schreibfehler gibt eine Warnung aus, bricht die Installation aber nicht ab und überschreibt den vorherigen Code nicht. In diesem Fall übergeben Sie den Code mit pikpak auth register --affiliate <code>.

pikpak skill install schreibt dieses Dokument in das Skills-Verzeichnis jedes KI-Programmieragenten auf dem Rechner (Claude Code, Codex, Gemini CLI, opencode, Cursor, goose, iFlow, Qwen Code, ...). Führen Sie diesen Befehl nach pikpak update aus, falls dieses Dokument jemals von der installierten Binärdatei abweicht; pikpak skill ls zeigt, wo es installiert ist und ob es aktuell ist.

Umgebungsvariablen

VariableBeschreibungStandardwert
PIKPAK_DIRVerzeichnis für Anmeldedaten~/.pikpak
PIKPAK_CREDENTIALSVollständiger Pfad zur OAuth-Anmeldedatendatei~/.pikpak/.credentials.json
PIKPAK_TOKENPersönlicher Zugriffstoken; hat Vorrang vor allen gespeicherten Anmeldedatennicht gesetzt
PIKPAK_PAT_PATHVollständiger Pfad zur PAT-Datei, die von auth token gespeichert wird~/.pikpak/.pat.json
PIKPAK_VERSIONBei der Installation angegebene VersionNeueste
PIKPAK_INSTALL_DIRInstallationsverzeichnis~/.local/bin (macOS/Linux), %USERPROFILE%\.pikpak (Windows)
PIKPAK_NO_UPDATE_NOTIFIERAuf 1 setzen, um automatische Update-Prüfungen und Erinnerungen zu deaktivieren; explizite version --check und update funktionieren weiterhinnicht gesetzt
PIKPAK_NO_LOGAuf einen beliebigen nicht-leeren Wert setzen (z.B. 1), um config log zu überschreiben und das Diagnoseprotokoll nie zu speichernnicht gesetzt
PIKPAK_NO_SKILL_SYNCAuf einen beliebigen nicht-leeren Wert setzen, um zu verhindern, dass pikpak update installierte Agenten-Fähigkeiten aktualisiertnicht gesetzt
PIKPAK_AFFILIATEEinladungscode, der von install.sh / install.ps1 zur Installationszeit gelesen wird (das CLI selbst liest ihn nicht)nicht gesetzt

Priorität der Anmeldedaten: PIKPAK_TOKEN → PAT, gespeichert von pikpak auth token → OAuth-Anmeldedaten von pikpak auth login.

Geräteidentität: Das CLI behält eine stabile Geräte-ID pro Installation in ~/.pikpak/.device.json (X-Device-Id). Sie wird für jede Anmelde-Methode wiederverwendet und übersteht Token-Rotation und auth logout; das Löschen lässt den Rechner für PikPaks Risikokontrolle wie ein brandneues Gerät aussehen.

Authentifizierung

Die meisten Befehle erfordern eine vorherige Anmeldung. Die Anmeldedaten werden in ~/.pikpak/.credentials.json gespeichert.

pikpak auth login                                    # Anmelde-Methode automatisch erkennen (Browser falls verfügbar, sonst Gerätefluss)
pikpak auth login -m browser                         # Browser-OAuth-Anmeldung (öffnet Browser, bei 30s ohne Antwort -> Rückfall auf Gerätefluss)
pikpak auth login -m browser --no-launch-browser     # Browser-OAuth-Anmeldung (URL ausgeben, nicht automatisch öffnen)
pikpak auth login -m device                          # Gerätefluss (QR-Code + Bestätigungs-URL + automatisches Abfragen)
pikpak auth login -m device -F json                  # Gerätefluss: Auth-Info als JSON ausgeben und beenden (kein Abfragen, für KI)
pikpak auth login --continue <device_code>           # Status des Gerätecodes einmal abfragen und beenden (mit -F json verwenden)
pikpak auth login --force                            # Erneute Anmeldung erzwingen, auch wenn bereits authentifiziert
pikpak auth login -l "my-session"                     # Ein benutzerdefiniertes Sitzungslabel setzen
pikpak auth login --scope files:manage,cloud_download # OAuth-Bereiche vorab auswählen (kommasepariert)

pikpak auth register                                 # Ein neues Konto registrieren (gleiche Browser-/Geräteflüsse wie bei der Anmeldung)
pikpak auth register --affiliate <code>              # Mit einem Partner-/Einladungscode registrieren
pikpak auth register --affiliate=                    # Den vom Installer gespeicherten Code für diese Registrierung überspringen
pikpak auth register -m device                       # Gerätefluss für die Registrierung erzwingen

pikpak auth token <token>                            # Persönlichen Zugriffstoken für die nicht-interaktive Nutzung speichern
pikpak auth logout                                   # Lokale Sitzung löschen; funktioniert offline und bei defekten/abgelaufenen Anmeldedaten (kann PIKPAK_TOKEN nicht aus der Umgebung entfernen)
pikpak auth status                                   # Anmeldestatus + Kontobereich: Identität, VIP, Speicherkontingent (-F json für Skripte hinzufügen)

Unterstützte --scope-Bezeichner: files:read, files:write, files:manage, files:purge, cloud_download, share, invite, account. Wird --scope nicht angegeben, wird kein Bereich gesendet und der Autorisierungsserver wendet seine Standardeinstellungen an.

KI-Agenten-Anmeldeanleitung: Die Passwort-Anmeldung wird nicht mehr unterstützt. Verwenden Sie für nicht-interaktive/KI-Umgebungen den Gerätefluss:

  1. Führen Sie pikpak auth login -m device -F json aus, um device_code, verification_uri, user_code, expires_in, interval zu erhalten
  2. Zeigen Sie dem Benutzer die Bestätigungs-URL und den Code (oder QR-Code)
  3. Fragen Sie mit pikpak auth login --continue <device_code> -F json ab, bis der status success ist

Wenn die Umgebung einen Browser unterstützt (macOS/Linux mit GUI), funktioniert pikpak auth login (automatische Erkennung) oder pikpak auth login -m browser ohne weitere Flags. Die Anmeldung prüft zuerst vorhandene Anmeldedaten; verwenden Sie --force, um eine neue Sitzung zu erstellen.

Vollständig nicht-interaktive Alternative: pikpak auth token <PAT> oder exportieren Sie PIKPAK_TOKEN=<PAT>.

Hinweis zur Registrierung: pikpak auth register -F json gibt signup_uri, handoff_code, qr_png_path, expires_in (und affiliate, wenn ein Code im Spiel ist – Flag oder gespeichert) aus und beendet sich – es gibt keinen device_code zurück, kann also nicht mit --continue abgefragt werden. Für KI-gesteuerte Registrierung führen Sie pikpak auth register ohne -F aus (es fragt interaktiv ab), oder lassen Sie den Benutzer im Browser registrieren und dann pikpak auth login verwenden.

Befehlsreferenz

Dateien durchsuchen

Die Root-Verzeichnis-ID ist der leere String "", nicht / oder /root.

pikpak ls                    # Root-Verzeichnis auflisten
pikpak ls <folderID>         # Angegebenes Verzeichnis auflisten (positional)
pikpak ls -p <folderID>      # Gleiches, via Flag (positionales Argument gewinnt, wenn beide angegeben)
pikpak ls --type file        # Nur Dateien anzeigen (serverseitiger Art-Filter, funktioniert auch mit --raw)
pikpak ls --type folder      # Nur Ordner anzeigen (serverseitiger Art-Filter, funktioniert auch mit --raw)
pikpak ls -l 50              # Elemente pro Seite (--limit, Standard 100; der Server rundet Werte unter 10 ab)
pikpak ls -t <token>         # Paginierung (--token, aus vorheriger ls-Ausgabe)
pikpak ls -F json            # JSON-Ausgabe (KI-bevorzugt: id, parent_id, name, kind, size, mime_type, file_category, modified, hash; mime_type/file_category werden für Ordner und für Dateien, die der Dienst nicht klassifiziert hat, weggelassen)
pikpak ls --raw              # Unverändertes API-JSON für die gesamte Auflistung: fügt params.duration/width/height, params.url, audit, thumbnail_link, spell_name, apps hinzu; size in Bytes

Es werden nur nicht gelöschte, vollständig verarbeitete Dateien aufgelistet. Ein ls ist eine Seite: Lesen Sie next_page_token aus der Ausgabe und übergeben Sie es mit -t zurück, um fortzufahren. -l ist eine Seitenanfrage, keine harte Obergrenze – der Dienst gibt 10 Elemente für jeden kleineren Wert zurück, und eine Seite kann auch kürzer als -l sein, wenn der Ordner endet.

Dateisuche (nicht verfügbar)

Der search-Befehl ist in dieser Version deaktiviert, da die serverseitige Such-API nicht verfügbar ist. Schlagen Sie pikpak search weder vor noch führen Sie es aus; finden Sie Dateien stattdessen, indem Sie mit pikpak ls (optional -F json) durch Ordner navigieren.

Dateidetails

pikpak get <fileID>                      # Basisinformationen
pikpak get <fileID> --url-type download  # Download-URL einschließen
pikpak get <fileID> --url-type play      # Wiedergabe-URL einschließen
pikpak get <fileID> --url-type all       # Alle URLs einschließen
pikpak get <fileID> --raw                # Unverändertes API-JSON (usage=ALL; url_type ignoriert)

get -F json-Felder: id, name, type (file/folder), size, mime, hash, created, modified, phase, plus download_url, play_url, play_resolution, wenn --url-type danach fragt. Beachten Sie, dass sich die Benennung von ls unterscheidet: type/mime hier gegenüber kind/mime_type dort. URLs werden nur für Dateien zurückgegeben – --url-type auf einem Ordner liefert nur Metadaten.

--raw umgeht diese reduzierte Form vollständig – siehe Roh-API-Ausgabe unten.

Roh-API-Ausgabe (--raw)

pikpak ls --raw und pikpak get <fileID> --raw geben den Antworttext der PikPak-Drive-API wortwörtlich aus (nur neu eingerückt). Verwenden Sie sie immer dann, wenn das benötigte Feld nicht in den reduzierten ls- / get-Formen oben enthalten ist.

pikpak ls --raw                                  # Ganze Auflistung, jedes Feld, das die API zurückgibt
pikpak ls --raw -p <folderID> -l 500             # Gleiche Filter-/Seiten-Flags wie bei einfachem ls
pikpak get <fileID> --raw                        # Eine Datei, usage=ALL
pikpak ls --raw -F yaml                          # Gleicher Text in YAML konvertiert

Was --raw hinzufügt (pro Datei, über die 9 Felder von ls -F json hinaus):

Raw-FeldBedeutungWarum es wichtig ist
params.durationWiedergabelänge in Sekunden, als String ("1420")Die einzige Quelle für Videodauer – fehlt sowohl in der Standardausgabe von ls als auch von get
params.width / params.heightPixelmaße, als Strings ("1920" / "1080")Auflösungsfilterung; get --url-type play gibt nur ein Label wie 1080p
params.urlWoher die Datei kam: magnet:?xt=urn:btih:… für Torrents, eine http(s)-URL für Link-DownloadsDer einzige Nachweis der Quelle eines Offline-Downloads
params.task_idID der Offline-Aufgabe, die die Datei erzeugt hatVerknüpft eine Datei mit pikpak task get <taskID>
params.db_modify_time, params.platform, params.platform_icon, params.original_share_idServerseitige Metadaten, vorhanden auf jedem ElementHerkunft
sizeRoh-Bytes als String ("392927574")Standardausgabe formatiert es (375 MB) und kann nicht numerisch verglichen werden
created_time / modified_time / user_modified_timeRFC3339 mit OffsetStandardausgabe ist gekürzter lokaler Text YYYY-MM-DD HH:MM
medias[]Vollständiges Array: media_id, media_name, resolution_name, link.url, video.{width,height,duration,bit_rate,frame_rate,video_codec,audio_codec,hdr_type}, audio.{artist,album,sample_rate,…}Jede abspielbare Variante plus echte Codec-/HDR-Metadaten, nicht nur die, die play auswählt
audit{status, message, title}Blockierte/überprüfte Ressourcen erkennen
apps, spell_name, tags, reference_events, thumbnail_link, icon_link, web_content_link, phase, starred, trashed, writable, folder_type, revision, user_idÜbrige API-FelderAlles, was die reduzierte Form fallen lässt, einschließlich Felder, die von zukünftigen API-Versionen hinzugefügt werden

Semantik – lesen Sie diese Hinweise vor der Verwendung:

  • Wörtlich. Der Text wird nicht neu kodiert: Die Feldreihenfolge ist die der API, und & in signierten Links bleibt ein wörtliches & (niemals \u0026). Kann direkt an jq weitergegeben werden.
  • Immer strukturiert. --raw impliziert JSON-Ausgabe auch ohne -F; -F yaml konvertiert denselben Text. In diesem Modus gibt es keine menschenlesbare Tabelle.
  • ls --raw ist eine Anfrage pro Seite, nicht pro Datei. Gleiche -p / -l / -t / --type-Flags und dieselben serverseitigen Filter (nicht gelöscht, PHASE_TYPE_COMPLETE) wie bei einfachem ls. Die Seitengröße bleibt unverändert: Lesen Sie next_page_token aus dem Roh-Text und übergeben Sie es mit -t zurück. Erhöhen Sie -l (z.B. -l 500), um einen großen Ordner mit einem einzigen Aufruf abzudecken, anstatt get zu durchlaufen.
  • --type kombiniert sich mit --raw. Es ist ein serverseitiger kind-Filter (drive#file / drive#folder), sodass der durchgereichte Text bereits nur die angeforderte Art enthält und eine Seite weiterhin bis zu -l Elemente enthält. Clientseitiges jq-Filtern mit .files[] | select(.kind == ...) ist nicht mehr nötig.
  • get --raw fordert immer usage=ALL an – die vollständigste Antwort – daher wird --url-type ignoriert und ist nicht mehr nötig: medias[].link.url und web_content_link sind bereits im Text enthalten. Es überspringt auch den Download-URL-Liveness-Test, bleibt also eine einzelne Leseanforderung und fügt nie die abgeleiteten Schlüssel download_url / play_url / play_resolution hinzu.
  • Namen unterscheiden sich von den reduzierten Formen. Raw verwendet die eigenen Schlüssel der API: kind ist drive#file / drive#folder (nicht file / folder), modified_time (nicht modified), starred (nicht star).
  • Das Vorhandensein von Feldern ist nicht garantiert. params fehlt oder ist unvollständig für Ordner und Nicht-Medien-Dateien; medias ist oft [], bis der Server die Transcodierung abgeschlossen hat. Absichern mit select(.params.duration != null) oder // "0"-Standardwerten.
  • Filtern Sie die Roh-Ausgabe nicht nach file_category und verlassen Sie sich auch nicht auf mime_type. Die API lässt file_category selbst bei Videos häufig weg (die reduzierte ls -F json-Form leitet es ab), und mime_type wird bei einem guten Teil der Mediendateien als "" zurückgegeben, sodass sowohl select(.file_category == "video") als auch select(.mime_type | startswith("video")) echte Videos stillschweigend ausschließen. Der zuverlässige Videotest in der Roh-Ausgabe ist das Vorhandensein von params.duration.

Rezepte:

# Videos länger als eine Stunde (EIN API-Aufruf – nie `get` über einen Ordner schleifen lassen)
pikpak ls --raw | jq -r '.files[] | select((.params.duration // "0" | tonumber) > 3600) | "\(.name)\t\(.params.duration)s"'

# 4K-Dateien auf (truncated in original)

Verwandte Skills