Aller à la documentation
Desktop 1.0.81

API MetaGhost Desktop

API HTTP pour traiter des images et des vidéos avec vos presets enregistrés. Envoyez des fichiers, suivez les tâches et récupérez les résultats depuis tout client HTTP, script ou outil d’automatisation.

Télécharger Markdown

De la connexion au premier résultat

  1. Ouvrez MetaGhost Desktop, connectez-vous et allez dans Settings → API.
  2. Activez le serveur API, gardez l’accès distant désactivé, générez votre clé si nécessaire puis cliquez sur Apply changes. Laissez Desktop ouvert.
  3. Vérifiez que le serveur répond avec GET /api/health. Cette route indique l’état du serveur, sa version et les tâches actives, sans authentification.
PowerShell / Windows
curl.exe "http://127.0.0.1:3847/api/health"
JSON
{
  "status": "ok",
  "version": "1.0.81",
  "activeJobs": 0
}

Créez une tâche avec une requête JSON. Utilisez les chemins de l’ordinateur Desktop et votre clé API dans l’en-tête Authorization.

HTTP
POST http://127.0.0.1:3847/api/jobs
Authorization: Bearer YOUR_LOCAL_API_KEY
Content-Type: application/json

{
  "filePath": "C:\\Media\\photo.jpg",
  "outputFolder": "C:\\Media\\output",
  "batchCount": 1
}

Une réponse 202 renvoie jobId. Utilisez-le pour suivre la tâche et télécharger son résultat comme décrit dans Tâches et lots.

Téléchargez l’un des exemples complets. Ils créent une tâche locale, attendent sa fin, détectent les résultats partiels et téléchargent le premier résultat. Python nécessite la version 3.10+, JavaScript Node.js 22+. Aucun paquet supplémentaire.

PowerShell
$env:METAGHOST_API_KEY = Read-Host "MetaGhost API key"
# Replace the paths with your own files and folders.
python .\quickstart.py "C:\Media\photo.jpg" "C:\Media\output" ".\result.jpg"
# Or, with Node.js:
node .\quickstart.mjs "C:\Media\photo.jpg" "C:\Media\output" ".\result-2.jpg"

Utilisez une petite image de test vous appartenant et un nouveau dossier de sortie. Adaptez les extensions pour une vidéo. La clé API est lue depuis votre environnement et n’est pas incluse dans les exemples. Le fichier à télécharger ne doit pas déjà exister. L’attente est limitée à 10 minutes ; arrêter le script n’annule pas la tâche Desktop.

Connexion et accès

L’API fonctionne dans votre logiciel Desktop à l’adresse http://127.0.0.1:3847/api par défaut. Gardez MetaGhost ouvert et utilisez le port affiché dans Settings → API. Le traitement utilise votre logiciel Desktop et ses presets enregistrés.

HTTP
GET http://127.0.0.1:3847/api/presets
Authorization: Bearer YOUR_LOCAL_API_KEY

Toutes les routes sauf GET /api/health nécessitent la clé Bearer de Settings → API. Une clé absente ou invalide renvoie 401. Utilisez la clé API, pas le mot de passe du compte. Après génération d’une nouvelle clé et application des réglages, mettez à jour les identifiants de chaque intégration. Gardez la clé hors des URL et des configurations exportées.

Fichiers et presets

Fournissez un chemin absolu filePath pour une entrée, ou files pour plusieurs entrées. Les chemins concernent l’ordinateur Desktop et les fichiers doivent déjà exister. Utilisez un outputFolder absolu ; Desktop le crée si nécessaire. Un chemin sur une autre machine ou dans un conteneur n’est pas automatiquement accessible.

Images acceptées : JPG, JPEG, PNG, WebP, HEIC, BMP, TIFF. Vidéos acceptées : MP4, MOV, AVI, MKV, WebM, M4V. Les autres extensions sont rejetées.

Téléverser un fichier si nécessaire

POST /api/upload accepte les octets du fichier et nécessite X-Filename. Il renvoie filePath, originalName et size ; transmettez ce filePath à POST /api/jobs. Maximum : 500 Mio par fichier. Utilisez des octets bruts, pas multipart/form-data. Un téléversement trop volumineux peut fermer la connexion avant la réponse d’erreur.

