Skip to content

fxquinox

Open-source, API-first VFX production-tracking + publish/DCC platform - one canonical core that tracks the work and moves the files, with every tool talking to the same API.

Get started How it works HTTP API

The fxquinox project workspace
The project workspace: production hierarchy, tasks, statuses and a Gantt, all driven by one API.

The One Law

One canonical core + API; every surface (web UI, Qt desktop, DCC plugins, CLI) is a client of that API with zero privileged access.

Architecture

flowchart LR
  PG[("Postgres<br/>JSONB")]:::data --> CORE

  subgraph CORE["Core · FastAPI"]
    direction TB
    SE("Schema engine"):::core
    QL("Query DSL"):::core
    PUB("Publish chain"):::core
    AU("Auth"):::core
    EV("Events · WebSocket"):::core
    ME("Media"):::core
  end

  CORE --> API{{"Canonical HTTP API"}}:::api

  API --> SDK(["Python SDK<br/>fxqclient"]):::client
  API --> WEB(["Web UI<br/>React / TS"]):::client
  API --> QT(["Qt desktop"]):::client
  API --> DCC(["Houdini · Nuke"]):::client

  style CORE fill:#0a0f20,stroke:#1c2438,color:#9fb0c8

  classDef data fill:#0c2a23,stroke:#1cbc90,color:#bff3e2,stroke-width:1.5px;
  classDef core fill:#0f1a3c,stroke:#3a5bf0,color:#dbe4ff,stroke-width:1.5px;
  classDef api fill:#002fa7,stroke:#8aa0f8,color:#f4f6ff,stroke-width:1.5px;
  classDef client fill:#221a3c,stroke:#a06bff,color:#ece2ff,stroke-width:1.5px;

A metadata-driven core stores every record as JSONB and shapes it through a schema engine; an expressive query DSL, an enforced publish chain with lineage, auth, realtime events, and media all sit behind one HTTP API.

Why fxquinox

  • API-first by design

    One canonical API. The web UI, Qt desktop, DCC plugins and SDK are all clients of it - no privileged back doors.

  • Metadata-driven schema

    Entity types and fields are data, not code. Add a custom type at runtime and every client picks it up.

  • Publish chain + lineage

    Versioned outputs linked to the work that made them, with an input DAG you can walk both directions.

  • Realtime everywhere

    Mutations stream over WebSockets, so every surface stays live without polling.

  • One-command self-host

    docker compose up brings up the API, Postgres, Redis and object storage.

  • Open source

    Run it yourself, extend it, and own your pipeline data.

Where to go next

  • Getting started

    Run the backend and web UI locally in a few minutes.

  • How it works

    Entities, the schema engine, the publish chain - with diagrams.

  • HTTP API

    The canonical REST surface, rendered live from OpenAPI.

  • Python SDK

    fxqclient - the object-oriented client over the API.