Number highlights ESPs speed and AI auto color bot
Key Required

Number highlights ESPs speed and AI auto color bot

🎨 Anime Paint by Numbersskeeplskeepl 2.4K views 371 executesUpdated Apr 3, 2026
Unrated
00
Lua Script•344 lines (14271 chars)
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local StarterGui = game:GetService("StarterGui")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local LocalPlayer = Players.LocalPlayer
local currentSelections = {}
local visitedBlocks = {}
local isMinimized = false
local speedEnabled = false
local autoWalkState = 0 
local currentTarget = nil
local fullAutoEnabled = false

local ZapEvent = ReplicatedStorage:WaitForChild("ZAP"):WaitForChild("ZAP_RELIABLE")

local function fireColorRemote(id)
    local colorId = tonumber(id)
    if colorId and ZapEvent then
        local b = buffer.create(2)
        buffer.writeu8(b, 0, 0x0F)
        buffer.writeu8(b, 1, colorId)
        ZapEvent:FireServer(b, {})
    end
end

local TracerBeam = Instance.new("Beam")
local PlayerAttachment = Instance.new("Attachment")
local TargetAttachment = Instance.new("Attachment")

TracerBeam.Attachment0 = PlayerAttachment
TracerBeam.Attachment1 = TargetAttachment
TracerBeam.Width0, TracerBeam.Width1 = 0.04, 0.04
TracerBeam.Color = ColorSequence.new(Color3.fromRGB(0, 255, 255))
TracerBeam.FaceCamera = true
TracerBeam.Enabled = false
TracerBeam.Parent = Workspace

local ScreenGui = Instance.new("ScreenGui")
local MainFrame = Instance.new("Frame")
local TextBox = Instance.new("TextBox")
local SearchButton = Instance.new("TextButton")
local ClearButton = Instance.new("TextButton")
local SpeedButton = Instance.new("TextButton")
local AutoWalkButton = Instance.new("TextButton")
local FullAutoButton = Instance.new("TextButton")
local MinButton = Instance.new("TextButton")
local PingLabel = Instance.new("TextLabel") 
local UICorner = Instance.new("UICorner")
local UIStrokeMain = Instance.new("UIStroke")

ScreenGui.Name = "ColorFinder_Final"
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
ScreenGui.ResetOnSpawn = false

MainFrame.Size = UDim2.new(0, 130, 0, 165) 
MainFrame.Position = UDim2.new(0.5, -65, 0.3, 0)
MainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
MainFrame.BackgroundTransparency = 0.2
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.Parent = ScreenGui

UICorner.CornerRadius = UDim.new(0, 8)
UICorner.Parent = MainFrame

UIStrokeMain.Thickness = 2
UIStrokeMain.Color = Color3.fromRGB(255, 255, 255)
UIStrokeMain.Transparency = 0.8
UIStrokeMain.Parent = MainFrame

PingLabel.Size = UDim2.new(0.4, 0, 0.08, 0)
PingLabel.Position = UDim2.new(0.55, 0, 0.86, 0)
PingLabel.BackgroundTransparency = 1
PingLabel.TextColor3 = Color3.new(0, 1, 0)
PingLabel.Text = "--- ms"
PingLabel.Font = Enum.Font.GothamBold
PingLabel.TextSize = 8
PingLabel.Parent = MainFrame

local function createBtn(btn, borderColor, text, pos)
    btn.Size = UDim2.new(0.85, 0, 0.11, 0)
    btn.Position = pos
    btn.BackgroundColor3 = borderColor
    btn.BackgroundTransparency = 0.9
    btn.TextColor3 = Color3.new(1, 1, 1)
    btn.Text = text
    btn.Font = Enum.Font.GothamBold
    btn.TextSize = 9
    btn.Parent = MainFrame
    Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4)
    local s = Instance.new("UIStroke", btn)
    s.Thickness = 1.2
    s.Color = borderColor
    s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
    return s
end

