anomaly esp
Key Required

anomaly esp

Animal Hospital (Anomaly) 🧪ToastmanToastman 3.7K views 1K executesUpdated Jul 11, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•497 lines (12731 chars)
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

local npcs = "NPCs"
local anomaly = "Skinwalker"
local patient = "IsPatient"
local visitor = "IsVisitor"

local HOTKEY = Enum.KeyCode.H

local IGNORED_FLAGS = {
	StoryForced = true,
	AlwaysPatient = true
}

local RED_FILL = Color3.fromRGB(255, 45, 65)
local RED_OUTLINE = Color3.fromRGB(255, 0, 25)

local GREEN_FILL = Color3.fromRGB(55, 255, 120)
local GREEN_OUTLINE = Color3.fromRGB(0, 255, 90)

local CHECK_DELAY = 0.35

local highlights = {}
local opened = true
local panelPos = Vector2.new(12, 90)
local dragging = false
local dragStart = nil
local startPos = nil
local blockClick = false

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SkinwalkerScannerGui"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.Parent = playerGui

local main = Instance.new("Frame")
main.Name = "Main"
main.Size = UDim2.fromOffset(295, 128)
main.Position = UDim2.fromOffset(panelPos.X, panelPos.Y)
main.BackgroundColor3 = Color3.fromRGB(12, 12, 18)
main.BackgroundTransparency = 0.08
main.BorderSizePixel = 0
main.ClipsDescendants = true
main.Parent = screenGui

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 12)
mainCorner.Parent = main

local stroke = Instance.new("UIStroke")
stroke.Thickness = 1.5
stroke.Color = Color3.fromRGB(255, 55, 75)
stroke.Transparency = 0.2
stroke.Parent = main

local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new({
	ColorSequenceKeypoint.new(0, Color3.fromRGB(30, 0, 8)),
	ColorSequenceKeypoint.new(0.45, Color3.fromRGB(12, 12, 18)),
	ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 28, 12))
})
gradient.Rotation = 20
gradient.Parent = main

local toggleButton = Instance.new("TextButton")
toggleButton.Name = "ToggleButton"
toggleButton.Size = UDim2.fromOffset(52, 25)
toggleButton.Position = UDim2.fromOffset(panelPos.X + 234, panelPos.Y + 6)
toggleButton.BackgroundColor3 = Color3.fromRGB(164, 53, 90)
toggleButton.BorderSizePixel = 0
toggleButton.Text = "HIDE"
toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
toggleButton.TextStrokeTransparency = 1
toggleButton.Font = Enum.Font.GothamBold
toggleButton.TextSize = 12
toggleButton.AutoButtonColor = false
toggleButton.ZIndex = 20
toggleButton.Parent = screenGui

local toggleCorner = Instance.new("UICorner")
toggleCorner.CornerRadius = UDim.new(0, 8)
toggleCorner.Parent = toggleButton

local title = Instance.new("TextLabel")
title.Name = "Title"
title.Size = UDim2.new(1, -75, 0, 24)
title.Position = UDim2.fromOffset(9, 6)
title.BackgroundTransparency = 1
title.Text = "Anomaly esp"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Font = Enum.Font.GothamBlack
title.TextSize = 16
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = main

local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.new(1, -18, 0, 18)
status.Position = UDim2.fromOffset(9, 29)
status.BackgroundTransparency = 1
status.Text = "Scanning NPCs..."
status.TextColor3 = Color3.fromRGB(190, 190, 200)
status.Font = Enum.Font.GothamMedium
status.TextSize = 12
status.TextXAlignment = Enum.TextXAlignment.Left
status.Parent = main

local counts = Instance.new("TextLabel")
counts.Name = "Counts"
counts.Size = UDim2.new(1, -18, 0, 20)
counts.Position = UDim2.fromOffset(9, 48)
counts.BackgroundTransparency = 1
counts.Text = "Normal: 0  |  Anomalys: 0"
counts.TextColor3 = Color3.fromRGB(235, 235, 240)
counts.Font = Enum.Font.GothamBold
counts.TextSize = 14
counts.TextXAlignment = Enum.TextXAlignment.Left
counts.Parent = main