PowerShell · raw bytes
curl.exe "http://127.0.0.1:3847/api/upload" `
  -H "Authorization: Bearer $env:METAGHOST_API_KEY" `
  -H "Content-Type: application/octet-stream" `
  -H "X-Filename: photo.jpg" `
  --data-binary "@C:\Media\photo.jpg"

Utiliser un preset enregistré

GET /api/presets renvoie les tableaux image et video des noms de presets enregistrés. Donnez à preset le nom exact enregistré dans Desktop. Pour un lot mixte image/vidéo, ce nom doit exister dans les deux listes. Omettez preset pour les paramètres de base. Configurez les options de traitement dans le preset Desktop ; la requête API sélectionne son nom.

JSON
{
  "filePath": "C:\\Media\\photo.jpg",
  "outputFolder": "C:\\Media\\output",
  "batchCount": 1,
  "preset": "My saved image preset"
}

Google Drive

Connectez Google Drive dans les réglages Desktop, puis vérifiez GET /api/drive/status. clientConfigured et connected doivent être true. Utilisez driveInputFolder à la place de filePath/files et/ou driveOutputFolder à la place de outputFolder. Ce sont des identifiants de dossiers accessibles au compte connecté, pas des liens de partage. Une connexion manquante renvoie 412.

JSON
{
  "driveInputFolder": "YOUR_INPUT_FOLDER_ID",
  "driveOutputFolder": "YOUR_OUTPUT_FOLDER_ID",
  "batchCount": 1
}

Les transferts Drive utilisent le réseau. Pour une sortie Drive, le traitement peut atteindre completed avant la fin du téléversement. Continuez à interroger la tâche jusqu’à la présence de drive.uploadResult ou drive.uploadError, puis examinez uploadResult.errors / uploadResult.cancelled. Récupérez les fichiers livrés sur Drive : les sorties locales temporaires peuvent déjà être supprimées et /api/download peut renvoyer 404.

Envoyer, suivre, récupérer

POST /api/jobs202 + jobIdGET /api/jobs/{jobId}GET /api/download/{jobId}
JSON
{
  "filePath": "C:\\Media\\photo.jpg",
  "outputFolder": "C:\\Media\\output",
  "batchCount": 1
}

POST renvoie 202 avec jobId, status, inputFiles, batchCount, totalOperations, skipped, position et drive. 202 signifie acceptée. Examinez skipped immédiatement. Avec une entrée Drive, inputFiles et totalOperations sont initialement null car les fichiers sont découverts ensuite.

Interrogez GET /api/jobs/{jobId} toutes les deux secondes. queued et processing sont en cours ; completed, failed et cancelled terminent le traitement. Une tâche simple expose result.outputPath ou error. Un lot expose results et errors. Un lot completed peut contenir des échecs : vérifiez errors et le nombre de résultats réussis. La 1.0.81 ne fournit pas de champ outcome.

Téléchargez une sortie locale avec GET /api/download/{jobId}?index=0. Pour un lot, index sélectionne une entrée de results à partir de zéro ; il ne correspond pas à l’index des fichiers d’entrée. Un téléchargement avant la fin renvoie 400. Une tâche, un index ou un fichier absent renvoie 404.

Ne relancez pas automatiquement la création

Le Desktop 1.0.81 ne prend pas en charge Idempotency-Key : chaque POST /api/jobs peut créer une autre tâche. Après un délai dépassé ou une réponse perdue, examinez GET /api/jobs avant de recommencer. Les exemples envoient une seule création et conservent le jobId reçu. Arrêter leur attente n’annule pas la tâche Desktop.

Annulation et historique

DELETE /api/jobs/{jobId} demande l’annulation d’une tâche en attente ou en cours. Relisez son statut : le fichier du lot en cours peut terminer et les fichiers déjà créés peuvent rester. GET /api/jobs liste jusqu’à 50 tâches récentes. Les tâches terminées deviennent éligibles au nettoyage après une heure, avec un passage toutes les dix minutes. Un redémarrage Desktop perd cet historique en mémoire. DELETE /api/jobs efface les entrées terminées.

Ce que permet l’API de la 1.0.81

