Imposters | View All Roles & Ghosts! *Outdated!!*
Key Required

Imposters | View All Roles & Ghosts! *Outdated!!*

🚀 Imposters & Roles | Among usnabnabnabnab 11.7K views 5K executesUpdated Dec 1, 2025
3.3/ 5(6 votes)
4267% Positive
Lua Script•182 lines (4513 chars)
local Players = game:GetService("Players")

local ROLE_COLORS = {
	Crewmate = Color3.fromRGB(0, 255, 0),
	Imposter = Color3.fromRGB(255, 0, 0),
	Neutral  = Color3.fromRGB(0, 170, 255),
}

local BODY_COLOR = Color3.fromRGB(170, 0, 255) -- i set as purple, but feel free to change!

local NEUTRAL_SUBROLES = {
	Jester = true,
	Chimera = true,
	Exploder = true,
	Assassin = true,
	Novisor = true,
	Witness = true,
	Werewolf = true,
	Valentine = true,
	Bunny = true,
	Medusa = true,
	Zombie = true,
	Santa = true,
	Grinch = true,
}

local BodiesFolder = workspace:WaitForChild("Bodies")

local function getTorso(character)
	return character:FindFirstChild("UpperTorso")
		or character:FindFirstChild("Torso")
end

local function attachTag(player, character)
	local torso = getTorso(character)
	if not torso then return end

	local old = torso:FindFirstChild("RoleTag")
	if old then old:Destroy() end

	local billboard = Instance.new("BillboardGui")
	billboard.Name = "RoleTag"
	billboard.Parent = torso
	billboard.Adornee = torso
	billboard.Size = UDim2.new(5, 0, 2, 0)
	billboard.StudsOffset = Vector3.new(0, 2.6, 0)
	billboard.AlwaysOnTop = true
	billboard.MaxDistance = 450

	local subText = Instance.new("TextLabel")
	subText.Parent = billboard
	subText.BackgroundTransparency = 1
	subText.Font = Enum.Font.GothamBold
	subText.TextScaled = true
	subText.TextStrokeTransparency = 0.25
	subText.Size = UDim2.new(1, 0, 0.35, 0)
	subText.Position = UDim2.new(0, 0, -0.05, 0)
	subText.Text = ""

	local roleText = Instance.new("TextLabel")
	roleText.Parent = billboard
	roleText.BackgroundTransparency = 1
	roleText.Font = Enum.Font.GothamBold
	roleText.TextScaled = true
	roleText.TextStrokeTransparency = 0.25
	roleText.Size = UDim2.new(1, 0, 0.6, 0)
	roleText.Position = UDim2.new(0, 0, 0.35, 0)
	roleText.Text = ""

	local function update()
		local ps = player:FindFirstChild("PublicStates")
		if not ps then return end

		local roleVal = ps:FindFirstChild("Role")
		local subRoleVal = ps:FindFirstChild("SubRole")

		local roleName = roleVal and roleVal.Value or ""
		local subRoleName = subRoleVal and subRoleVal.Value or ""

		if subRoleName ~= "" and NEUTRAL_SUBROLES[subRoleName] then
			roleText.Text = subRoleName
			subText.Text = ""
			roleText.TextColor3 = ROLE_COLORS.Neutral
			subText.TextColor3 = ROLE_COLORS.Neutral
			return
		end

		if roleName == "Imposter" then
			roleText.Text = roleName
			subText.Text = subRoleName
			roleText.TextColor3 = ROLE_COLORS.Imposter
			subText.TextColor3 = ROLE_COLORS.Imposter
			return
		end

		roleText.Text = roleName
		subText.Text = subRoleName
		roleText.TextColor3 = ROLE_COLORS.Crewmate
		subText.TextColor3 = ROLE_COLORS.Crewmate
	end

	local ps = player:WaitForChild("PublicStates", 5)
	if ps then
		for _, v in ipairs(ps:GetChildren()) do
			if v:IsA("StringValue") then
				v.Changed:Connect(update)
			end
		end
		ps.ChildAdded:Connect(function(v)
			if v:IsA("StringValue") then
				v.Changed:Connect(update)
				update()
			end
		end)
	end

	update()
end

local function setupPlayer(player)
	player.CharacterAdded:Connect(function(character)
		attachTag(player, character)
	end)

	if player.Character then
		attachTag(player, player.Character)
	end
end

for _, player in ipairs(Players:GetPlayers()) do
	setupPlayer(player)
end

Players.PlayerAdded:Connect(setupPlayer)

local function getBodyAdornee(body)
	if body:IsA("Model") then
		return body:FindFirstChild("UpperTorso")
			or body:FindFirstChild("Torso")
			or body.PrimaryPart
	elseif body:IsA("BasePart") then
		return body
	end
end

local function attachBodyTag(body)
	local adornee = getBodyAdornee(body)
	if not adornee then return end

	if adornee:FindFirstChild("BodyTag") then return end

	local billboard = Instance.new("BillboardGui")
	billboard.Name = "BodyTag"
	billboard.Parent = adornee
	billboard.Adornee = adornee
	billboard.Size = UDim2.new(5, 0, 2, 0)
	billboard.StudsOffset = Vector3.new(0, 2.6, 0)
	billboard.AlwaysOnTop = true
	billboard.MaxDistance = 450

	local text = Instance.new("TextLabel")
	text.Parent = billboard
	text.BackgroundTransparency = 1
	text.Font = Enum.Font.GothamBlack
	text.TextScaled = true
	text.TextStrokeTransparency = 0.2
	text.Size = UDim2.new(1, 0, 1, 0)
	text.Text = "BODY"
	text.TextColor3 = BODY_COLOR
end

for _, body in ipairs(BodiesFolder:GetChildren()) do
	if body.Name == "DeadBody" then
		attachBodyTag(body)
	end
end

BodiesFolder.ChildAdded:Connect(function(body)
	if body.Name == "DeadBody" then
		attachBodyTag(body)
	end
end)

Features & Information

See peoples in-game role on imposters!
#Imposters#Sus#Among us#Crewmates#Among

Community Comments (22)

kyleeikyleeiDec 1, 2025

w

CodingCrewCodingCrewDec 2, 2025

W

doomkittydoomkittyJan 12, 2026

W script, use it often and it works well. Dislike how I gotta reexecute when new players join but thats something small and I can deal with it. 4/5

Replying to @doomkitty
nabnabnabnabJan 28, 2026

@jaydoom hi, i fixed a few things such as adding support for xeno, should be able to track neutral roles from further distances & actually making neutral roles different

Replying to @nabnab
doomkittydoomkittyJan 28, 2026

@nabnab Hell yea, I havent pla* in a bit so havent had to use it but ill use it again later, love this script heaps.

Incognito_UserIncognito_UserJan 30, 2026

U can add dead body esp for report him?

Replying to @Incognito_User
nabnabnabnabFeb 2, 2026

@Incognito_User sure, I'll have a look at adding that feature

Replying to @Incognito_User
nabnabnabnabFeb 3, 2026

@Incognito_User added a body esp! working ona way to tell you who killed it!

Replying to @nabnab
Incognito_UserIncognito_UserFeb 3, 2026

@nabnab thx

yourabot10000yourabot10000Feb 22, 2026

does this work in private servers

HatonmyheadHatonmyheadMar 4, 2026

W script

SuperTokyoSuperTokyoJun 1, 2026

Why the script not working it doesn't show esp it shows after match , is script not working (i use codex)

Replying to @SuperTokyo
nabnabnabnabJun 1, 2026

@SuperTokyo sorry its very outdated as they patched the usual method for finding roles, idk if i will fix it

Replying to @nabnab
earlearl1218earlearl1218Jul 5, 2026

@nabnab did you finish yet???

RusterfrogRusterfrogJun 6, 2026

It dont work no more

BraydenB123BraydenB123Jun 23, 2026

yeah it doesn't work

kalikoaka2009kalikoaka2009Jul 3, 2026

why is everyone glazing? for me it only works on captain or vip or something that would say theire roles in meeting, the body esp works but the roles dont show

KenophobiaKenophobiaJul 5, 2026

This is (mostly) patched. What if you converted this (or, for that matter, made) an ESP?

kalikoaka2009kalikoaka2009Jul 9, 2026

@VersionUpdatorBoy dosent work

kalikoaka2009kalikoaka2009Jul 12, 2026

only works in lobby, not in game

XackergamerXackergamerJul 29, 2026

Bro why only xeno

dobrivskyhaterdobrivskyhaterJul 30, 2026

doesn't work anymore, sadly they patched it so I'm trying to create a new one