TextBox.Size = UDim2.new(0.85, 0, 0.11, 0)
TextBox.Position = UDim2.new(0.075, 0, 0.05, 0)
TextBox.BackgroundColor3 = Color3.new(1, 1, 1)
TextBox.BackgroundTransparency = 0.9
TextBox.TextColor3 = Color3.new(1, 1, 1)
TextBox.PlaceholderText = "ColorId..."
TextBox.Text = ""
TextBox.Font = Enum.Font.Gotham
TextBox.TextSize = 9
TextBox.Parent = MainFrame
Instance.new("UICorner", TextBox).CornerRadius = UDim.new(0, 4)

createBtn(SearchButton, Color3.fromRGB(0, 255, 255), "Highlight", UDim2.new(0.075, 0, 0.18, 0))
createBtn(ClearButton, Color3.fromRGB(255, 75, 75), "Clear", UDim2.new(0.075, 0, 0.31, 0))
local speedS = createBtn(SpeedButton, Color3.new(1, 1, 1), "Speed: OFF", UDim2.new(0.075, 0, 0.44, 0))
local walkS = createBtn(AutoWalkButton, Color3.new(1, 1, 1), "Auto: OFF", UDim2.new(0.075, 0, 0.57, 0))
local fullAutoS = createBtn(FullAutoButton, Color3.new(1, 1, 1), "Full: OFF", UDim2.new(0.075, 0, 0.70, 0))

MinButton.Size = UDim2.new(0.4, 0, 0.08, 0)
MinButton.Position = UDim2.new(0.05, 0, 0.86, 0)
MinButton.BackgroundTransparency = 1
MinButton.TextColor3 = Color3.new(0.6, 0.6, 0.6)
MinButton.Text = "Minimize"
MinButton.Font = Enum.Font.Gotham
MinButton.TextSize = 8
MinButton.Parent = MainFrame

task.spawn(function()
    while true do
        local p = math.floor(LocalPlayer:GetNetworkPing() * 1000)
        PingLabel.Text = p .. "ms"
        PingLabel.TextColor3 = p < 100 and Color3.new(0,1,0.4) or p < 200 and Color3.new(1,0.8,0) or Color3.new(1,0.2,0)
        task.wait(1)
    end
end)

local function clear()
    for b, d in pairs(currentSelections) do
        if d.SelectionBox then d.SelectionBox:Destroy() end
        if d.Connection then d.Connection:Disconnect() end
    end
    currentSelections, visitedBlocks, currentTarget, TracerBeam.Enabled = {}, {}, nil, false
end

local function scan(id)
    clear()
    local b = Workspace:FindFirstChild("Bases")
    if not b then return end
    local workingOnBase = LocalPlayer:GetAttribute("WorkingOn")
    if not workingOnBase then return end
    local playerBase = b:FindFirstChild(tostring(workingOnBase))
    if not playerBase then return end
    local bl = playerBase:FindFirstChild("Blocks")
    if bl then
        for _, block in pairs(bl:GetChildren()) do
            if tostring(block:GetAttribute("colorId")) == tostring(id) and block.CanTouch then
                local s = Instance.new("SelectionBox", block)
                s.Adornee, s.Color3, s.LineThickness = block, Color3.new(0,1,1), 0.02
                local c
                c = block:GetPropertyChangedSignal("CanTouch"):Connect(function()
                    if not block.CanTouch then
                        s:Destroy() c:Disconnect() currentSelections[block] = nil
                        if currentTarget == block then currentTarget = nil TracerBeam.Enabled = false end
                    end
                end)
                currentSelections[block] = {SelectionBox = s, Connection = c}
            end
        end
    end
end

local function getNear(iv)
    local c = LocalPlayer.Character
    local r = c and c:FindFirstChild("HumanoidRootPart")
    if not r then return nil end
    local nd, nb, rp = math.huge, nil, r.Position
    for b, _ in pairs(currentSelections) do
        if b and b.Parent and not (iv and visitedBlocks[b]) then
            local bp = b.Position
            local dx, dz = bp.X - rp.X, bp.Z - rp.Z
            local d = dx*dx + dz*dz
            if d < nd then nd, nb = d, b end
        end
    end
    return nb
end