Cette release expose le spoofing d’images et de vidéos par preset, les téléversements, les téléchargements locaux, la gestion des tâches et l’état de connexion Drive. Les autres outils visibles dans Desktop ne disposent pas automatiquement d’une route API. Utilisez uniquement les routes et les champs de la référence ci-dessous.

  • Une tâche est traitée à la fois, avec jusqu’à 10 tâches en attente ; une file pleine renvoie 429.
  • Gardez les requêtes JSON sous 64 Kio et les fichiers téléversés à 500 Mio maximum.
  • batchCount répète chaque fichier valide. Commencez par l’entier positif 1 et de petits lots, puis augmentez progressivement selon la capacité de votre ordinateur.
  • Cette release ne propose pas de route API pour le solde de crédits ou une estimation de coût. Choisissez et vérifiez le preset de traitement dans Desktop avant l’automatisation.

Accès réseau et automatisation

Tout client capable d’envoyer des requêtes HTTP peut utiliser cette API. Configurez l’URL de base, l’authentification Bearer, les corps JSON et les téléchargements binaires dans votre outil.

Clients locaux, conteneurs et clients distants

127.0.0.1 désigne la machine ou le conteneur qui envoie la requête. Un client sur l’ordinateur Desktop peut utiliser l’URL par défaut. Un client dans un conteneur ou sur une autre machine nécessite une adresse joignable de l’hôte Desktop ; son propre localhost ne désigne pas cet hôte.

Un service cloud ne peut pas joindre directement le localhost de votre ordinateur. Une intégration distante nécessite une connexion réseau privée et les réglages d’accès correspondants dans Desktop. Gardez le port API hors de l’Internet public. Les chemins concernent toujours l’hôte Desktop ; téléversez les octets ou utilisez Drive si le client ne partage pas son système de fichiers.

Exécution planifiée

La planification est gérée par votre application ou outil d’automatisation. Gardez Desktop ouvert, conservez chaque jobId accepté et limitez la durée du suivi. Coordonnez les exécutions simultanées avec la limite de la file. Réessayer automatiquement POST /api/jobs ou relancer un workflow entier peut créer des tâches en double.

Référence API

URL de base : http://127.0.0.1:3847/api. Dépliez une route pour ses en-têtes, paramètres, corps de requête et réponses. La spécification OpenAPI 3.1 peut être importée dans un client HTTP ou un générateur de code.

GET/health

Vérifier le Desktop 1.0.81 et les tâches actives

Sans authentification

JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Health"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/presets

Lister les noms des presets d’images et de vidéos enregistrés

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Presets"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/drive/status

Vérifier la connexion Google Drive du Desktop

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/DriveStatus"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
POST/upload

Téléverser les octets bruts d’une image ou d’une vidéo

Authorization: Bearer YOUR_LOCAL_API_KEY

Octets bruts, sans multipart. Maximum : 500 Mio (524288000 octets). Un téléversement trop volumineux ou une erreur d’écriture peut fermer la connexion avant la réception d’une erreur JSON. La 1.0.81 ne garantit pas la conservation des fichiers téléversés.

