Skip to main content

Function Signature

export const cloudinaryStorage: CloudinaryStoragePlugin =
  (cloudinaryOptions: CloudinaryStorageOptions) =>
  (incomingConfig: Config): Config => {
    // Returns modified Payload config with Cloudinary storage
  };

Overview

The cloudinaryStorage function is the main entry point for the Payload Cloudinary plugin. It returns a Payload plugin function that configures Cloudinary storage for specified collections.

Parameters

cloudinaryOptions
CloudinaryStorageOptions
required
Configuration options for Cloudinary storage. See CloudinaryStorageOptions for details.

Returns

Plugin
(config: Config) => Config
A Payload plugin function that modifies the Payload configuration to use Cloudinary storage.

Behavior

When called, cloudinaryStorage:
  1. Returns immediately if enabled is false
  2. Creates a Cloudinary adapter with the provided configuration
  3. Modifies specified collections to:
    • Disable local storage (disableLocalStorage: true)
    • Add Cloudinary metadata fields
    • Add version history fields (if versioning enabled)
    • Add custom fields (if provided)
    • Enable PDF thumbnail generation (if enabled)
  4. Returns the modified Payload config

Usage Example

import { buildConfig } from 'payload/config';
import { cloudinaryStorage } from '@payloadcms/plugin-cloudinary';

export default buildConfig({
  collections: [
    {
      slug: 'media',
      upload: true,
      fields: [
        {
          name: 'alt',
          type: 'text',
        },
      ],
    },
  ],
  plugins: [
    cloudinaryStorage({
      collections: {
        media: true,
      },
      config: {
        cloud_name: process.env.CLOUDINARY_CLOUD_NAME!,
        api_key: process.env.CLOUDINARY_API_KEY!,
        api_secret: process.env.CLOUDINARY_API_SECRET!,
      },
      folder: 'my-app/media',
      versioning: {
        enabled: true,
        storeHistory: true,
        autoInvalidate: true,
      },
    }),
  ],
});

PDF Thumbnail Support

The plugin automatically generates thumbnails for PDF uploads using Cloudinary’s transformation API:
// Default PDF thumbnail generator (source: index.ts:44-51)
const defaultPDFThumbnailGenerator = (
  doc: PayloadDocument,
  cloudName: string,
): string => {
  if (!doc.cloudinary?.public_id) return "";
  const page = doc.cloudinary?.selected_page || 1;
  return `https://res.cloudinary.com/${cloudName}/image/upload/pg_${page},w_300,h_400,c_fill,q_auto,f_jpg/${doc.cloudinary.public_id}.pdf`;
};

See Also

Build docs developers (and LLMs) love