RunService.Heartbeat:Connect(function()
    local c = LocalPlayer.Character
    if not c then return end
    local h, r = c:FindFirstChildOfClass("Humanoid"), c:FindFirstChild("HumanoidRootPart")
    if not h or not r then return end
    if speedEnabled then h.WalkSpeed = 32 end
    if autoWalkState > 0 then
        if not currentTarget or not currentSelections[currentTarget] then
            currentTarget = getNear(autoWalkState == 2)
            if currentTarget then
                PlayerAttachment.Parent, TargetAttachment.Parent, TracerBeam.Enabled = r, currentTarget, true
            else TracerBeam.Enabled = false end
        end
        if currentTarget then
            h:MoveTo(currentTarget.Position)
            if autoWalkState == 2 then
                local p1, p2 = r.Position, currentTarget.Position
                local dx, dz = p1.X - p2.X, p1.Z - p2.Z
                if (dx*dx + dz*dz) <= 2.25 then 
                    visitedBlocks[currentTarget], currentTarget, TracerBeam.Enabled = true, nil, false
                end
            end
        end
    else TracerBeam.Enabled = false end
end)

SpeedButton.MouseButton1Click:Connect(function()
    speedEnabled = not speedEnabled
    speedS.Color = speedEnabled and Color3.new(0,1,0.5) or Color3.new(1,1,1)
    SpeedButton.BackgroundTransparency = speedEnabled and 0.7 or 0.9
    SpeedButton.Text = speedEnabled and "Speed: ON" or "Speed: OFF"
    if not speedEnabled then local h = LocalPlayer.Character:FindFirstChildOfClass("Humanoid") if h then h.WalkSpeed = 16 end end
end)

AutoWalkButton.MouseButton1Click:Connect(function()
    autoWalkState = (autoWalkState + 1) % 3
    currentTarget, visitedBlocks = nil, {}
    
    if autoWalkState > 0 and next(currentSelections) == nil then
        for i = 1, 30 do
            fireColorRemote(i)
            scan(i)
            if next(currentSelections) ~= nil then
                TextBox.Text = tostring(i)
                break
            end
        end
    end

    if autoWalkState == 1 then
        walkS.Color, AutoWalkButton.Text, TracerBeam.Color = Color3.new(1,1,0), "Auto: SLOW", ColorSequence.new(Color3.new(1,1,0))
        AutoWalkButton.BackgroundTransparency = 0.7
    elseif autoWalkState == 2 then
        walkS.Color, AutoWalkButton.Text, TracerBeam.Color = Color3.new(0,1,1), "Auto: FAST", ColorSequence.new(Color3.new(0,1,1))
        AutoWalkButton.BackgroundTransparency = 0.7
    else
        walkS.Color, AutoWalkButton.Text, AutoWalkButton.BackgroundTransparency = Color3.new(1,1,1), "Auto: OFF", 0.9
        clear()
    end
end)

FullAutoButton.MouseButton1Click:Connect(function()
    fullAutoEnabled = not fullAutoEnabled
    if fullAutoEnabled then
        fullAutoS.Color = Color3.new(0,1,0.5)
        FullAutoButton.BackgroundTransparency = 0.7
        FullAutoButton.Text = "Full: ON"
        task.spawn(function()
            while fullAutoEnabled do
                local foundAny = false
                for i = 1, 30 do
                    if not fullAutoEnabled then break end
                    TextBox.Text = tostring(i)
                    fireColorRemote(i)
                    scan(i)
                    task.wait(0.1)
                    if next(currentSelections) ~= nil then
                        foundAny = true
                        autoWalkState = 2
                        walkS.Color, AutoWalkButton.Text, TracerBeam.Color = Color3.new(0,1,1), "Auto: FAST", ColorSequence.new(Color3.new(0,1,1))
                        AutoWalkButton.BackgroundTransparency = 0.7
                        currentTarget, visitedBlocks = nil, {}
                        
                        -- Wait for Fast Mode to visit all blocks
                        while fullAutoEnabled and next(currentSelections) ~= nil do
                            local allVisited = true
                            for b, _ in pairs(currentSelections) do
                                if not visitedBlocks[b] then
                                    allVisited = false
                                    break
                                end
                            end
                            
                            -- If fast mode visited everything, break to check if cleanup is needed
                            if allVisited and currentTarget == nil then
                                break
                            end
                            task.wait(0.5)
                        end
                        
                        if not fullAutoEnabled then break end
                        
                        -- If blocks STILL exist after Fast Mode finishes its pass, switch to Slow Mode
                        if next(currentSelections) ~= nil then
                            autoWalkState = 1
                            walkS.Color, AutoWalkButton.Text, TracerBeam.Color = Color3.new(1,1,0), "Auto: SLOW", ColorSequence.new(Color3.new(1,1,0))
                            AutoWalkButton.BackgroundTransparency = 0.7
                            currentTarget = nil
                            
                            -- Wait for Slow Mode to completely clear them
                            while fullAutoEnabled and next(currentSelections) ~= nil do
                                task.wait(0.5)
                            end
                        end
                        
                        if not fullAutoEnabled then break end
                        task.wait(0.5)
                    end
                end
                if not foundAny or not fullAutoEnabled then
                    fullAutoEnabled = false
                    fullAutoS.Color = Color3.new(1,1,1)
                    FullAutoButton.BackgroundTransparency = 0.9
                    FullAutoButton.Text = "Full: OFF"
                    autoWalkState = 0
                    walkS.Color, AutoWalkButton.Text, AutoWalkButton.BackgroundTransparency = Color3.new(1,1,1), "Auto: OFF", 0.9
                    break
                end
            end
        end)
    else
        fullAutoS.Color = Color3.new(1,1,1)
        FullAutoButton.BackgroundTransparency = 0.9
        FullAutoButton.Text = "Full: OFF"
    end
end)