JSON
{
  "parameters": [
    {
      "name": "X-Filename",
      "in": "header",
      "required": true,
      "schema": {
        "type": "string",
        "description": "Nom se terminant par .jpg, .jpeg, .png, .webp, .heic, .bmp, .tiff, .mp4, .mov, .avi, .mkv, .webm ou .m4v."
      }
    }
  ]
}
JSON
{
  "requestBody": {
    "required": true,
    "content": {
      "application/octet-stream": {
        "schema": {
          "type": "string",
          "format": "binary"
        }
      }
    }
  }
}
JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Upload"
          }
        }
      }
    },
    "400": {
      "description": "Requête invalide ou état de la tâche incompatible",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "500": {
      "description": "Erreur interne du serveur ou erreur d’écriture pendant le téléversement",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
POST/jobs

Créer une tâche de spoofing d’images ou de vidéos

Authorization: Bearer YOUR_LOCAL_API_KEY

Chaque POST crée une nouvelle tâche. Aucune relance automatique ni prise en charge d’Idempotency-Key. Limite du corps JSON : 64 Kio ; un dépassement peut fermer la connexion. Les fichiers locaux sont vérifiés avant l’acceptation ; les fichiers Drive sont découverts ensuite.

JSON
{
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SpoofJobRequest"
        },
        "example": {
          "filePath": "C:\\Media\\photo.jpg",
          "outputFolder": "C:\\Media\\output",
          "batchCount": 1
        }
      }
    }
  }
}
JSON
{
  "responses": {
    "202": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/AcceptedJob"
          }
        }
      }
    },
    "400": {
      "description": "Requête invalide ou état de la tâche incompatible",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "412": {
      "description": "Google Drive n’est pas configuré ou connecté",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "429": {
      "description": "Dix tâches sont déjà en attente dans la file",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "500": {
      "description": "Erreur interne du serveur ou erreur d’écriture pendant le téléversement",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/jobs

Lister les 50 tâches les plus récentes et l’état de la file

Authorization: Bearer YOUR_LOCAL_API_KEY

Historique conservé en mémoire. Les tâches terminées, échouées et annulées deviennent éligibles au nettoyage une heure après completedAt, ou createdAt si completedAt est absent. Le nettoyage s’exécute toutes les dix minutes. Un redémarrage du Desktop efface cet historique.

JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/JobList"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
DELETE/jobs

Effacer les tâches terminées de l’historique en mémoire

Authorization: Bearer YOUR_LOCAL_API_KEY

Efface l’historique terminé. Cette opération modifie les données.

JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "cleared": {
                "type": "integer"
              }
            },
            "required": [
              "cleared"
            ]
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/jobs/{jobId}

Consulter la progression et les résultats d’une tâche

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "parameters": [
    {
      "name": "jobId",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "pattern": "^[a-zA-Z0-9_-]+$"
      }
    }
  ]
}
JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Job"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "404": {
      "description": "Tâche inconnue, sortie manquante ou route non prise en charge",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
DELETE/jobs/{jobId}

Demander l’annulation d’une tâche en attente ou en cours

Authorization: Bearer YOUR_LOCAL_API_KEY

Vérifiez à nouveau le statut après l’annulation. Les fichiers déjà produits peuvent rester. Le traitement du fichier en cours dans le lot peut se terminer avant l’arrêt de la file.

Annule la tâche sélectionnée.

JSON
{
  "parameters": [
    {
      "name": "jobId",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "pattern": "^[a-zA-Z0-9_-]+$"
      }
    }
  ]
}
JSON
{
  "responses": {
    "200": {
      "description": "Réponse réussie",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "jobId": {
                "type": "string"
              },
              "status": {
                "const": "cancelled"
              }
            },
            "required": [
              "jobId",
              "status"
            ]
          }
        }
      }
    },
    "400": {
      "description": "Requête invalide ou état de la tâche incompatible",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide ou manquante",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "404": {
      "description": "Tâche inconnue, sortie manquante ou route non prise en charge",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/download/{jobId}

Télécharger une sortie locale existante d’une tâche terminée

Authorization: Bearer YOUR_LOCAL_API_KEY

Pour les lots, index désigne une entrée du tableau des résultats réussis, pas du tableau des fichiers d’entrée. Une sortie temporaire livrée sur Drive peut déjà avoir été supprimée et renvoyer 404. Une tâche non terminée renvoie 400.

JSON
{
  "parameters": [
    {
      "name": "jobId",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "pattern": "^[a-zA-Z0-9_-]+$"
      }
    },
    {
      "name": "index",
      "in": "query",
      "schema": {
        "type": "integer",
        "minimum": 0,
        "default": 0
      }
    }
  ]
}
JSON
{
  "responses": {
    "200": {
      "description": "Octets du fichier de sortie ; Content-Type correspond à l’extension du fichier et Content-Disposition contient son nom.",
      "content": {
        "application/octet-stream": {
          "schema": {
            "type": "string",
            "format": "binary"
          }
        }
      }
    },
    "400": {
      "description": "La tâche n’est pas terminée",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "401": {
      "description": "Clé API invalide",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "404": {
      "description": "Tâche, index ou fichier de sortie inconnu",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
Tous les schémas et paramètres réutilisables
#/components/securitySchemes
LocalApiKey
JSON
{
  "type": "http",
  "scheme": "bearer",
  "description": "Clé générée dans les réglages du Desktop > API."
}
#/components/schemas
Error
JSON
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "skipped": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/FileError"
      }
    }
  },
  "required": [
    "error"
  ]
}
FileError
JSON
{
  "type": "object",
  "properties": {
    "file": {
      "type": "string"
    },
    "error": {
      "type": "string"
    }
  },
  "required": [
    "file",
    "error"
  ]
}
Health
JSON
{
  "type": "object",
  "properties": {
    "status": {
      "const": "ok"
    },
    "version": {
      "const": "1.0.81"
    },
    "activeJobs": {
      "type": "integer",
      "minimum": 0
    }
  },
  "required": [
    "status",
    "version",
    "activeJobs"
  ]
}
Presets
JSON
{
  "type": "object",
  "properties": {
    "image": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "video": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "image",
    "video"
  ]
}
DriveStatus
JSON
{
  "type": "object",
  "properties": {
    "clientConfigured": {
      "type": "boolean"
    },
    "connected": {
      "type": "boolean"
    },
    "email": {
      "type": [
        "string",
        "null"
      ]
    },
    "scope": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "clientConfigured",
    "connected",
    "email",
    "scope"
  ]
}
DriveUploadResult
JSON
{
  "type": "object",
  "properties": {
    "uploaded": {
      "type": "integer",
      "minimum": 0
    },
    "errors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "error": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "error"
        ]
      }
    },
    "cancelled": {
      "type": "boolean"
    }
  },
  "required": [
    "uploaded",
    "errors"
  ]
}
Upload
JSON
{
  "type": "object",
  "properties": {
    "filePath": {
      "type": "string",
      "description": "Chemin absolu sur l’ordinateur où le Desktop est installé."
    },
    "originalName": {
      "type": "string"
    },
    "size": {
      "type": "integer",
      "minimum": 1
    }
  },
  "required": [
    "filePath",
    "originalName",
    "size"
  ]
}
SpoofJobRequest
JSON
{
  "type": "object",
  "properties": {
    "filePath": {
      "type": "string",
      "description": "Chemin absolu vers une image ou une vidéo existante."
    },
    "files": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Chemin absolu vers une image ou une vidéo existante."
      }
    },
    "driveInputFolder": {
      "type": "string",
      "description": "Identifiant d’un dossier accessible au compte Drive connecté au Desktop."
    },
    "outputFolder": {
      "type": "string",
      "description": "Chemin absolu du dossier de sortie local ; le dossier est créé s’il n’existe pas."
    },
    "driveOutputFolder": {
      "type": "string",
      "description": "Identifiant du dossier de destination accessible au compte Drive du Desktop."
    },
    "preset": {
      "type": "string",
      "description": "Nom exact du preset enregistré pour chaque type de média d’entrée. Omettez ce champ pour utiliser les paramètres de base."
    },
    "batchCount": {
      "type": "integer",
      "minimum": 1,
      "default": 1,
      "description": "Nombre de variantes par fichier d’entrée valide. Envoyez un entier positif et utilisez de petits lots ; augmentez progressivement selon la capacité de votre ordinateur."
    }
  },
  "description": "Spoofing d’images et de vidéos par preset uniquement. Choisissez filePath, files OU driveInputFolder, et outputFolder OU driveOutputFolder. Aucun sélecteur d’opération ni prise en charge de l’idempotence. La 1.0.81 ignore les champs supplémentaires inconnus ; ils ne permettent pas d’activer un autre outil.",
  "allOf": [
    {
      "oneOf": [
        {
          "anyOf": [
            {
              "required": [
                "filePath"
              ]
            },
            {
              "required": [
                "files"
              ]
            }
          ]
        },
        {
          "required": [
            "driveInputFolder"
          ]
        }
      ]
    },
    {
      "oneOf": [
        {
          "required": [
            "outputFolder"
          ]
        },
        {
          "required": [
            "driveOutputFolder"
          ]
        }
      ]
    }
  ]
}
AcceptedJob
JSON
{
  "type": "object",
  "properties": {
    "jobId": {
      "type": "string"
    },
    "status": {
      "const": "queued"
    },
    "inputFiles": {
      "type": [
        "integer",
        "null"
      ]
    },
    "batchCount": {
      "type": "integer"
    },
    "totalOperations": {
      "type": [
        "integer",
        "null"
      ]
    },
    "skipped": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/FileError"
      }
    },
    "position": {
      "type": "integer",
      "description": "Peut être égal à zéro lorsque le traitement a déjà commencé."
    },
    "drive": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "object",
          "properties": {
            "input": {
              "type": "boolean"
            },
            "output": {
              "type": "boolean"
            }
          }
        }
      ]
    }
  },
  "required": [
    "jobId",
    "status",
    "inputFiles",
    "batchCount",
    "totalOperations",
    "skipped",
    "position",
    "drive"
  ]
}
Output
JSON
{
  "type": "object",
  "properties": {
    "outputPath": {
      "type": "string"
    }
  },
  "required": [
    "outputPath"
  ]
}
BatchOutput
JSON
{
  "type": "object",
  "properties": {
    "file": {
      "type": "string"
    },
    "outputPath": {
      "type": "string"
    }
  },
  "required": [
    "file",
    "outputPath"
  ]
}
Progress
JSON
{
  "type": "object",
  "properties": {
    "phase": {
      "type": "string"
    },
    "phaseProgress": {
      "type": "number"
    },
    "totalProgress": {
      "type": "number"
    },
    "currentFile": {
      "type": "integer"
    },
    "totalFiles": {
      "type": [
        "integer",
        "null"
      ]
    },
    "completedFiles": {
      "type": "integer"
    },
    "fileName": {
      "type": "string"
    }
  }
}
Job
JSON
{
  "type": "object",
  "properties": {
    "jobId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "queued",
        "processing",
        "completed",
        "failed",
        "cancelled"
      ]
    },
    "type": {
      "type": "string",
      "enum": [
        "single",
        "batch"
      ]
    },
    "preset": {
      "type": "string"
    },
    "progress": {
      "$ref": "#/components/schemas/Progress"
    },
    "createdAt": {
      "type": "string"
    },
    "startedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "completedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "fileType": {
      "type": "string"
    },
    "fileName": {
      "type": "string"
    },
    "totalFiles": {
      "type": "integer"
    },
    "result": {
      "$ref": "#/components/schemas/Output"
    },
    "results": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BatchOutput"
      }
    },
    "error": {
      "type": "string",
      "description": "Échec d’une tâche simple."
    },
    "errors": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/FileError"
      }
    },
    "drive": {
      "type": "object",
      "properties": {
        "inputFolderId": {
          "type": [
            "string",
            "null"
          ]
        },
        "outputFolderId": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadResult": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/components/schemas/DriveUploadResult"
            }
          ]
        },
        "uploadError": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    }
  },
  "required": [
    "jobId",
    "status",
    "type",
    "preset",
    "progress",
    "createdAt",
    "startedAt",
    "completedAt"
  ],
  "description": "Un lot completed peut contenir des erreurs ou n’avoir aucun résultat réussi. Vérifiez errors et results, ainsi que skipped dans la réponse au POST. Pour une sortie Drive, le traitement peut atteindre completed avant la fin du téléversement ; continuez à interroger la tâche jusqu’à la présence de uploadResult ou uploadError, puis examinez uploadResult.errors et uploadResult.cancelled. Cette version ne fournit pas de champ outcome."
}
JobList
JSON
{
  "type": "object",
  "properties": {
    "jobs": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Job"
      }
    },
    "queueLength": {
      "type": "integer"
    },
    "processing": {
      "type": "boolean"
    }
  },
  "required": [
    "jobs",
    "queueLength",
    "processing"
  ]
}

Si quelque chose ne fonctionne pas

Connection refused

Ouvrez Desktop, activez l’API, appliquez les réglages et vérifiez le port. Gardez Desktop ouvert.

401

Vérifiez la clé API Bearer et mettez vos scripts à jour après sa régénération.

400

Lisez error et skipped. Vérifiez les chemins absolus, noms de presets, extensions et état de la tâche.

404

Vérifiez la route /api, le jobId et l’index de results. L’historique est temporaire et les fichiers peuvent ne plus exister localement.

412

Connectez Google Drive dans les réglages Desktop et vérifiez GET /api/drive/status.

429

La file contient déjà 10 tâches en attente. Consultez GET /api/jobs et attendez avant une autre création.

Connexion fermée / 500

Un corps de requête ou fichier trop volumineux, ou une erreur disque, peut fermer la connexion. Respectez les limites et vérifiez les droits du dossier de sortie. Consultez l’historique avant de relancer une création dont la réponse a été perdue.

Besoin d’aide pour votre workflow ?

Le support MetaGhost peut vous aider.

Support