local tracked = Instance.new("TextLabel")
tracked.Name = "Tracked"
tracked.Size = UDim2.new(1, -18, 0, 16)
tracked.Position = UDim2.fromOffset(9, 69)
tracked.BackgroundTransparency = 1
tracked.Text = "Patients: 0  |  Visitors: 0"
tracked.TextColor3 = Color3.fromRGB(170, 170, 190)
tracked.Font = Enum.Font.GothamMedium
tracked.TextSize = 11
tracked.TextXAlignment = Enum.TextXAlignment.Left
tracked.Parent = main

local ignored = Instance.new("TextLabel")
ignored.Name = "Ignored"
ignored.Size = UDim2.new(1, -18, 0, 16)
ignored.Position = UDim2.fromOffset(9, 85)
ignored.BackgroundTransparency = 1
ignored.Text = "Ignored: 0"
ignored.TextColor3 = Color3.fromRGB(150, 150, 165)
ignored.Font = Enum.Font.GothamMedium
ignored.TextSize = 11
ignored.TextXAlignment = Enum.TextXAlignment.Left
ignored.Parent = main

local forcedIgnored = Instance.new("TextLabel")
forcedIgnored.Name = "ForcedIgnored"
forcedIgnored.Size = UDim2.new(1, -18, 0, 16)
forcedIgnored.Position = UDim2.fromOffset(9, 100)
forcedIgnored.BackgroundTransparency = 1
forcedIgnored.Text = "Doctor, Ron, Barney, Ratthew ignored: 0"
forcedIgnored.TextColor3 = Color3.fromRGB(150, 150, 165)
forcedIgnored.Font = Enum.Font.GothamMedium
forcedIgnored.TextSize = 10
forcedIgnored.TextXAlignment = Enum.TextXAlignment.Left
forcedIgnored.Parent = main

local barBack = Instance.new("Frame")
barBack.Name = "BarBack"
barBack.Size = UDim2.new(1, -18, 0, 5)
barBack.Position = UDim2.fromOffset(9, 117)
barBack.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
barBack.BorderSizePixel = 0
barBack.ClipsDescendants = true
barBack.Parent = main

local barBackCorner = Instance.new("UICorner")
barBackCorner.CornerRadius = UDim.new(1, 0)
barBackCorner.Parent = barBack

local bar = Instance.new("Frame")
bar.Name = "Bar"
bar.Size = UDim2.new(0.25, 0, 1, 0)
bar.Position = UDim2.new(0, 0, 0, 0)
bar.BackgroundColor3 = Color3.fromRGB(255, 55, 75)
bar.BorderSizePixel = 0
bar.Parent = barBack

local barCorner = Instance.new("UICorner")
barCorner.CornerRadius = UDim.new(1, 0)
barCorner.Parent = bar

local function updateToggleText()
	toggleButton.Text = opened and "HIDE" or "SHOW"
	toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
	toggleButton.TextStrokeTransparency = 1
end

local function toggleGui()
	opened = not opened
	main.Visible = opened
	updateToggleText()
end

local function setPos()
	main.Position = UDim2.fromOffset(panelPos.X, panelPos.Y)
	toggleButton.Position = UDim2.fromOffset(panelPos.X + 234, panelPos.Y + 6)
end

local function startDrag(input)
	if input.UserInputType ~= Enum.UserInputType.MouseButton1 and input.UserInputType ~= Enum.UserInputType.Touch then
		return
	end

	dragging = true
	blockClick = false
	dragStart = input.Position
	startPos = panelPos

	input.Changed:Connect(function()
		if input.UserInputState == Enum.UserInputState.End then
			dragging = false
			task.delay(0.2, function()
				blockClick = false
			end)
		end
	end)
end

main.InputBegan:Connect(startDrag)
toggleButton.InputBegan:Connect(startDrag)

UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if gameProcessed then
		return
	end

	if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == HOTKEY then
		toggleGui()
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if not dragging then
		return
	end

	if input.UserInputType ~= Enum.UserInputType.MouseMovement and input.UserInputType ~= Enum.UserInputType.Touch then
		return
	end

	local delta = input.Position - dragStart

	if math.abs(delta.X) > 5 or math.abs(delta.Y) > 5 then
		blockClick = true
	end

	local cam = workspace.CurrentCamera
	local size = cam and cam.ViewportSize or Vector2.new(800, 600)

	panelPos = Vector2.new(
		math.clamp(startPos.X + delta.X, 0, math.max(0, size.X - 60)),
		math.clamp(startPos.Y + delta.Y, 0, math.max(0, size.Y - 35))
	)

	setPos()
end)

toggleButton.MouseEnter:Connect(function()
	toggleButton.BackgroundColor3 = Color3.fromRGB(190, 65, 110)
end)

toggleButton.MouseLeave:Connect(function()
	toggleButton.BackgroundColor3 = Color3.fromRGB(164, 53, 90)
end)

toggleButton.Activated:Connect(function()
	if blockClick then
		return
	end

	toggleGui()
end)

local pulseInfo = TweenInfo.new(0.8, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true)

TweenService:Create(stroke, pulseInfo, {
	Transparency = 0.65
}):Play()

TweenService:Create(bar, pulseInfo, {
	BackgroundColor3 = Color3.fromRGB(50, 255, 125)
}):Play()

task.spawn(function()
	while screenGui.Parent do
		bar.Position = UDim2.new(0, 0, 0, 0)

		local tween = TweenService:Create(bar, TweenInfo.new(1.1, Enum.EasingStyle.Linear), {
			Position = UDim2.new(0.75, 0, 0, 0)
		})

		tween:Play()
		tween.Completed:Wait()
	end
end)

local function getNPCFolder()
	return workspace:FindFirstChild(npcs)
end

local function modelHasParts(model)
	for _, descendant in ipairs(model:GetDescendants()) do
		if descendant:IsA("BasePart") then
			return true
		end
	end

	return false
end

local function getDataValue(model, name)
	local attribute = model:GetAttribute(name)

	if attribute ~= nil then
		return attribute
	end

	local child = model:FindFirstChild(name)

	if child and child:IsA("ValueBase") then
		return child.Value
	end

	return nil
end

local function hasData(model, name)
	if model:GetAttribute(name) ~= nil then
		return true
	end

	if model:FindFirstChild(name) then
		return true
	end

	return false
end

local function isForcedIgnored(model)
	for flagName in pairs(IGNORED_FLAGS) do
		if hasData(model, flagName) then
			return true
		end
	end

	return false
end

local function isPatient(model)
	return getDataValue(model, patient) == true
end

local function isVisitor(model)
	return typeof(getDataValue(model, visitor)) == "number"
end

local function shouldScan(model)
	if isForcedIgnored(model) then
		return false
	end

	return isPatient(model) or isVisitor(model)
end

local function removeHighlight(model)
	local highlight = highlights[model]

	if highlight then
		highlight:Destroy()
	end

	highlights[model] = nil
end

local function getHighlight(model)
	if highlights[model] and highlights[model].Parent then
		return highlights[model]
	end

	local highlight = Instance.new("Highlight")
	highlight.Name = "SkinwalkerHighlight"
	highlight.Adornee = model
	highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
	highlight.FillTransparency = 0.45
	highlight.OutlineTransparency = 0
	highlight.Parent = model

	highlights[model] = highlight

	return highlight
end

local function setHighlight(model, skinwalker)
	local highlight = getHighlight(model)

	if skinwalker then
		highlight.FillColor = RED_FILL
		highlight.OutlineColor = RED_OUTLINE
	else
		highlight.FillColor = GREEN_FILL
		highlight.OutlineColor = GREEN_OUTLINE
	end
end

local function cleanup(npcFolder)
	for model, highlight in pairs(highlights) do
		if not model.Parent or not model:IsDescendantOf(npcFolder) or not shouldScan(model) then
			if highlight then
				highlight:Destroy()
			end

			highlights[model] = nil
		end
	end
