remotion-dev/remotion · error

is not installed.

Error message

${skill} is not installed.

What it means

When removing a skill locally (not globally), changeRemotionSkill first looks up the skill's installation status via getRemotionSkillsInfo. If the action is 'remove', removingGlobally is false, and the skill is not installed in the project, there is nothing to remove, so this error is thrown instead of running a pointless package-manager remove.

Solutions

  1. Refresh the skills info (get-remotion-skills-info) and confirm the skill is actually installed in the project before removing
  2. If the skill is installed globally, request a global removal instead of a project removal
  3. Skip the removal if the skill is already absent — treat it as a no-op

Example fix

// before: blind remove
await removeSkill('@remotion/captions', {globally: false})
// after: check first
const info = await getSkillsInfo();
const skill = info.skills.find((s) => s.name === '@remotion/captions');
if (skill?.installedInProject) await removeSkill('@remotion/captions', {globally: false});
Defensive patterns

Strategy: validation

Validate before calling

const info = await getRemotionSkillsInfo();
const skill = info.skills.find((s) => s.name === name);
if (!skill?.installedInProject && !skill?.installedGlobally) {
  // nothing to remove — skip
}

Type guard

const canRemove = (s: typeof info.skills[number]) => s.installedInProject === true || s.installedGlobally === true;

Try / catch

try {
  await removeSkill(skill);
} catch (e) {
  if (e.message.endsWith('is not installed.')) {
    // treat as no-op
  }
}

Prevention

When it happens

Trigger: Calling removeRemotionSkillHandler with action 'remove' for a skill whose installedInProject is false and which is not being removed globally — e.g. removing a skill that was never installed, or one that was installed globally only.

Common situations: A UI list is stale and shows a skill as installed when it is not; the skill was removed in another session already; the user confuses global vs project installation.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of remotion-dev/remotion@46a3a6bf13 (2026-09-18). Data as JSON: /api/errors/e695aba60a8250c0. Report an issue: GitHub.

Appendix: source

Thrown at packages/studio-server/src/preview-server/routes/install-remotion-skill.ts:50

			'A skill is already being installed or removed. Please try again once it finishes.',
		);
	}

	changingSkillsInProjects.add(remotionRoot);
	try {
		const installedSkill = getRemotionSkillsInfo({remotionRoot}).skills.find(
			({name}) => name === skill,
		);
		const removingGlobally =
			action === 'remove' &&
			installedSkill?.installedInProject === false &&
			installedSkill.installedGlobally;
		if (
			action === 'remove' &&
			!removingGlobally &&
			!installedSkill?.installedInProject
		) {
			throw new Error(`${skill} is not installed.`);
		}

		const packageManager = getPackageManager({
			remotionRoot,
			packageManager: undefined,
			dirUp: 0,
			logLevel,
		});
		const useBunx =
			packageManager !== 'unknown' && packageManager.manager === 'bun';
		const executable = useBunx
			? 'bunx'
			: process.platform === 'win32'
				? 'npx.cmd'
				: 'npx';
		const commandArgs =
			action === 'install'
				? ['add', `remotion-dev/skills@${skill}`, '--yes']

View on GitHub (pinned to 46a3a6bf13)