Fork me on GitHub
Phraseanet Documentation


The essential

Phraseanet configuration is stored in config/configuration.yml. After any update, it must be recompiled with bin/console compile:configuration command.

Phraseanet configuration is stored in config/configuration.yml that is automatically generated during install.

This file is in YAML format. For performance reasons, and use opcode cache, confguration is compiled.

It must be recompiled after any update.


Configuration compilation is very easy and fast to execute. bin/console compile:configuration should be used.

bin/console compile:configuration


Here is a commented configuration file

servername: ''       # (string)  The URL from which Phraseanet is accessible

    available:                            # (array)   An array of active language codes. All languages are activated if table is empty
        - fr
        - en
    default: fr                           # (string)  The default language for the application

    maintenance: false                    # (boolean) Activation of maintenance mode

    api_require_ssl: false                # (boolean) Force SSL for Phraseanet API requests

    database:                             # (array)   DBMS configuration
        port: '3306'
        user: phraseanet
        password: phraseanet
        dbname: ab_alch_phraseavm
        driver: pdo_mysql
        charset: UTF8

    database-test:                        # (array)   Configuration for tests (developers only)
        driver: pdo_sqlite
        path: /tmp/db.sqlite
        charset: UTF8

    cache:                                # (array)   Configuration for cache services
        type: MemcacheCache
            host: localhost
            port: 11211

    opcodecache:                          # (array)   Opcode cache service configuration
        type: ArrayCache
        options: {  }

    search-engine:                        # (array)   Elasticsearch configuration
        type: elasticsearch               # (string)  Must be elasticsearch
            port: 9200
            index: phraseanet_86a108b98a5aa92431bf94a42e8d3d3f
            shards: 3
            replicas: 0
            minScore: 2
            highlight: false
            maxResultWindow: 500000
            populate_order: RECORD_ID
            populate_direction: DESC
            activeTab: '#elastic-search'  # (string)    Name of the active tab for the Search engine parameter section
            base_aggregate_limit: 10      # (integer)   Parameter setting of the "Base" facet with 10 values
            collection_aggregate_limit: 10# (integer)   Parameter setting for the "Collection" facet with 10 values
            doctype_aggregate_limit: 10   # (integer)   Parameter setting for the "Document type" facet with 10 values
            camera_model_aggregate_limit: 0
            iso_aggregate_limit: 0
            aperture_aggregate_limit: 0
            shutterspeed_aggregate_limit: 0
            flashfired_aggregate_limit: 0
            framerate_aggregate_limit: 0
            audiosamplerate_aggregate_limit: 0
            videocodec_aggregate_limit: 0
            audiocodec_aggregate_limit: 0
            orientation_aggregate_limit: 0
            colorspace_aggregate_limit: 0
            mimetype_aggregate_limit: 0

    key: 86a108b98a5aa92431bf94a42e8d3d3f # (string)  Application key

            enabled: true                 # (boolean) Enable logs for file system
            max-files: 10                 # (integer) The maximum number of log files to keep
            level: INFO                   # (string)  The minimum log level
        enabled: true
        status: started
            protocol: tcp
            port: 6660
            linger: 500

    storage:                              # (array)   Configuration for storage paths
        cache: /var/www/Phraseanet/cache
        log: /var/www/Phraseanet/logs
        download: /var/www/Phraseanet/tmp/download                   # (string)  The directory for storing files for download
        lazaret: /var/www/Phraseanet/tmp/lazaret                     # (string)  The quarantined files storage directory
        caption: /var/www/Phraseanet/tmp/caption                     # (string)  The directory for storing items displayed when hovering over a recording
        subdefs: /var/www/phrasea_datas/                             # (string)  The generic storage directory for the sub-definition files

    binaries:                             # (array)   Path for reaching external binaries
        php_binary: /usr/bin/php
        phraseanet_indexer: /usr/local/bin/phraseanet_indexer
        swf_extract_binary: /usr/local/bin/swfextract
        pdf2swf_binary: /usr/local/bin/pdf2swf
        swf_render_binary: /usr/local/bin/swfrender
        unoconv_binary: /usr/bin/unoconv
        ffmpeg_binary: /usr/bin/ffmpeg
        mp4box_binary: /usr/bin/MP4Box
        pdftotext_binary: /usr/bin/pdftotext
        recess_binary: /usr/local/bin/recess

    bridge:                               # (array)   Configuration for Phraseanet Bridge (deprecated)
            enabled: false
            client_id: ''
            client_secret: ''
            developer_key: ''
            enabled: false
            client_id: ''
            client_secret: ''
            enabled: false
            client_id: ''
            client_secret: ''

