How to display Sidekick NPC portraits/icons in custom Verse UI without failing content validation?

Hi everyone,

I’m building a UEFN island that uses Sidekick NPCs (via NPC Character Definitions with Fortnite Sidekick cosmetics). I need to display a portrait/thumbnail of each Sidekick in my custom HUD built with Verse (texture_block widgets).

The problem: I originally imported PNG images of each Sidekick and placed them in my project as textures. However, content validation blocks me with rule 1.7.1 (Epic IP), saying I must use assets available in UEFN rather than externally sourced Fortnite content.

I’ve tried:

  • Importing edited images from Epic’s website → blocked by validation
  • Searching the Fortnite Content Browser (with Show Engine Content enabled) for official Sidekick icon textures → couldn’t find any paths like CompanionIcons or NPCIcons

I’ve seen other published islands that display Sidekick portraits in their custom UI, so there must be an approved method.

My questions:

  1. Is there an official path in the Fortnite Content Browser where Sidekick portrait textures are exposed for use in custom UI?
  2. Is there a Verse API or workflow to get a portrait/icon from an npc_character_definition at runtime?
  3. What is the approved method to show Fortnite Sidekick images in a custom HUD without violating rule 1.7.1?

Any help is appreciated. Thanks!

Hey @HorsieHosea ! Welcome to the forums!

I’ve been investigating this a lot because I wanted to do something similar in one of my projects, and unfortunately I have bad news for the three questions!

1. Is there a Content Browser path for Sidekick portraits?

No, and that is why you couldn’t find it. Sidekick appearance is not stored as
assets you can reach. It is applied through the Cosmetic Modifier on the NPC
Character Definition, and that is just a reference the game resolves when the
NPC spawns, not a folder of textures inside your project. It is the same with
outfits and pets: you can use them through a device, but you cannot open them up
and take things out.

2. Is there a Verse API to get the portrait at runtime?

No, and I think this one is settled. Everything the Sidekick API gives you is about mood and reactions, so there is no way to ask a Sidekick what it actually is. No name, no species, no cosmetic ID and no icon. Here is the Fortnite.digest so you can see what you can get from its API:

# Component to manage functionality shared by all Sidekick types.

    sidekick_component<native><public> := class<abstract><final_super><epic_internal>(component):

        # By default, Sidekicks will change their mood depending on actions in the game.

        # This value will lock the Sidekick into the mood passed in, overriding the automatic mood system.

        var MoodOverride<public>:?sidekick_mood = external {}



        # Get the Sidekick's current mood.

        GetMood<public>()<reads>:sidekick_mood



        # Signaled whenever the Sidekick's mood changes, either via the underlying mood system, or an override is applied. Returns the previous and new mood.

        ChangeMoodEvent<native><public>:listenable(tuple(sidekick_mood, sidekick_mood))



        # Request to play a given reaction on the Sidekick.

        # This reaction is not guaranteed to play immediately; instead, the StartPlayReactionEvent should be used to monitor this.

        # This will fail if the Sidekick cannot play the given reaction.

        PlayReaction<public>(Reaction:sidekick_reaction)<transacts><decides>:void



        # Signaled when the Sidekick starts to play a reaction, returns the reaction that started playing.

        StartPlayReactionEvent<native><public>:listenable(sidekick_reaction)



        # Signaled when the Sidekick ends playing a reaction, returns the reaction that played.

        StopPlayReactionEvent<native><public>:listenable(sidekick_reaction)



        # Enable or disable antics (idle personality animations) on the Sidekick. Enabled by default.

        var IdleAnticsEnabled<public>:logic = external {}

# Component to manage functionality specifically for an NPC Sidekick.
npc_sidekick_component<native><public> := class<final_super><epic_internal>(sidekick_component):

        # By default, Sidekicks will change their mood depending on actions in the game.

        # This value will lock the Sidekick into the mood passed in, overriding the automatic mood system.

        var MoodOverride<override>:?sidekick_mood = external {}



        # Get the Sidekick's current mood.

        GetMood<override><native>()<reads>:sidekick_mood



        # Signaled whenever the Sidekick's mood changes, either via the underlying mood system, or an override is applied. Returns the previous and new mood.

        ChangeMoodEvent<override><native>:listenable(tuple(sidekick_mood, sidekick_mood)) = external {}



        # Request to play a given reaction on the Sidekick.

        # This reaction is not guaranteed to play immediately; instead, the StartPlayReactionEvent should be used to monitor this.

        # This will fail if the Sidekick cannot play the given reaction.

        PlayReaction<override><native>(Reaction:sidekick_reaction)<transacts><decides>:void



        # Signaled when the Sidekick starts to play a reaction, returns the reaction that started playing.

        StartPlayReactionEvent<override><native>:listenable(sidekick_reaction) = external {}



        # Signaled when the Sidekick ends playing a reaction, returns the reaction that played.

        StopPlayReactionEvent<override><native>:listenable(sidekick_reaction) = external {}



        # Apply the look and customizations of agent's currently equipped Sidekick to this Sidekick NPC.

        # This will fail if the NPC does not use the FortniteSidekick cosmetic look or if the given agent does not have a Sidekick equipped in their locker.

        ApplyEquippedSidekickCosmetic<native><public>(Agent:agent)<transacts><decides>:void

I also tried the obvious workaround. Scene Graph has components to store a name and an icon on an entity, but nothing fills them from the cosmetic. Applying a Sidekick look only changes what you see, no information travels with it. So you cannot even read an ID and look up your own icon, because there is no ID to read!

And Cosmetic Sync makes it impossible from our side anyway. When an NPC takes the form of whatever the player has equipped, nothing tells you which one it became, so a table of icons would not work even if you had every icon that exists.

3. What is the approved method?

Honestly, I don’t think there is one right now.
Rule 1.7.1 says you can use the assets Epic provides in UEFN, but not assets from Fortnite that were “recreated or otherwise obtained”. Epic gives you the Sidekick as a character definition, so any flat image of it is something Epic never provided in that form, and that second part covers however you got it. That is why your imports are flagged no matter where they came from.

I know the intuitive workaround is to render the mesh yourself inside UEFN, but I don’t think that saves us either. A render you make is still a new image of an Epic character that Epic did not provide as an image, and nobody has confirmed that this is acceptable, so it is not something I would build a whole progression system on top of!

So what can we do?

The only completely safe way to show a Sidekick is the Sidekick itself, in 3D!
Spawn the real NPC on a lit plinth inside a display case, put your own frame and a nameplate around it, and build the collection screen as a room instead of a grid of tiles. It only uses what UEFN gives you, and it is the only approach that survives Cosmetic Sync.

For the flat parts of the UI you can use your own iconography: element glyphs, rarity frames, colour swatches taken from the variant channels, and the name as text. Something like “[glyph] · Sparky · Lv.14 · Uncommon” tells the player everything a portrait would, and you own every pixel of it! The materials under Fortnite > UI > Materials are great for building those frames and glyphs — you just need to create a material instance from them first, and then every parameter becomes drivable from Verse.

Hope this helps you! Let me know if you need more help with any of this!!