Files
freepik-api/README.md
Sebastian Krüger 99c24adfe8 Initial commit: Freepik REST API
FastAPI async wrapper for Freepik cloud AI API supporting image generation
(Mystic, Flux Dev/Pro, SeedReam), video generation (Kling, MiniMax, Seedance),
image editing (upscale, relight, style transfer, expand, inpaint), and
utilities (background removal, classifier, audio isolation). Includes async
task tracking with polling, Docker containerization, and Gitea CI/CD workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 14:07:36 +01:00

5.3 KiB

Freepik API

REST API wrapping Freepik's cloud AI API for image generation, video generation, image editing, and media processing.

Containerized and deployed via Gitea CI/CD. Designed to be orchestrated alongside facefusion-api — both share the same project patterns (FastAPI, Pydantic, router/schema/service structure).

Quick Start

# Copy and configure environment
cp .env.example .env
# Edit .env and set FP_FREEPIK_API_KEY

# Build and run
docker compose up --build

# Verify
curl http://localhost:8001/api/v1/health
curl http://localhost:8001/api/v1/system

API Endpoints

Image Generation

Endpoint Model Description
POST /api/v1/generate/image/mystic Mystic Freepik's ultra-realistic model
POST /api/v1/generate/image/flux-dev Flux Dev Black Forest Labs Flux Dev
POST /api/v1/generate/image/flux-pro Flux Pro 1.1 Black Forest Labs Flux Pro
POST /api/v1/generate/image/seedream SeedReam 4 ByteDance SeedReam

All image generation endpoints accept ?sync=true to block until the result is ready.

Video Generation

Endpoint Model Description
POST /api/v1/generate/video/kling Kling O1 Pro 1080p, 5/10s clips
POST /api/v1/generate/video/minimax MiniMax Hailuo 768p video
POST /api/v1/generate/video/seedance Seedance 1.0 ByteDance Seedance

Video endpoints always return async task IDs (generation takes 1-5 min).

Image Editing

Endpoint Description
POST /api/v1/edit/upscale/creative AI creative upscale with prompt guidance
POST /api/v1/edit/upscale/precision Precision 2x/4x upscale
POST /api/v1/edit/relight AI relighting
POST /api/v1/edit/style-transfer Style transfer from reference image
POST /api/v1/edit/expand Outpainting / image expansion
POST /api/v1/edit/inpaint AI inpainting with mask and prompt

Utilities

Endpoint Description
POST /api/v1/util/remove-background Background removal (sync)
POST /api/v1/util/classify AI-generated image classifier
POST /api/v1/util/audio-isolate Audio track isolation
POST /api/v1/generate/icon Text-to-icon generation

Task Management

Endpoint Description
GET /api/v1/tasks List tracked tasks
GET /api/v1/tasks/{id} Get task status
GET /api/v1/tasks/{id}/result Download task result
DELETE /api/v1/tasks/{id} Delete task and cleanup files

System

Endpoint Description
GET /api/v1/health Health check
GET /api/v1/system API key validity, active tasks, memory

Usage Examples

Generate an image (async)

curl -X POST http://localhost:8001/api/v1/generate/image/flux-dev \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "a cat wearing a top hat, oil painting"}'

# Response: {"task_id": "abc-123", "status": "pending", ...}

# Poll until complete
curl http://localhost:8001/api/v1/tasks/abc-123

# Download result
curl http://localhost:8001/api/v1/tasks/abc-123/result -o result.png

Generate an image (sync)

curl -X POST 'http://localhost:8001/api/v1/generate/image/mystic?sync=true' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "mountain landscape at sunset"}' \
  -o result.png

Remove background

curl -X POST http://localhost:8001/api/v1/util/remove-background \
  -H 'Content-Type: application/json' \
  -d '{"image": "<base64-encoded-image>"}'

Environment Variables

All prefixed with FP_:

Variable Default Description
FP_FREEPIK_API_KEY (required) Freepik API key
FP_FREEPIK_BASE_URL https://api.freepik.com API base URL
FP_OUTPUT_DIR /data/outputs Result file storage
FP_TEMP_DIR /data/temp Temporary file storage
FP_MAX_UPLOAD_SIZE_MB 50 Max upload size
FP_TASK_POLL_INTERVAL_SECONDS 5 Polling interval for async tasks
FP_TASK_POLL_TIMEOUT_SECONDS 600 Max polling duration (10 min)
FP_AUTO_CLEANUP_HOURS 24 Auto-delete old results after N hours
FP_WEBHOOK_SECRET (empty) Optional webhook signature verification

Production Deployment

docker compose -f docker-compose.prod.yml up -d

The production compose pulls from the Gitea container registry (dev.pivoine.art/valknar/freepik-api:latest) and uses named volumes for persistent storage.

Architecture

app/
  main.py              # FastAPI app, lifespan, httpx client lifecycle
  config.py            # Pydantic BaseSettings (FP_ env prefix)
  routers/             # API endpoint handlers
  schemas/             # Pydantic request/response models
  services/
    freepik_client.py  # httpx async client with retry on 429
    task_tracker.py    # In-memory task tracking with asyncio polling
    file_manager.py    # Download results, serve files, cleanup
    webhook.py         # Optional webhook receiver for task completion

This is a thin async HTTP client — all AI processing happens on Freepik's cloud infrastructure. No GPU or local model inference required.