trusted-proxies: {  }                     # (array)   Trusted proxies configuration

    allowed-ips: {  }

border-manager:                           # (array)   Configuration for Phraseanet border-manager service
    enabled: true                         # (boolean) Enable Phraseanet border-manager
            type: Checker\Sha256          # (array)   Check duplicated files by checksum verification
            enabled: true
            type: Checker\UUID            # (array)   Check duplicated files by UUID embedded metadata
            enabled: true
            type: Checker\Colorspace      # (array)   Check files by ICC integrated profile
            enabled: false
                    - cmyk
                    - grayscale
                    - rgb
            type: Checker\Dimension       # (array)   Check for minimum amount of pixels requirement
            enabled: false
                width: 80
                height: 160
            type: Checker\Extension       # (array)   Check for listed file extension compliance
            enabled: false
                    - jpg
                    - jpeg
                    - bmp
                    - tif
                    - gif
                    - png
                    - pdf
                    - doc
                    - odt
                    - mpg
                    - mpeg
                    - mov
                    - avi
                    - xls
                    - flv
                    - mp3
                    - mp2
            type: Checker\Filename        # (array)   Check duplicated files by filename verification
            enabled: false
                sensitive: true
            type: Checker\MediaType       # (array)   Check files by Phraseanet document type
            enabled: false
                    - Audio
                    - Document
                    - Flash
                    - Image
                    - Video

authentication:                           # (array)   Authentication configuration
        templates: {  }                   # (string)  Name of the rights model applied when self-registration is activated
        enabled: true
        trials-before-display: 9
    providers:                            # (array)   Configuration of authentication by third-party services (to be tested)
        facebook:                         # (array)   Configuration of authentication by Facebook (to be tested)
            enabled: false                # (boolean) Enables or disables authentication by Facebook provider
                app-id: ''                # (string)  App-id (id) Facebook
                secret: ''                # (string)  Secret (secret) Facebook
        twitter:                          # (array)   Configuration of authentication by Twitter (to be tested)
            enabled: false
                consumer-key: ''
                consumer-secret: ''
        google-plus:                      # (array)   Configuration of authentication by Google-plus (tested and OK)
            enabled: false
                client-id: ''
                client-secret: ''
        github:                           # (array)   Configuration of authentication by Github (tested and OK)
            enabled: false
                client-id: ''
                client-secret: ''
        viadeo:                           # (array)   Viadeo authentication configuration is deprecated
            enabled: false
                client-id: ''
                client-secret: ''
        linkedin:                         # (array)   Configuration of authentication by linkedin (to be tested)
            enabled: false
                client-id: ''
                client-secret: ''

registration-fields:                      # (array)   Configuration of optional fields available on the registration form when activated
        name: firstname
        required: true
        name: lastname
        required: true
        name: geonameid
        required: true
        name: company
        required: true

xsendfile:                              # (array)   Sendfile (Nginx) / XSendFile (Apache) configuration
    enabled: false                      # (array)   Enable or disable Sendfile
    type: nginx                         # (string)  Type XSendFile (`nginx` ou `apache`)
    mapping: {  }                       # (array)   Directories mapping (please see :ref:`Apache<apache-xsendfile>` and :ref:`Nginx<nginx-sendfile>`)

