Skip to content
alchemy-frPublic

About

The open-source DAM for modern organizations

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

26 stars

Watchers

5 watching

Forks

Latest commit

 

History

2,195 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Phrasea

The open-source DAM for modern organizations

Website · Documentation · Docker Hub · Helm charts · Report a bug

License: MIT Latest release Quick checks CI Last commit PRs welcome

About

Phrasea is an open-source Digital Asset Management (DAM) platform for organizations that need control over their digital assets. It offers fine-grained permissions for users and groups, integrations with external tools and AI providers, and runs as SaaS, on-premise or in hybrid mode. Phrasea is developed by Alchemy as the successor of Phraseanet.

Features

Databox: the DAM core

  • Workspaces, nested collections, stories and baskets, with access control on workspaces, collections and assets.
  • Metadata read from the source files on ingest, configurable attributes, single and batch editing, import templates.
  • Renditions defined per workspace, file versions, file analyzers, and workflows run on ingest.
  • Collaboration: sharing links (permanent or time-limited), visual annotations, discussions with mentions, notifications.

Search

  • Search backed by Elasticsearch: full text, facets, sorting, suggestions, saved searches.
  • Conditions written in AQL, the Asset Query Language, shared by the API, saved searches and the condition builder.
  • Results laid out on a map by geo point attributes (map).

Expose: publication

  • Publications of assets on the web, with download, gallery and lightbox layouts.
  • Protection by password or authentication, terms of use, direct URLs and slugs.
  • Publications synchronized from Databox baskets.

Uploader: ingestion

  • Upload by file selector, drag and drop, clipboard or URL, with multipart upload of large files.
  • Targets per user group, each with its metadata form described in JSON Schema (form configuration).
  • Delivery of the uploaded batches to Databox, to Phraseanet (push or pull mode) or to a third-party endpoint.

Dashboard

  • A single entry point listing the Phrasea services available to the user.

Integrations

Databox integrations run in workflows or from user actions:

  • AWS Rekognition, AWS Transcribe, AWS Translate
  • Happyscribe (transcription and subtitles)
  • Remove.bg (background removal)
  • Toast UI Photo Editor
  • Phraseanet renditions synchronization
  • Moderation, watermark, Blurhash, renditions, file analyzers
  • Outbound webhooks

Architecture

Each application is a Symfony API plus a React client. Long-running work goes through RabbitMQ to Symfony Messenger workers.

flowchart LR
    browser([Browser]) --> traefik[Traefik]

    subgraph clients[Web clients]
        dashboard[Dashboard]
        databoxClient[Databox client]
        exposeClient[Expose client]
        uploaderClient[Uploader client]
    end

    subgraph apis[Symfony APIs]
        databoxApi[Databox API]
        exposeApi[Expose API]
        uploaderApi[Uploader API]
    end

    traefik --> clients
    traefik --> apis
    traefik --> keycloak[Keycloak]
    traefik --> sockudo[Sockudo WebSocket]

    apis -- auth --> keycloak
    apis --> pg[(PostgreSQL)]
    apis --> redis[(Redis)]
    apis --> s3[(MinIO / S3)]
    apis --> rabbitmq[[RabbitMQ]]
    apis --> report[Report API]
    databoxApi --> es[(Elasticsearch)]
    databoxApi --> sockudo

    rabbitmq --> workers[Messenger workers]
    workers --> pg
    workers --> s3

    report --> pg
    keycloak --> pg

    indexer[Databox indexer] -- reads sources --> s3
    indexer -- creates assets --> databoxApi
Loading

A detailed diagram is available in doc/tech/Deployment/technical-architecture.svg.

Quick start

This starts the whole stack locally with Docker Compose, on the default domain phrasea.local.

Prerequisites:

  • Linux with Docker 28.5.2+ and Docker Compose 2.40.3+
  • About 6 CPU cores and 16 GB of RAM (indicative, see prerequisites)
  • mkcert for local HTTPS certificates
  • Ports 80 and 443 free (see Changing ports)

