
Key Required VerifiedUniversal

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



i cant work it
@makaiphoenix5 It works for all, most executors, including xeno and more!
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.
@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
There are still some monsters that have not been seen through
@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
made with ai btw,lol
@quasish even if this was made with ai you couldnt recreate it so
I like