PHPackages                             level51/silverstripe-cloudinary - 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. [Image &amp; Media](/categories/media)
4. /
5. level51/silverstripe-cloudinary

ActiveSilverstripe-vendormodule[Image &amp; Media](/categories/media)

level51/silverstripe-cloudinary
===============================

Cloudinary image handling &amp; upload field for SilverStripe

2.0.0(2y ago)21.8k↓66.7%4MITPHPPHP &gt;=8.0CI failing

Since May 9Pushed 2y ago3 watchersCompare

[ Source](https://github.com/Level51/silverstripe-cloudinary)[ Packagist](https://packagist.org/packages/level51/silverstripe-cloudinary)[ RSS](/packages/level51-silverstripe-cloudinary/feed)WikiDiscussions develop Synced 1mo ago

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

SilverStripe Cloudinary image uploader
======================================

[](#silverstripe-cloudinary-image-uploader)

Adds a **Level51\\Cloudinary\\Image** data object and an appropriate uploader using Cloudinary's javascript upload widget.

Install
-------

[](#install)

```
composer require level51/silverstripe-cloudinary

```

Module VersionSilverstripe VersionPHP Version2.x5.x&gt;=81.x4.x&gt;=70.x3.x&gt;=5.6,&lt;7.2Setup
-----

[](#setup)

You have to define some mandatory configuration to get started:

```
Level51\Cloudinary\Cloudinary:
  cloud_name: String, mandatory
  api_key: String, mandatory
  api_secret: String, mandatory
  upload_preset: String, mandatory if unsigned, optional if signed

  # https://cloudinary.com/documentation/upload_widget#look_and_feel_customization
  theme: default 'white',

  # https://cloudinary.com/documentation/upload_widget#signed_uploads
  use_signed: true

  # https://cloudinary.com/documentation/admin_api#delete_all_or_selected_resources
  image_type: 'private'

  # Whether to show/hide the remove button
  show_remove: false

  # Whether to append the g_custom option or not
  use_custom_gravity: true

  # Allowed file extensions, optional, defaults to ['png', 'gif', 'jpeg']
  # Note that the extensions can also be limited per instance using `setAllowedExtensions`
  allowed_extensions: ['png', 'gif', 'jpeg']

```

Usage
-----

[](#usage)

```
private static $has_one = [
    'Image' => \Level51\Cloudinary\Image::class
];

private static $has_many = [
    'Images' => Image::class
];

public function getCMSFields() {
	$fields = parent::getCMSFields();

	$fields->addFieldsToTab(
		'Root.Main',
		[
			\Level51\Cloudinary\UploadField::create('Image', $this->fieldLabel('Image')),
				// ->setRatio(16 / 9)
				// ->disableCropping()
				// ->setFolderName('path/to/destination')
				// ->setAllowedExtensions(['jpg'])
			\Level51\Cloudinary\MultiUploadField::create('Images', $this->fieldLabel('Images'))
				// ->setAllowedMaxFileNumber(5)
		]
	);

	return $fields;
}
```

```
// In templates
$Image

// With transormations
$Image.FillMax(1920,1080)

// With effect filters
$Image.Grayscale.FillMax(1920,1080)
```

Checkout the available transformations and effects in the \\Level51\\Cloudinary\\Image class.

Features
--------

[](#features)

- UploadField using the javascript upload widget - so direct uploads to Cloudinary
- Store the relevant information in a Level51\\Cloudinary\\Image object

Extend
------

[](#extend)

If you need any further fields just extend the Level51\\Cloudinary\\Image class with a data extension. To inject information returned by Cloudinary during the upload create another extension for the Level51\\Cloudinary\\UploadController and use one of the two extensions hooks **onBeforeImageCreated** or **onAfterImageCreated**. Both get passed the image object, either before or after the first write.

Maintainer
----------

[](#maintainer)

- Daniel Kliemsch

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 81.7% 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 ~130 days

Recently: every ~383 days

Total

16

Last Release

976d ago

Major Versions

0.2.1 → 1.0.02019-03-28

1.5.0 → 2.0.02023-09-16

PHP version history (3 changes)0.1.0PHP &gt;=5.6,&lt;7.2

1.0.0PHP &gt;=7.0

2.0.0PHP &gt;=8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/441f0e8f95c17048417a33f37e35d5ffdd4c07902cbedaf7f5786f4b7c454284?d=identicon)[JZubero](/maintainers/JZubero)

---

Top Contributors

[![dkliemsch](https://avatars.githubusercontent.com/u/13777159?v=4)](https://github.com/dkliemsch "dkliemsch (76 commits)")[![JZubero](https://avatars.githubusercontent.com/u/13751426?v=4)](https://github.com/JZubero "JZubero (8 commits)")[![KallivdH](https://avatars.githubusercontent.com/u/24358323?v=4)](https://github.com/KallivdH "KallivdH (7 commits)")[![blueskies79](https://avatars.githubusercontent.com/u/6065560?v=4)](https://github.com/blueskies79 "blueskies79 (2 commits)")

---

Tags

cloudinarysilverstripesilverstripe-modulesilverstripecloudinary

### Embed Badge

![Health badge](/badges/level51-silverstripe-cloudinary/health.svg)

```
[![Health](https://phpackages.com/badges/level51-silverstripe-cloudinary/health.svg)](https://phpackages.com/packages/level51-silverstripe-cloudinary)
```

###  Alternatives

[heyday/silverstripe-responsive-images

Configure and send a series of image size options to the client without loading any resources until a media query can be executed.

5387.7k6](/packages/heyday-silverstripe-responsive-images)[codebar-ag/laravel-flysystem-cloudinary

Cloudinary Flysystem v1 integration with Laravel

1224.9k2](/packages/codebar-ag-laravel-flysystem-cloudinary)[chrometoaster/silverstripe-image-quality

Adds Quality function to images

1013.0k1](/packages/chrometoaster-silverstripe-image-quality)[dnadesign/silverstripe-lazyloaded-image

Implements the LQIP (Low Quality Image Placeholder) pattern powered by lazysizes

1011.4k4](/packages/dnadesign-silverstripe-lazyloaded-image)

PHPackages © 2026

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