remotion-dev/remotion · error

The provider does not support conditional output uploads

Error message

The provider does not support conditional output uploads

What it means

finishRender uploads the render output via providerSpecifics.writeFileIfNotExists when renderMetadata.outputFileIsConditional is set (conditional upload: fail if output already exists). If the active provider does not implement writeFileIfNotExists, conditional output uploads cannot be honored and the library throws this error instead of silently doing an unconditional upload.

Source

Thrown at packages/serverless/src/finish-render.ts:84

	);

	const writeOptions: WriteFileInput<Provider> = {
		bucketName: renderBucketName,
		key,
		body: fs.createReadStream(outputFile),
		region: insideFunctionSpecifics.getCurrentRegionInFunction(),
		privacy,
		expectedBucketOwner,
		downloadBehavior,
		customCredentials,
		forcePathStyle,
		storageClass,
		requestHandler,
	};

	if (renderMetadata.outputFileIsConditional) {
		if (!providerSpecifics.writeFileIfNotExists) {
			throw new Error(
				'The provider does not support conditional output uploads',
			);
		}

		await providerSpecifics.writeFileIfNotExists(writeOptions);
	} else {
		await providerSpecifics.writeFile(writeOptions);
	}

	writeToBucket.end();

	const errorExplanations = inspectErrors({
		errors: overallProgress.get().errors,
	});

	const cleanupProm = cleanupProps({
		inputProps,
		serializedResolvedProps,

View on GitHub (pinned to b2f4e34732)

Solutions

  1. Start the render without the conditional output (ifNotExists) option so the regular write path is used
  2. Use the AWS Lambda provider, which implements writeFileIfNotExists
  3. Implement writeFileIfNotExists in your custom provider's providerSpecifics
  4. Upgrade the provider package to a version supporting conditional uploads

Example fix

// before
await renderMediaOnLambda({
  ...params,
  outputIsIfNotExists: true,
});
// after
await renderMediaOnLambda({
  ...params,
  outputIsIfNotExists: false,
});
Defensive patterns

Strategy: validation

Validate before calling

if (renderMetadata.outputFileIsConditional && !providerSpecifics.writeFileIfNotExists) {
  throw new Error('Selected provider cannot honor conditional output uploads; disable the option or switch providers.');
}

Type guard

const providerSupportsConditional = (p: unknown): p is {writeFileIfNotExists: (o: unknown) => Promise<void>} => typeof (p as {writeFileIfNotExists?: unknown}).writeFileIfNotExists === 'function';

Try / catch

try {
  await finishRender(args);
} catch (err) {
  if (String(err).includes('conditional output uploads')) {
    await finishRender({...args, renderMetadata: {...args.renderMetadata, outputFileIsConditional: false}});
  } else {
    throw err;
  }
}

Prevention

When it happens

Trigger: A render whose metadata marks the output file as conditional (renderMediaOnLambda with conditional/ifNotExists output) being finished by a provider plugin that does not export writeFileIfNotExists in its providerSpecifics.

Common situations: Using a custom or third-party serverless provider (non-AWS) that lacks conditional-write support while the render was started with conditional output enabled; mixing render metadata from one provider with another provider's finish step.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-09-09). Data as JSON: /api/errors/2366ecd289f02e4a. Report an issue: GitHub.