remotion-dev/remotion · error · Error

The artifact filename ${artifact.filename} was emitted more

Error message

The artifact filename ${artifact.filename} was emitted more than once. https://remotion.dev/docs/artifacts

What it means

The Studio Web MCP tool 'select composition' validates its compositionName argument at runtime since MCP input is untyped. A non-string value (number, object) throws immediately.

Source

Thrown at packages/serverless/src/render-with-single-function.ts:140

			preferLossless: params.preferLossless,
			browserExecutable: providerSpecifics.getChromiumPath(),
			cancelSignal: params.enableCancellation ? cancelSignal : undefined,
			disallowParallelEncoding: false,
			offthreadVideoCacheSizeInBytes: params.offthreadVideoCacheSizeInBytes,
			colorSpace: params.colorSpace ?? undefined,
			repro: false,
			binariesDirectory: null,
			onBrowserDownload: () => {
				throw new Error('Should not download a browser in Lambda');
			},
			onArtifact: (artifact) => {
				const registration = onArtifact({
					artifact,
					chunk: 0,
					attempt: 1,
				});
				if (registration.type === 'conflict') {
					throw new Error(
						`The artifact filename ${artifact.filename} was emitted more than once. https://remotion.dev/docs/artifacts`,
					);
				}
			},
			metadata: params.metadata,
			hardwareAcceleration: 'disable',
			chromeMode: 'headless-shell',
			offthreadVideoThreads: params.offthreadVideoThreads,
			mediaCacheSizeInBytes: params.mediaCacheSizeInBytes,
			licenseKey: null,
			isProduction: false,
			sampleRate: params.sampleRate,
			onProgress: ({renderedFrames, encodedFrames}) => {
				overallProgress.setFrames({
					index: 0,
					rendered: renderedFrames,
					encoded: encodedFrames,
				});

View on GitHub (pinned to 8f97758157)

Solutions

  1. Pass compositionName as a JSON string matching the composition id
  2. Validate arguments on the client before invoking the MCP tool
Defensive patterns

Strategy: validation

Validate before calling

if (typeof compositionName !== 'string' || compositionName.length === 0) { /* reject before invoking tool */ }

Type guard

const isNonEmptyString = (v: unknown): v is string => typeof v === 'string' && v.length > 0;

Prevention

When it happens

Trigger: An MCP client calling the selectComposition tool with compositionName as a non-string JSON value (e.g. a number).

Common situations: LLM-driven MCP clients passing unquoted ids, or hand-written tool invocations with wrong JSON types.

Related errors


AI-assisted analysis of remotion-dev/remotion@8f97758157 (2026-08-28). Data as JSON: /api/errors/b0b8441f4ec09e32. Report an issue: GitHub.