remotion-dev/remotion · error · Error

No effects were specified for deletion

Error message

No effects were specified for deletion

What it means

deleteEffects guards against no-op requests: an empty request array means there is nothing to delete, so it throws immediately. The throw happens inside the operation's try block and is returned to the caller as a structured error result (via getStructuredError), not as a rejected promise.

Source

Thrown at packages/browser-studio/src/browser-studio-operations.ts:916

				});
				controller.applyMutation({
					timelineSelection: null,
					fileName: absolutePath,
					nodePathMutationFiles: null,
					mutate: () => ({
						...project,
						files: {...project.files, [absolutePath]: result.output},
					}),
				});
				return {success: true};
			} catch (error) {
				return getStructuredError(error);
			}
		},
		deleteEffects: async (request) => {
			try {
				if (request.length === 0) {
					throw new Error('No effects were specified for deletion');
				}

				const project = getProject();
				const groups = new Map<
					string,
					Array<
						| {
								type: 'single-effect';
								effectIndex: number;
								sequenceNodePath: SequenceNodePath;
						  }
						| {type: 'all-effects'; sequenceNodePath: SequenceNodePath}
					>
				>();
				for (const item of request) {
					const absolutePath = findProjectFile({
						filePath: item.fileName,
						project,

View on GitHub (pinned to b2f4e34732)

Solutions

  1. Check request.length > 0 before calling deleteEffects.
  2. Fix the selection logic that produced an empty delete list.
  3. Disable the delete action in the UI when no effects are selected.

Example fix

// before
await operations.effect.deleteEffects(selected);

// after
if (selected.length > 0) {
  await operations.effect.deleteEffects(selected);
}
Defensive patterns

Strategy: validation

Validate before calling

if (request.length > 0) {
  const result = await operations.effect.deleteEffects(request);
}

Type guard

const isNonEmptyDeleteEffectsRequest = (
  request: unknown[],
): request is Array<{fileName: string; sequenceNodePath: SequenceNodePath}> =>
  Array.isArray(request) && request.length > 0;

Prevention

When it happens

Trigger: Calling effectOperations.deleteEffects([]) — e.g. a bulk-delete UI action where every selected effect was deselected or filtered out before the call.

Common situations: Select-none-then-delete flows; clear-all-effects buttons that compute the selection list incorrectly; defensive callers passing an array they never checked.

Related errors


AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-08-22). Data as JSON: /api/errors/39cc0674ac02c0b6. Report an issue: GitHub.