end

while true do
	local npcFolder = getNPCFolder()

	if npcFolder then
		local safeCount = 0
		local skinwalkerCount = 0
		local ignoredCount = 0
		local forcedIgnoredCount = 0
		local patientCount = 0
		local visitorCount = 0

		for _, item in ipairs(npcFolder:GetChildren()) do
			if item:IsA("Model") and modelHasParts(item) then
				if isForcedIgnored(item) then
					forcedIgnoredCount += 1
					removeHighlight(item)
				else
					local patient = isPatient(item)
					local visitor = isVisitor(item)

					if patient then
						patientCount += 1
					end

					if visitor and not patient then
						visitorCount += 1
					end

					if patient or visitor then
						local skinwalker = getDataValue(item, anomaly) == true

						if skinwalker then
							skinwalkerCount += 1
						else
							safeCount += 1
						end

						setHighlight(item, skinwalker)
					else
						ignoredCount += 1
						removeHighlight(item)
					end
				end
			end
		end

		cleanup(npcFolder)

		status.Text = "Scanning patients and visitors"
		counts.Text = "Normal: " .. safeCount .. "  |  Anomalys: " .. skinwalkerCount
		tracked.Text = "Patients: " .. patientCount .. "  |  Visitors: " .. visitorCount
		ignored.Text = "Ignored: " .. ignoredCount
		forcedIgnored.Text = "Doctor, Ron, Barney, Ratthew ignored: " .. forcedIgnoredCount

		if skinwalkerCount > 0 then
			status.TextColor3 = Color3.fromRGB(255, 95, 110)
			stroke.Color = Color3.fromRGB(255, 55, 75)
		else
			status.TextColor3 = Color3.fromRGB(90, 255, 145)
			stroke.Color = Color3.fromRGB(60, 255, 130)
		end
	else
		for model in pairs(highlights) do
			removeHighlight(model)
		end

		status.Text = "Missing folder: workspace.NPCs"
		status.TextColor3 = Color3.fromRGB(255, 190, 80)
		counts.Text = "Normal: 0  |  Anomalys: 0"
		tracked.Text = "Patients: 0  |  Visitors: 0"
		ignored.Text = "Ignored: 0"
		forcedIgnored.Text = "Doctor, Ron, Barney, Ratthew ignored: 0"
	end

	task.wait(CHECK_DELAY)
end

Features & Information

a simple esp for animal hospital (REUPLOAD) the old one got deleted idk why so here is a real upload FOR PC PLAYERS Pressing h hides the ui
#anomaly#animal hospital#esp

Community Comments (9)

makaiphoenix5makaiphoenix5Jul 11, 2026

i cant work it

Replying to @makaiphoenix5
ToastmanToastmanJul 12, 2026

@makaiphoenix5 It works for all, most executors, including xeno and more!

d4shyd4shyJul 13, 2026

It works! It highlights normal characters green and anomalies red. It doesn't highlight Barney, Ron, Ratthew, Liz, or the officer. It also doesn't highlight other anomalies like the ghost or wall ones.

Replying to @d4shy
ToastmanToastmanJul 13, 2026

@d4shy i made it ignore the barney, ron, ratthew, liz, or officer as they are story forced and always a patient so there was no need to highlight them and as far as the ghost and those other anomalies this was made only to highlight the anomalies you shut the shutters on

aXL6aXL6Jul 14, 2026

There are still some monsters that have not been seen through

Replying to @aXL6
ToastmanToastmanJul 15, 2026

@aXL6 Could you note these monsters if they are monsters, like the ghost, bed monster, etc. It doesnt highlight them it only is for anomalies this is only made to highlight safe and skinwalkers

quasishquasishJul 22, 2026

made with ai btw,lol

Replying to @quasish
ToastmanToastmanJul 23, 2026

@quasish even if this was made with ai you couldnt recreate it so

6day136day13Aug 1, 2026

I like

More Scripts for Animal Hospital (Anomaly) 🧪