plugins: {  }                           # (array)   Configuration for :doc:`plugins <Phraseanet Plugins>`.

    enabled: false
    type: null
    mapping: {  }

    enabled: false                      # (boolean) Enable CORS over Phraseanet API
    allow_credentials: false            # (boolean) Include cookies in CORS requests
    allow_origin: {  }                  # (array)   List of authorized domains to send requests on Phraseanet API
                                        #           '*' to allow all
    allow_headers: {  }                 # (array)   List of supported headers by the server
    allow_methods: {'GET', 'POST', 'PUT'}                            # (array)   List of supported HTTP Methods by the server
    expose_headers: {  }                # (array)   List of exposed headers other than Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma
    max_age: 0                          # (integer) Allow the "preflight" response to be cached for X seconds
    hosts: {  }                         # (array)   List of domain names where CORS is activated

session:                                # (array)   Configuration for sessions
    idle: 0
    lifetime: 604800

crossdomain:                            # (array)   Configuration for cross-domain
            domain: '*'
            secure: 'false'

    enabled: true                       # (boolean)  Enable static thumbnails
    type: apache                        # (string)   StaticFile type (`nginx` or `apache`)
        mount-point: /thumb
        directory: ''

registry:                               # (array)   Application settings
        title: 'Phraseanet V4.0 (VM)'   # (string)  Given name to Phraseanet instance
        keywords: null                  # (string)  META NAME="keywords" markup content
        description: null               # (string)  META NAME="description" markup content
        analytics: null
        allow-indexation: true
        home-presentation-mode: CAROUSEL
        default-subdef-url-ttl: 7200
        thesaurus: true
        stories: true
        doc-substitution: true
        thumb-substitution: true
        anonymous-report: false
        download-max-size: 120
        validation-reminder-days: 2
        validation-expiration-days: 10
        auth-required-for-export: true
        tou-validation-required-for-export: false      # (boolean)  Ask users to accept Terms of use for documents download
        export-title-choice: false                     # (boolean)  Allow users to choose given filenames when downloading
        default-export-title: title                    # (string)   Default given filenames when downloading
        social-tools: all
        enable-push-authentication: false
        force-push-authentication: false
        enable-feed-notification: true
        export-stamp-choice: false
        download-link-validity: 24      # (integer)   Validity duration of download links, in hours
        ftp-enabled: true
        ftp-user-access: true
        auto-select-collections: true
        auto-register-enabled: true
        message: 'Under maintenance'
        enabled: false
        api-enabled: true
        navigator-enabled: true
        office-enabled: true
        google-charts-enabled: true
        geonames-server: ''          # (string)   Alchemy's Geonames server URL (use null if not available)
        captchas-enabled: false
        recaptcha-public-key: ''
        recaptcha-private-key: ''
        captcha-enabled: false
        h264-streaming-enabled: false
        auth-token-directory: null
        auth-token-directory-path: null
        auth-token-passphrase: null
        php-conf-path: null
        imagine-driver: ''
        ffmpeg-threads: 2
        pdf-max-pages: 5
        min-letters-truncation: 1
        default-query: all
        default-query-type: 0
    email:                                # (array)   Optional configuration for sending e-mails, depending on context
        prefix: 'Phraseanet VM -'
        smtp-enabled: true
        smtp-auth-enabled: true
        smtp-port: '465'
        smtp-secure-mode: ssl
        smtp-password: 'mysmtppassword'
        admin-email: nobody@nodomaine
        email-optional-for-login: false
    custom-links:                         # (array)   Configuration for optional links in menu bar or help menu
            linkName: 'Phraseanet store'
            linkLanguage: fr
            linkUrl: ''
            linkLocation: help-menu
            linkOrder: 1
            linkBold: false
            linkColor: ''
            linkName: 'Phraseanet store'
            linkLanguage: en
            linkUrl: ''
            linkLocation: navigation-bar
            linkOrder: 1
            linkBold: false
            linkColor: ''

user-settings:                                 # (array)   Default values for users'preferences
    images_per_page: 60
    images_size: 200

embed_bundle:                                  # (array)     Embed_bundle configuration
        player: videojs                        # (array)     Set active player for video - videojs only
        autoplay: false                        # (boolean)   Autoplay setting for video
        video_message_start: StartOfMessage    # (string)    The field name where the start reading value (in second) is stored
        coverSubdef: previewx4                 # (string)    Cover sub-definition to be used in player
        available-speeds:                      # (array)     Set available speed in player
            - 1
            - 1.5
            - 3
        player: videojs                        # (array)     Set active player for audio
        autoplay: false                        # (boolean)   Autoplay setting for audio
        player: flexpaper
        enable-pdfjs: true                     # (boolean)   Use pdfjs as PDF viewer for PDFs


Available languages with their respectives codes are:

  • French: fr_FR
  • English: en_GB
  • German: de_DE
  • Dutch: nl_NL

Cache services

cache and opcode-cache cache services can be configures with the following adapters:

Name Service Description Options
MemcacheCache cache Cache server using PHP memcache extension host, port
MemcachedCache cache Cache server using PHP memcached extension host, port
RedisCache Cache Cache server using PHP redis extension host, port
ApcCache opcode-cache Opcode Cache that uses PHP APC  
XcacheCache opcode-cache Opcode Cache that uses PHP Xcache  
WinCacheCache opcode-cache Opcode Cache that uses PHP WinCache  
ArrayCache cache | opcode-cache No cache  

Sessions handling

Sessions are stored on filesystem by default. It is possible to use another handling system:

Type Description Options
file Filesystem handler  
memcache Memcached server handler, use PHP memcache host, port
memcached Memcached server handler, use PHP memcached host, port
redis Redis server handler, use PHP redis host, port


Time-to-live setting (ttl) does not work with filesystem storage. In that case, use PHP gc_maxlifetime setting.

Search Engine service

Elasticsearch is the only service that can be used with Phraseanet 4.0.

Name Options
Alchemy\Phrasea\SearchEngine\Elastic\ElasticSearchEngine host, port, index

Trusted proxies

If Phraseanet is behind a reverse proxy, its address must be set as a trusted one so that users IP address will be correctly recognized.


Optional registration fields

registration-fields section allows to customize registration fields and which ones of them are required.

        name: company
        required: false
        name: firstname
        required: true
id Nom
login Login
gender Gender
firstname First name
lastname Last name
address Address
zipcode Zip Code
geonameid City
position position
company Company
job Job
tel Telephone
fax Fax

Sendfile / XSendFile Configuration

Xsendfile configuration should be handled with commanline tools. Both Nginx and Apache documentation are available.

Plugins configuration

Plugins are configured in the same file. Plugins documentation explains how to configure yours plugins.

Border Manager service configuration

Border Manager checkers are configurable. It is also possible to create your own checker.

Checker Description Options
CheckerSha256 Checks for duplicated files based on their sha256 check sum  
CheckerUUID Checks for duplicated files based on their UUID  
CheckerDimension Checks file dimension (if applicable) width : file width height : file height
CheckerExtension Checks file extension extensions : authorized file extensions
CheckerFilename Checks for duplicated files based on their filename sensitive : enable case sensitivity
CheckerMediaType Checks media type (Audio, Video...) mediatypes : authorized media types
CheckerColorspace Checks colorspace (if applicable) colorspaces : authorized colorspaces

Border manager service allow to customize mime-type detection with the extension-mapping parameter. Mime type detection can be wrong on some platforms. Use this array to force a mime-type given a file extension.

Collections restrictions

It is possible to restrict the validation constraint on a set of collections by passing a list of base_id:

        type: Border\BorderManager
            enabled: true
                    type: Checker\Sha256
                    enabled: true
                        - 4
                        - 5

Databoxes restrictions

The same restriction can be done at databoxes level:

        type: Border\BorderManager
            enabled: true
                    type: Checker\Sha256
                    enabled: true
                        - 3
                        - 7


It is not possible to restrict at databoxes and collections levels at the same time.

Implement a custom checker

Checker’s object are declared in the Alchemy\Phrasea\Border\Checker namespace. The checker has to be in this namespace and must implement Alchemy\Phrasea\Border\Checker\Checker interface.

Example of GPS based checker:

namespace Alchemy/Phrasea/Border/Checker;

use Alchemy\Phrasea\Border\File;
use Doctrine\ORM\EntityManager;
use MediaVorus\Media\DefaultMedia as Media;

class NorthPole implements Checker
    private $options;

    public function __construct(Array $options)
        $this->options = $options;

    public function check(EntityManager $em, File $file)
        $media = $file->getMedia();

        if (null !== $latitude = $media->getLatitude() && null !== $ref = $media->getLatitudeRef()) {
            if($latitude > 60 && $ref == Media::GPSREF_LATITUDE_NORTH) {
                return true;

        return false;

Enable the checker

    enabled: true
            type: Checker\NorthPole
            enabled: true

Users settings

It is possible to customize default users settings. Available parameters are:

Name Description Defaut value Available values
view Results display thumbs thumbs (thumbnail view) list (list view)
images_per_page Results quantity per page 20  
images_size Result thumbnail size 120  
editing_images_size Editing thumbnail size 134  
editing_top_box Editing top block (percentage) 30  
editing_right_box Editing right block (percentage) 48  
editing_left_box Editing left block (percentage) 33  
basket_sort_field Basket sort index name name (by name) or date (by date)
basket_sort_order Basket sort index ASC ASC (ascending) or DESC (descending)
warning_on_delete_story Alert before remove a story true true (yes) or false (no)
client_basket_status Display baskets in Classic 1 1 (yes) or 0 (no)
css Production CSS theme 000000 000000 (dark) or 959595 (bright)
advanced_search_reload Reload previous search options on Prod loading 1 1 (yes) or 0 (no)
start_page_query Default question last  
start_page Production start page QUERY PUBLI (publications) or QUERY (query) ou LAST_QUERY (last query)
rollover_thumbnail Rollover display caption caption (notice) or preview (preview)
technical_display Display technical data 1 1 (yes) or 0 (no) or group (inside the caption)
doctype_display Display a record type icon 1 1 (yes) or 0 (no)
basket_caption_display Display basket records notice 0 1 (yes) or 0 (no)
basket_status_display Display basket records status 0 1 (yes) or 0 (no)
basket_title_display Display basket records title 0 1 (yes) or 0 (no)

Session durations


Set the inactivity time (in seconds) before the user is automatically disconnected from application.

The setting “idle” has priority over “lifetime”. If “idle” is set, the option “Remember me” is not displayed on the homepage.


Checking “Remember me” on homepage allows to access the application later without authentifying again. Access is allowed for this duration (in seconds).



Boolean that triggers lazy load for thumbnails in Phraseanet production, this option is not obsolete if static file mode is enabled.


If this option is enabled, thumbnails are served as static content. Symlinks to images will be created.

    enabled: true
    type: nginx
    symlink-directory: ''

Embed bundle

Videojs audiovideo player

Phraseanet includes Videojs player for audio and video type document preview.

It can be customized in the configuration.yml file:

embed_bundle:                                  # (array)     Embed_bundle configuration
        player: videojs                        # (array)     Set active player for video - videojs only
        autoplay: false                        # (boolean)   Autoplay setting for video
        video_message_start: StartOfMessage    # (string)    The field name where the start reading value (in second) is stored
        coverSubdef: previewx4                 # (string)    Cover sub-definition to be used in player
        available-speeds:                      # (array)     Set available speed in player
            - 1
            - 1.5
            - 3
        player: videojs                        # (array)     Set active player for audio
        autoplay: false                        # (boolean)   Autoplay setting for audio


High speed playbacks increases bandwidth consumption.

Pdf.js viewer

The Pdf.js viewer can be used to display previews of PDF documents instead of the default FlexPaper viewer.

Pdf.js allows a native display of PDF files in modern browsers while default FlexPaper viewer requires Adobe Flash Player plugin to be installed, enabled as well as allowed in it.

        player: flexpaper                      # (string)    For Office document, use flexpaper or pdfjs
        enable-pdfjs: true                     # (boolean)   Use pdfjs as PDF viewer for PDFs documents


Flexpaper or Pdfjs can be used display Office based documents previews. Please set Document Preview subdef according to your choice in each databox subdef setting.