MinButton.MouseButton1Click:Connect(function()
    isMinimized = not isMinimized
    if isMinimized then
        MainFrame.Size, MainFrame.Position = UDim2.new(0, 60, 0, 25), UDim2.new(0.5, -30, 0, 5)
        TextBox.Visible, SearchButton.Visible, ClearButton.Visible, SpeedButton.Visible, AutoWalkButton.Visible, PingLabel.Visible, FullAutoButton.Visible = false, false, false, false, false, false, false
        MinButton.Size, MinButton.Position, MinButton.Text = UDim2.new(1, 0, 1, 0), UDim2.new(0, 0, 0, 0), "Restore"
    else
        MainFrame.Size, MainFrame.Position = UDim2.new(0, 130, 0, 165), UDim2.new(0.5, -65, 0.3, 0)
        TextBox.Visible, SearchButton.Visible, ClearButton.Visible, SpeedButton.Visible, AutoWalkButton.Visible, PingLabel.Visible, FullAutoButton.Visible = true, true, true, true, true, true, true
        MinButton.Size, MinButton.Position, MinButton.Text = UDim2.new(0.4, 0, 0.08, 0), UDim2.new(0.05, 0, 0.86, 0), "Minimize"
    end
end)

SearchButton.MouseButton1Click:Connect(function() 
    if TextBox.Text ~= "" then 
        fireColorRemote(TextBox.Text)
        scan(TextBox.Text) 
    end 
end)
ClearButton.MouseButton1Click:Connect(function() clear() TextBox.Text = "" end)

Features & Information

FEATURES: - Block Highlighting: highlights the blocks according to their number so you can always find the blocks you haven't colored yet - 2x Speed Boost: boosts your speed to get to the blocks faster - Auto Color Bot: this uses AI to pathfind to the nearest number block to color it. Has two modes: • Slow mode: this guarantees the blocks get colored even in high ping, but it's quite slow • Fast mode: tries to color the blocks as fast as possible, rarely misses but is more likely to miss in very high ping - Ping Display: ping display so you can see your ping - [NEW] Full Auto Mode: you can literally go AFK and the bot will complete the whole image without missing anything BUG FIXES: + Fixed a bug where the blocks still get highlighted after being colored + Fixed a bug where it highlights other people's blocks + Fixed co-op highlight bug, you can co-op with others and use this script now + Optimized the full auto mode function, you can just click on the button now and it shouldn't stop until the whole image is complete + Optimized highlighting, you can type in the color ID and it will highlight and select it for you, you don't have to open the color picker and select the colors anymore
#open source

Community Comments (1)

florensiaflorensiaApr 8, 2026

best

More Scripts for 🎨 Anime Paint by Numbers