PHPackages                             dkd-dobberkau/fal-photo-browser - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. dkd-dobberkau/fal-photo-browser

ActiveTypo3-cms-extension

dkd-dobberkau/fal-photo-browser
===============================

Stock photo browser for TYPO3 backend - Powered by Unsplash

1.1.1(3mo ago)023↓100%GPL-2.0-or-laterPHPPHP ^8.2

Since Jan 27Pushed 3mo agoCompare

[ Source](https://github.com/dkd-dobberkau/fal-photo-browser)[ Packagist](https://packagist.org/packages/dkd-dobberkau/fal-photo-browser)[ Docs](https://github.com/dkd-dobberkau/fal-photo-browser)[ RSS](/packages/dkd-dobberkau-fal-photo-browser/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (4)Used By (0)

FAL Photo Browser
=================

[](#fal-photo-browser)

A TYPO3 extension for searching and importing stock photos directly in the TYPO3 backend.

**Powered by [Unsplash](https://unsplash.com)**

Features
--------

[](#features)

- **Backend Module**: Dedicated module under "Media" for browsing and importing photos
- **Advanced Search**: Filter by text, orientation (landscape, portrait, square), and color
- **Local Import**: Downloads images to your fileadmin for GDPR compliance and performance
- **Automatic Metadata**: Populates title, description, alt text, copyright, and photographer info
- **Download Tracking**: Complies with Unsplash API guidelines by tracking downloads
- **Custom Metadata Fields**: Stores Unsplash photo ID, URL, and photographer URL for reference

Requirements
------------

[](#requirements)

- TYPO3 v14.0+
- PHP 8.2+
- Unsplash API Access Key ([Get one here](https://unsplash.com/developers))

Installation
------------

[](#installation)

### Via Composer (recommended)

[](#via-composer-recommended)

```
composer require dkd-dobberkau/fal-photo-browser
```

### Manual Installation

[](#manual-installation)

1. Download the extension
2. Place it in `packages/dkd_fal_photo_browser/`
3. Add the path repository to your `composer.json`:

```
{
    "repositories": [
        {
            "type": "path",
            "url": "packages/*"
        }
    ]
}
```

4. Run `composer require dkd-dobberkau/fal-photo-browser:@dev`

### Activate Extension

[](#activate-extension)

```
vendor/bin/typo3 extension:setup --extension=dkd_fal_photo_browser
```

Configuration
-------------

[](#configuration)

### API Key Setup

[](#api-key-setup)

Set the `UNSPLASH_ACCESS_KEY` environment variable with your Unsplash API key.

#### DDEV

[](#ddev)

Add to `.ddev/config.yaml`:

```
web_environment:
  - UNSPLASH_ACCESS_KEY=your_access_key_here
```

#### Apache/Nginx

[](#apachenginx)

```
SetEnv UNSPLASH_ACCESS_KEY your_access_key_here
```

```
fastcgi_param UNSPLASH_ACCESS_KEY your_access_key_here;
```

#### Docker

[](#docker)

```
environment:
  - UNSPLASH_ACCESS_KEY=your_access_key_here
```

### Content Security Policy

[](#content-security-policy)

The extension automatically registers CSP rules to allow loading thumbnail images from `images.unsplash.com` in the backend.

Usage
-----

[](#usage)

1. Navigate to **Media &gt; Photo Browser** in the TYPO3 backend
2. Enter a search term (e.g., "mountains", "office", "technology")
3. Optionally filter by orientation or color
4. Click **Import** on any photo to download it

Imported images are stored in `fileadmin/unsplash/YYYY/MM/` with full metadata including:

- Title and description
- Alt text
- Photographer name and URL
- Copyright notice
- Original Unsplash URL

File Structure
--------------

[](#file-structure)

```
dkd_fal_photo_browser/
├── Classes/
│   ├── Controller/
│   │   └── PhotoBrowserController.php
│   ├── Domain/
│   │   └── Dto/
│   │       └── UnsplashPhoto.php
│   └── Service/
│       ├── FileImportService.php
│       └── UnsplashApiService.php
├── Configuration/
│   ├── Backend/
│   │   ├── AjaxRoutes.php
│   │   └── Modules.php
│   ├── ContentSecurityPolicies.php
│   ├── Icons.php
│   ├── Services.yaml
│   └── TCA/
│       └── Overrides/
│           └── sys_file_metadata.php
├── Resources/
│   ├── Private/
│   │   ├── Language/
│   │   │   └── locallang_mod.xlf
│   │   └── Templates/
│   │       └── Backend/
│   │           └── Index.html
│   └── Public/
│       ├── Css/
│       │   └── backend.css
│       ├── Icons/
│       │   └── module-falphotobrowser.svg
│       └── JavaScript/
│           └── photo-browser.js
├── composer.json
├── ext_emconf.php
└── ext_tables.sql

```

Metadata Fields
---------------

[](#metadata-fields)

The extension adds custom fields to `sys_file_metadata`:

FieldDescription`unsplash_photo_id`Original Unsplash photo ID`unsplash_photo_url`Link to photo on Unsplash`unsplash_photographer_url`Link to photographer's profileThese fields appear in a dedicated "Unsplash" tab when editing file metadata.

API Compliance
--------------

[](#api-compliance)

This extension follows [Unsplash API Guidelines](https://help.unsplash.com/en/articles/2511245-unsplash-api-guidelines):

- Downloads are tracked via the API (required)
- Photographer attribution is stored in metadata
- "Powered by Unsplash" attribution in the UI
- Images are hotlink-free (downloaded locally)

License
-------

[](#license)

GPL-2.0-or-later

Credits
-------

[](#credits)

- Photos provided by [Unsplash](https://unsplash.com)
- Built for TYPO3 CMS

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance82

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~8 days

Total

3

Last Release

90d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9f2f928f904bb9015a910d803edc7f9aa8c67523f1f4a2c1dbf84d31c1603060?d=identicon)[olivierdo](/maintainers/olivierdo)

---

Top Contributors

[![dkd-dobberkau](https://avatars.githubusercontent.com/u/9196831?v=4)](https://github.com/dkd-dobberkau "dkd-dobberkau (25 commits)")

### Embed Badge

![Health badge](/badges/dkd-dobberkau-fal-photo-browser/health.svg)

```
[![Health](https://phpackages.com/badges/dkd-dobberkau-fal-photo-browser/health.svg)](https://phpackages.com/packages/dkd-dobberkau-fal-photo-browser)
```

###  Alternatives

[fluidtypo3/vhs

This is a collection of ViewHelpers for performing rendering tasks that are not natively provided by TYPO3's Fluid templating engine.

1954.1M49](/packages/fluidtypo3-vhs)[typo3/testing-framework

The TYPO3 testing framework provides base classes for unit, functional and acceptance testing.

675.0M775](/packages/typo3-testing-framework)[netresearch/rte-ckeditor-image

Image support in CKEditor for the TYPO3 ecosystem - by Netresearch

63991.3k4](/packages/netresearch-rte-ckeditor-image)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

96374.6k23](/packages/friendsoftypo3-content-blocks)[eliashaeussler/typo3-form-consent

Extension for TYPO3 CMS that adds double opt-in functionality to EXT:form

1481.0k](/packages/eliashaeussler-typo3-form-consent)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