Clone the repository:

git clone https://github.com/alchemy-fr/phrasea.git
cd phrasea

Change every default password or secret of .env (their values start with __CHANGE_ME_), by overriding them in a .env.local file at the root of the project. Then define the dc function in your ~/.bashrc or ~/.zshrc, so that Docker Compose loads .env.local:

function dc() {
    if [ -f .env.local ]; then
        docker compose --env-file=.env.local --env-file=.env --env-file=.env.local "$@"
    else
        docker compose "$@"
    fi
}

Create the local certificate authority (once per machine) and the certificate of *.phrasea.local:

mkcert -install
bin/dev/make-cert.sh

Add the local domains to /etc/hosts:

sudo bin/dev/append-etc-hosts.sh

Set up the databases and the initial configuration:

bin/setup.sh

Start the stack:

dc up -d

Then open:

Application URL
Dashboard https://dashboard.phrasea.local
Databox https://databox.phrasea.local
Expose https://expose.phrasea.local
Uploader https://uploader.phrasea.local
Keycloak https://keycloak.phrasea.local

Sign in with the user phrasea-admin and the password set in DEFAULT_ADMIN_PASSWORD.

The images are pulled from Docker Hub; run bin/build.sh first to build them from the sources. See the setup guide (Let's Encrypt, periodic tasks, fixtures, logs) and the development setup for the rest.

Deployment

  • Docker Compose: follow the setup guide.
  • Kubernetes: use the Helm charts.
  • Images: published on Docker Hub as alchemyfr/ps-* (ps-databox-api-php, ps-databox-client, ps-expose-api-php, ps-uploader-api-php, ps-dashboard, ps-keycloak, ps-configurator, ps-report-api, …).

Infrastructure requirements, backups and operating tasks are described in doc/tech/Deployment/.

Documentation

The documentation is published at docs.phrasea.com, built from the doc/ folder.

Topic Where
User guide doc/user/
Setup doc/tech/01_setup.md
Development doc/tech/02_dev.md
Configuration doc/tech/Configuration/
Authentication doc/tech/Authentication/
Deployment doc/tech/Deployment/
Tests and CI doc/tech/Development/ci.md

Repository layout

databox/        core DAM: api/ (Symfony), client/ (Next.js), indexer/ (Node.js)
expose/         publication: api/ (Symfony), client/ (React + Vite)
uploader/       ingestion: api/ (Symfony), client/ (React + Vite)
dashboard/      client/ only: the shell that ties the applications together
configurator/   Symfony application generating the per-tenant configuration
report/         reporting service
lib/php/        shared Symfony bundles (auth, storage, Elasticsearch, workflow, …)
lib/js/         shared React/TypeScript packages, published as @alchemy/*
bin/            setup, build, migration and test scripts
infra/          Docker images, Traefik and local stack configuration
doc/            user and technical documentation (source of docs.phrasea.com)

Tech stack

  • Back end: PHP 8.5, Symfony 8.1, API Platform 5, Doctrine ORM 3, Symfony Messenger
  • Front end: React and TypeScript; Next.js (App Router) for Databox, Vite for the other clients; pnpm workspaces and Turbo
  • Services: PostgreSQL, Elasticsearch, RabbitMQ, Redis, MinIO / S3, Keycloak, Traefik
  • Runtime: Docker Compose, or Kubernetes with Helm

Contributing

Contributions are welcome: bug reports, documentation, features and fixes. Please read the contributing guide and the code of conduct.

Security

Please do not report vulnerabilities in public issues; see the security policy.

Upgrading

Upgrade notes are in UPGRADE-5.md and UPGRADE-3.0.md; changes of each version are listed on the releases page.

License

MIT © Alchemy. See LICENSE.

About

The open-source DAM for modern organizations

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

26 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages