{"record":{"id":"0edda5fd3743a515","repo":"remotion-dev/remotion","slug":"emoji-emoji-not-found-available-emojis-emoj","errorCode":null,"errorMessage":"Emoji ${emoji} not found. Available emojis: ${emojis.map((e) => e.name).join(', ')}","messagePattern":"Emoji (.+?) not found\\. Available emojis: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/animated-emoji/src/AnimatedEmoji.tsx","lineNumber":29,"sourceCode":"\t'src' | 'muted'\n> & {\n\treadonly emoji: EmojiName;\n\treadonly scale?: Scale;\n\treadonly calculateSrc?: CalculateEmojiSrc;\n} & LayoutAndStyle;\n\nexport const AnimatedEmoji = ({\n\temoji,\n\tscale = '1',\n\tcalculateSrc = defaultCalculateEmojiSrc,\n\tplaybackRate = 1,\n\t...props\n}: AnimatedEmojiProps) => {\n\tconst {fps} = useVideoConfig();\n\n\tconst emojiData = emojis.find((e) => e.name === emoji);\n\tif (!emojiData) {\n\t\tthrow new Error(\n\t\t\t`Emoji ${emoji} not found. Available emojis: ${emojis.map((e) => e.name).join(', ')}`,\n\t\t);\n\t}\n\n\treturn (\n\t\t<Loop\n\t\t\tlayout=\"none\"\n\t\t\tdurationInFrames={Math.floor(\n\t\t\t\t(emojiData.durationInSeconds * fps) / playbackRate,\n\t\t\t)}\n\t\t>\n\t\t\t<OffthreadVideo\n\t\t\t\t{...props}\n\t\t\t\tmuted\n\t\t\t\ttransparent\n\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\tsrc={calculateSrc({emoji, scale, format: isWebkit() ? 'hevc' : 'webm'})}\n\t\t\t/>","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/animated-emoji/src/AnimatedEmoji.tsx#L11-L47","documentation":"Thrown by the <AnimatedEmoji> component when the `emoji` prop does not match any name in the built-in emoji registry. The component looks the emoji up by exact kebab-case name in the `emojis` array (see get-available-emoji.ts) and aborts the render if no entry matches, printing every valid name in the message so you can correct the value.","triggerScenarios":"Passing a string to `<AnimatedEmoji emoji=\"...\">` that is not one of the literal names in the EmojiName union: a Unicode glyph like '😀', a typo like 'smilling', wrong casing like 'Heart-Eyes', or a name from a different emoji set.","commonSituations":"Copying an emoji name from Slack/Unicode instead of the Remotion registry; a name that was renamed or removed after a package upgrade; passing a dynamically computed name from user input or config without validation; @ts-ignore or `as any` bypassing the EmojiName type.","solutions":["Read the error message — it lists every valid name; copy one exactly in kebab-case (e.g. 'heart-eyes').","Import EmojiName and type your variable with it so the compiler rejects invalid names at build time.","Call getAvailableEmojis() at runtime to enumerate valid names when the value comes from dynamic data."],"exampleFix":"// before\n<AnimatedEmoji emoji=\"😀\" />  // Unicode glyph, not a registry name\n\n// after\nimport {getAvailableEmojis} from '@remotion/animated-emoji/get-available-emoji';\n// valid names: getAvailableEmojis().map((e) => e.name)\n<AnimatedEmoji emoji=\"heart-eyes\" />","handlingStrategy":"type-guard","validationCode":"import {getAvailableEmojis} from '@remotion/animated-emoji/get-available-emoji';\n\nconst VALID = new Set(getAvailableEmojis().map((e) => e.name));\nfunction assertEmoji(name: string) {\n  if (!VALID.has(name)) {\n    throw new Error(`Invalid emoji \"${name}\". Valid: ${[...VALID].join(', ')}`);\n  }\n}","typeGuard":"import {getAvailableEmojis} from '@remotion/animated-emoji/get-available-emoji';\nimport type {EmojiName} from '@remotion/animated-emoji/get-available-emoji';\n\nconst NAMES = new Set<string>(getAvailableEmojis().map((e) => e.name));\nconst isValidEmojiName = (n: string): n is EmojiName => NAMES.has(n);","tryCatchPattern":null,"preventionTips":["Type every emoji variable as EmojiName so the compiler rejects typos at build time.","When the name comes from dynamic data, validate it with getAvailableEmojis() before rendering.","Treat the message's printed list as the source of truth after any package upgrade."],"tags":["animated-emoji","validation","runtime","props"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}