desync universal
Key RequiredUniversal

desync universal

Universal Scriptbobjsbobjs 1.7K views 512 executesUpdated May 25, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•981 lines (30848 chars)
-- ═══════════════════════════════════════════════════════════════
-- Desync GUI v1.0
-- Server-client desync: walk around invisibly, toggle off = TP to visual pos
-- ═══════════════════════════════════════════════════════════════

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

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

-- ═══════════════════════════════════════════════════════════════
-- State
-- ═══════════════════════════════════════════════════════════════
local desyncActive = false
local speedBoosted = false
local defaultSpeed = 16
local currentSpeed = 16
local invisSeat = nil
local invisWeld = nil
local savedCFrame = nil
local desyncLoop = nil

local hiddenPos = nil -- set dynamically to above current position

-- ═══════════════════════════════════════════════════════════════
-- Colors
-- ═══════════════════════════════════════════════════════════════
local C = {
    Bg          = Color3.fromRGB(12, 12, 16),
    Surface     = Color3.fromRGB(22, 22, 28),
    SurfaceMid  = Color3.fromRGB(30, 30, 38),
    SurfaceLt   = Color3.fromRGB(40, 40, 50),
    SurfaceHover= Color3.fromRGB(50, 50, 60),
    Border      = Color3.fromRGB(45, 45, 55),
    Accent      = Color3.fromRGB(120, 80, 255),
    AccentDim   = Color3.fromRGB(90, 55, 200),
    AccentGlow  = Color3.fromRGB(160, 120, 255),
    Green       = Color3.fromRGB(50, 205, 120),
    GreenDim    = Color3.fromRGB(35, 160, 90),
    Red         = Color3.fromRGB(255, 70, 70),
    RedDim      = Color3.fromRGB(200, 50, 50),
    Yellow      = Color3.fromRGB(255, 200, 50),
    Text        = Color3.fromRGB(210, 210, 220),
    TextBright  = Color3.fromRGB(255, 255, 255),
    TextDim     = Color3.fromRGB(130, 130, 150),
    TextMuted   = Color3.fromRGB(85, 85, 100),
    White       = Color3.fromRGB(255, 255, 255),
}

-- ═══════════════════════════════════════════════════════════════
-- Utility
-- ═══════════════════════════════════════════════════════════════
local function Create(class, props)
    local inst = Instance.new(class)
    for k, v in pairs(props or {}) do
        if k ~= "Parent" and k ~= "Children" then inst[k] = v end
    end
    if props and props.Parent then inst.Parent = props.Parent end
    if props and props.Children then
        for _, child in ipairs(props.Children) do child.Parent = inst end
    end
    return inst
end

local function AddCorner(parent, radius)
    local c = Instance.new("UICorner")
    c.CornerRadius = UDim.new(0, radius or 6)
    c.Parent = parent
    return c
end

local function AddStroke(parent, color, thickness, transparency)
    local s = Instance.new("UIStroke")
    s.Color = color or C.Border
    s.Thickness = thickness or 1
    s.Transparency = transparency or 0.5
    s.Parent = parent
    return s
end

local function AddPadding(parent, l, t, r, b)
    local p = Instance.new("UIPadding")
    p.PaddingLeft = UDim.new(0, l or 0)
    p.PaddingTop = UDim.new(0, t or 0)
    p.PaddingRight = UDim.new(0, r or 0)
    p.PaddingBottom = UDim.new(0, b or 0)
    p.Parent = parent
    return p
end

local function Smooth(inst, props, dur)
    return TweenService:Create(inst, TweenInfo.new(dur or 0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), props)
end

local function Spring(inst, props, dur)
    return TweenService:Create(inst, TweenInfo.new(dur or 0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), props)
end

local function Quick(inst, props)
    return TweenService:Create(inst, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), props)
end

local function PlaySound(id, vol, pitch)
    pcall(function()
        local s = Instance.new("Sound")
        s.SoundId = "rbxassetid://" .. tostring(id)
        s.Volume = vol or 0.2
        s.PlaybackSpeed = pitch or 1
        s.Parent = PlayerGui
        s:Play()
        s.Ended:Connect(function() s:Destroy() end)
        task.delay(3, function() if s and s.Parent then s:Destroy() end end)
    end)
end

-- ═══════════════════════════════════════════════════════════════
-- Notification
-- ═══════════════════════════════════════════════════════════════
local notifContainer = Create("ScreenGui", {
    Name = "Desync_Notifs",
    ResetOnSpawn = false,
    ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
    Parent = PlayerGui,
})
Create("UIListLayout", {
    SortOrder = Enum.SortOrder.LayoutOrder,
    Padding = UDim.new(0, 4),
    VerticalAlignment = Enum.VerticalAlignment.Top,
    HorizontalAlignment = Enum.HorizontalAlignment.Right,
    Parent = notifContainer,
})
local np = Instance.new("UIPadding")
np.PaddingTop = UDim.new(0, 10)
np.PaddingRight = UDim.new(0, 10)
np.Parent = notifContainer

local function Notify(text, notifType)
    PlaySound(6895079853, 0.15, 1.1)
    local types = {
        success = C.Green,
        error = C.Red,
        info = C.Accent,
        warning = C.Yellow,
    }
    local col = types[notifType] or types.info

    local notif = Create("Frame", {
        BackgroundColor3 = C.Surface,
        BackgroundTransparency = 0.05,
        Size = UDim2.new(0, 240, 0, 34),
        BorderSizePixel = 0,
        Position = UDim2.new(1.5, 0, 0, 0),
        Parent = notifContainer,
    })
    AddCorner(notif, 6)
    AddStroke(notif, C.Border, 1, 0.6)

    Create("Frame", {
        BackgroundColor3 = col,
        Size = UDim2.new(0, 3, 1, 0),
        BorderSizePixel = 0,
        Parent = notif,
    })

    Create("TextLabel", {
        Text = text,
        Font = Enum.Font.GothamBold,
        TextSize = 11,
        TextColor3 = C.Text,
        TextXAlignment = Enum.TextXAlignment.Left,
        BackgroundTransparency = 1,
        Size = UDim2.new(1, -18, 1, 0),
        Position = UDim2.new(0, 12, 0, 0),
        TextTruncate = Enum.TextTruncate.AtEnd,
        Parent = notif,
    })

    Spring(notif, { Position = UDim2.new(1, 0, 0, 0) }, 0.4):Play()

    task.delay(3, function()
        if notif and notif.Parent then
            Smooth(notif, { Position = UDim2.new(1.5, 0, 0, 0), BackgroundTransparency = 1 }, 0.25):Play()
            task.delay(0.3, function() if notif and notif.Parent then notif:Destroy() end end)
        end
    end)
end

-- ═══════════════════════════════════════════════════════════════
-- Desync Logic
-- ═══════════════════════════════════════════════════════════════
local function getRoot(char)
    return char:FindFirstChild("HumanoidRootPart")
        or char:FindFirstChild("Torso")
        or char:FindFirstChild("UpperTorso")
end

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

local function getHiddenPos(root)
    local pos = root and root.Position or Vector3.new(0, 100, 0)
    return Vector3.new(pos.X, pos.Y + 50000, pos.Z)
end

local function setCharacterTransparency(char, trans)
    for _, part in pairs(char:GetDescendants()) do
        if part:IsA("BasePart") or part:IsA("Decal") then
            pcall(function() part.Transparency = trans end)
        end
    end
    -- Keep face visible at low transparency
    local head = char:FindFirstChild("Head")
    if head then
        local face = head:FindFirstChild("face")
        if face then pcall(function() face.Transparency = math.min(trans, 0.7) end) end
    end
end

local function enableDesync()
    local char = LocalPlayer.Character
    if not char then Notify("No character found!", "error") return false end
    local root = getRoot(char)
    local torso = getTorso(char)
    if not root or not torso then Notify("Missing body parts!", "error") return false end

    -- Step 1: Save current position (your ghost body stays here)
    savedCFrame = root.CFrame

    -- Step 2: Get safe hidden spot WAY ABOVE the map
    hiddenPos = getHiddenPos(root)

    -- Step 3: Move character up to hidden spot (server registers this)
    char:MoveTo(hiddenPos)
    task.wait()

    -- Step 4: Create invisible seat at hidden spot
    invisSeat = Instance.new("Seat")
    invisSeat.Name = "DesyncSeat_" .. math.random(10000, 99999)
    invisSeat.Anchored = false
    invisSeat.CanCollide = false
    invisSeat.Transparency = 1
    invisSeat.Size = Vector3.new(2, 1, 1)
    invisSeat.Position = hiddenPos
    invisSeat.Parent = workspace

    -- Step 5: Weld seat to torso
    invisWeld = Instance.new("Weld")
    invisWeld.Name = "DesyncWeld"
    invisWeld.Part0 = invisSeat
    invisWeld.Part1 = torso
    invisWeld.Parent = invisSeat

    -- Step 6: Snap seat back to saved position (ghost body spot)
    task.wait()
    invisSeat.CFrame = savedCFrame

    -- Step 7: Make character transparent
    setCharacterTransparency(char, desyncTransparency)

    -- Step 7: Start desync maintenance loop
    -- Prevents server corrections + keeps character transparent
    desyncLoop = RunService.Heartbeat:Connect(function()
        if not desyncActive then return end
        -- Only maintain if seat is still alive
        if invisSeat and invisSeat.Parent then
            -- Keep character transparent (some games reset it)
            local c = LocalPlayer.Character
            if c then
                for _, part in pairs(c:GetDescendants()) do
                    if part:IsA("BasePart") or part:IsA("Decal") then
                        if part.Transparency < desyncTransparency - 0.05 then
                            pcall(function() part.Transparency = desyncTransparency end)
                        end
                    end
                end
            end
        end
    end)

    desyncActive = true
    Notify("Desync ON - You are invisible!", "success")
    return true
end

local function disableDesync()
    -- Step 1: Save current visual position (where the player walked to)
    local char = LocalPlayer.Character
    local currentVisualPos = nil
    if char then
        local root = getRoot(char)
        if root then
            currentVisualPos = root.CFrame
        end
    end

    -- Step 2: Stop the maintenance loop
    if desyncLoop then
        desyncLoop:Disconnect()
        desyncLoop = nil
    end

    -- Step 3: Destroy seat + weld
    if invisSeat and invisSeat.Parent then
        invisSeat:Destroy()
    end
    invisSeat = nil
    invisWeld = nil

    -- Step 4: Restore character transparency
    if char then
        setCharacterTransparency(char, 0)
    end

    -- Step 5: Teleport to where the player visually was (not the hidden spot)
    if currentVisualPos and char then
        task.wait(0.1)
        pcall(function()
            char:PivotTo(currentVisualPos)
        end)
        -- Fallback if PivotTo doesn't work
        pcall(function()
            char:MoveTo(currentVisualPos.Position)
        end)
    end

    desyncActive = false
    savedCFrame = nil
    Notify("Desync OFF - TP'd to visual pos!", "info")
end

-- ═══════════════════════════════════════════════════════════════
-- GUI
-- ═══════════════════════════════════════════════════════════════
local gui = Create("ScreenGui", {
    Name = "DesyncGUI",
    ResetOnSpawn = false,
    ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
    Parent = PlayerGui,
})

local main = Create("Frame", {
    Name = "Main",
    BackgroundColor3 = C.Bg,
    Size = UDim2.new(0, 200, 0, 0),
    Position = UDim2.new(0, 20, 0.5, -100),
    BorderSizePixel = 0,
    Parent = gui,
})
AddCorner(main, 10)
AddStroke(main, C.Border, 1, 0.4)

-- Glow
local glow = Create("Frame", {
    BackgroundColor3 = C.Accent,
    BackgroundTransparency = 0.97,
    Size = UDim2.new(1, 6, 1, 6),
    Position = UDim2.new(0, -3, 0, -3),
    ZIndex = -1,
    Parent = main,
})
AddCorner(glow, 12)

-- Content
local content = Create("Frame", {
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 0),
    AutomaticSize = Enum.AutomaticSize.Y,
    Parent = main,
})
local contentLayout = Create("UIListLayout", {
    SortOrder = Enum.SortOrder.LayoutOrder,
    Padding = UDim.new(0, 0),
    Parent = content,
})
AddPadding(content, 12, 12, 12, 12)

-- ═══ Title Bar ═══
local titleBar = Create("Frame", {
    BackgroundColor3 = C.Surface,
    Size = UDim2.new(1, 0, 0, 34),
    BorderSizePixel = 0,
    LayoutOrder = 0,
    Parent = content,
})
AddCorner(titleBar, 8)
Create("Frame", {
    BackgroundColor3 = C.Surface,
    Size = UDim2.new(1, 0, 0, 10),
    Position = UDim2.new(0, 0, 1, -5),
    BorderSizePixel = 0,
    Parent = titleBar,
})

-- Logo
local logoDot = Create("Frame", {
    BackgroundColor3 = C.Accent,
    Size = UDim2.new(0, 8, 0, 8),
    Position = UDim2.new(0, 12, 0.5, 0),
    AnchorPoint = Vector2.new(0, 0.5),
    Parent = titleBar,
})
AddCorner(logoDot, 4)

Create("TextLabel", {
    Text = "DESYNC",
    Font = Enum.Font.GothamBold,
    TextSize = 13,
    TextColor3 = C.TextBright,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, -50, 1, 0),
    Position = UDim2.new(0, 26, 0, 0),
    TextXAlignment = Enum.TextXAlignment.Left,
    Parent = titleBar,
})

-- Status dot
local statusDot = Create("Frame", {
    BackgroundColor3 = C.TextMuted,
    Size = UDim2.new(0, 7, 0, 7),
    Position = UDim2.new(1, -12, 0.5, 0),
    AnchorPoint = Vector2.new(0, 0.5),
    Parent = titleBar,
})
AddCorner(statusDot, 4)

-- ═══ Dragging ═══
local dragging = false
local dragStart, startPos
titleBar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        dragStart = input.Position
        startPos = main.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then dragging = false end
        end)
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local delta = input.Position - dragStart
        main.Position = UDim2.new(
            startPos.X.Scale, startPos.X.Offset + delta.X,
            startPos.Y.Scale, startPos.Y.Offset + delta.Y
        )
    end
end)

-- Spacer
Create("Frame", {
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 8),
    LayoutOrder = 1,
    Parent = content,
})

-- ═══ Desync Button ═══
local desyncRow = Create("Frame", {
    BackgroundColor3 = C.Surface,
    BackgroundTransparency = 0.7,
    Size = UDim2.new(1, 0, 0, 44),
    BorderSizePixel = 0,
    LayoutOrder = 2,
    Parent = content,
})
AddCorner(desyncRow, 6)

Create("TextLabel", {
    Text = "Desync",
    Font = Enum.Font.GothamBold,
    TextSize = 11,
    TextColor3 = C.TextBright,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 14),
    Position = UDim2.new(0, 10, 0, 3),
    Parent = desyncRow,
})
Create("TextLabel", {
    Text = "Server-client desync",
    Font = Enum.Font.Gotham,
    TextSize = 8,
    TextColor3 = C.TextMuted,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 12),
    Position = UDim2.new(0, 10, 0, 18),
    Parent = desyncRow,
})

local desyncBtn = Create("TextButton", {
    Text = "OFF",
    Font = Enum.Font.GothamBold,
    TextSize = 10,
    TextColor3 = C.White,
    BackgroundColor3 = C.SurfaceLt,
    Size = UDim2.new(0, 56, 0, 22),
    Position = UDim2.new(1, -66, 0.5, 0),
    AnchorPoint = Vector2.new(0, 0.5),
    Parent = desyncRow,
})
AddCorner(desyncBtn, 5)

desyncRow.MouseEnter:Connect(function() Quick(desyncRow, { BackgroundTransparency = 0.55 }):Play() end)
desyncRow.MouseLeave:Connect(function() Quick(desyncRow, { BackgroundTransparency = 0.7 }):Play() end)

desyncBtn.MouseButton1Click:Connect(function()
    PlaySound(6895079853, 0.2, 1)
    Quick(desyncBtn, { Size = UDim2.new(0, 50, 0, 19) }):Play()
    task.delay(0.1, function()
        Spring(desyncBtn, { Size = UDim2.new(0, 56, 0, 22) }, 0.3):Play()
    end)

    if not desyncActive then
        local ok = enableDesync()
        if ok then
            desyncBtn.Text = "ON"
            desyncBtn.BackgroundColor3 = C.AccentDim
            statusDot.BackgroundColor3 = C.Green
        end
    else
        disableDesync()
        desyncBtn.Text = "OFF"
        desyncBtn.BackgroundColor3 = C.SurfaceLt
        statusDot.BackgroundColor3 = C.TextMuted
        -- Reset speed too
        if speedBoosted then
            speedBoosted = false
            speedBtn.Text = "Speed OFF"
            speedBtn.BackgroundColor3 = C.SurfaceLt
            local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
            if hum then hum.WalkSpeed = defaultSpeed end
        end
    end
end)

-- ═══ Speed Button ═══
local speedRow = Create("Frame", {
    BackgroundColor3 = C.Surface,
    BackgroundTransparency = 0.7,
    Size = UDim2.new(1, 0, 0, 44),
    BorderSizePixel = 0,
    LayoutOrder = 3,
    Parent = content,
})
AddCorner(speedRow, 6)

Create("TextLabel", {
    Text = "Speed Boost",
    Font = Enum.Font.GothamBold,
    TextSize = 11,
    TextColor3 = C.TextBright,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 14),
    Position = UDim2.new(0, 10, 0, 3),
    Parent = speedRow,
})
Create("TextLabel", {
    Text = "Faster movement while desynced",
    Font = Enum.Font.Gotham,
    TextSize = 8,
    TextColor3 = C.TextMuted,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 12),
    Position = UDim2.new(0, 10, 0, 18),
    Parent = speedRow,
})

local speedBtn = Create("TextButton", {
    Text = "Speed OFF",
    Font = Enum.Font.GothamBold,
    TextSize = 9,
    TextColor3 = C.White,
    BackgroundColor3 = C.SurfaceLt,
    Size = UDim2.new(0, 56, 0, 22),
    Position = UDim2.new(1, -66, 0.5, 0),
    AnchorPoint = Vector2.new(0, 0.5),
    Parent = speedRow,
})
AddCorner(speedBtn, 5)

speedRow.MouseEnter:Connect(function() Quick(speedRow, { BackgroundTransparency = 0.55 }):Play() end)
speedRow.MouseLeave:Connect(function() Quick(speedRow, { BackgroundTransparency = 0.7 }):Play() end)

speedBtn.MouseButton1Click:Connect(function()
    PlaySound(6895079853, 0.15, 1.2)
    Quick(speedBtn, { Size = UDim2.new(0, 50, 0, 19) }):Play()
    task.delay(0.1, function()
        Spring(speedBtn, { Size = UDim2.new(0, 56, 0, 22) }, 0.3):Play()
    end)

    speedBoosted = not speedBoosted
    local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
    if hum then
        if speedBoosted then
            hum.WalkSpeed = 100
            speedBtn.Text = "Speed ON"
            speedBtn.BackgroundColor3 = C.GreenDim
            Notify("Speed: 100", "success")
        else
            hum.WalkSpeed = defaultSpeed
            speedBtn.Text = "Speed OFF"
            speedBtn.BackgroundColor3 = C.SurfaceLt
            Notify("Speed: " .. defaultSpeed, "info")
        end
    end
end)

-- Spacer
Create("Frame", {
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 8),
    LayoutOrder = 4,
    Parent = content,
})

-- ═══ Speed Slider ═══
local sliderSection = Create("Frame", {
    BackgroundColor3 = C.Surface,
    BackgroundTransparency = 0.7,
    Size = UDim2.new(1, 0, 0, 52),
    BorderSizePixel = 0,
    LayoutOrder = 5,
    Parent = content,
})
AddCorner(sliderSection, 6)

Create("TextLabel", {
    Text = "Speed Value",
    Font = Enum.Font.GothamBold,
    TextSize = 11,
    TextColor3 = C.TextBright,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, -65, 0, 14),
    Position = UDim2.new(0, 10, 0, 4),
    Parent = sliderSection,
})
Create("TextLabel", {
    Text = "Set walk speed when boosted",
    Font = Enum.Font.Gotham,
    TextSize = 8,
    TextColor3 = C.TextMuted,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, -65, 0, 12),
    Position = UDim2.new(0, 10, 0, 18),
    Parent = sliderSection,
})

-- Value badge
local speedVal = Create("TextLabel", {
    Text = "100",
    Font = Enum.Font.GothamBold,
    TextSize = 10,
    TextColor3 = C.AccentGlow,
    BackgroundColor3 = C.SurfaceMid,
    Size = UDim2.new(0, 44, 0, 18),
    Position = UDim2.new(1, -54, 0, 4),
    Parent = sliderSection,
})
AddCorner(speedVal, 4)
AddStroke(speedVal, C.Border, 1, 0.5)

-- Track
local track = Create("Frame", {
    BackgroundColor3 = C.SurfaceLt,
    Size = UDim2.new(1, -20, 0, 4),
    Position = UDim2.new(0, 10, 1, -12),
    Parent = sliderSection,
})
AddCorner(track, 2)

local fill = Create("Frame", {
    BackgroundColor3 = C.Accent,
    Size = UDim2.new(0, 0, 1, 0),
    Position = UDim2.new(0, 0, 0, 0),
    Parent = track,
})
AddCorner(fill, 2)

local sliderThumb = Create("Frame", {
    BackgroundColor3 = C.White,
    Size = UDim2.new(0, 12, 0, 12),
    Position = UDim2.new(0, -6, 0.5, 0),
    Parent = track,
})
AddCorner(sliderThumb, 6)

local speedSliderVal = 100
local speedMin, speedMax, speedStep = 16, 500, 1

local function updateSpeedSlider(val)
    speedSliderVal = math.clamp(math.round(val / speedStep) * speedStep, speedMin, speedMax)
    currentSpeed = speedSliderVal
    local pct = (speedSliderVal - speedMin) / (speedMax - speedMin)
    pct = math.clamp(pct, 0, 1)
    fill.Size = UDim2.new(pct, 0, 1, 0)
    sliderThumb.Position = UDim2.new(pct, -6, 0.5, 0)
    speedVal.Text = tostring(speedSliderVal)
    -- If speed boost is on, apply immediately
    if speedBoosted then
        local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
        if hum then hum.WalkSpeed = speedSliderVal end
    end
end

updateSpeedSlider(100)

sliderSection.MouseEnter:Connect(function() Quick(sliderSection, { BackgroundTransparency = 0.55 }):Play() end)
sliderSection.MouseLeave:Connect(function() Quick(sliderSection, { BackgroundTransparency = 0.7 }):Play() end)

local sliderDragging = false
sliderThumb.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        sliderDragging = true
        PlaySound(6895079853, 0.1, 0.8)
    end
end)
track.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        sliderDragging = true
        PlaySound(6895079853, 0.1, 0.8)
        local relX = (input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X
        updateSpeedSlider(speedMin + relX * (speedMax - speedMin))
    end
end)
UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        if sliderDragging then sliderDragging = false end
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if sliderDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local relX = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
        updateSpeedSlider(speedMin + relX * (speedMax - speedMin))
    end
end)

-- Spacer
Create("Frame", {
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 8),
    LayoutOrder = 6,
    Parent = content,
})

-- ═══ Transparency Slider ═══
local transSection = Create("Frame", {
    BackgroundColor3 = C.Surface,
    BackgroundTransparency = 0.7,
    Size = UDim2.new(1, 0, 0, 52),
    BorderSizePixel = 0,
    LayoutOrder = 7,
    Parent = content,
})
AddCorner(transSection, 6)

Create("TextLabel", {
    Text = "Visibility",
    Font = Enum.Font.GothamBold,
    TextSize = 11,
    TextColor3 = C.TextBright,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, -65, 0, 14),
    Position = UDim2.new(0, 10, 0, 4),
    Parent = transSection,
})
Create("TextLabel", {
    Text = "Character transparency",
    Font = Enum.Font.Gotham,
    TextSize = 8,
    TextColor3 = C.TextMuted,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, -65, 0, 12),
    Position = UDim2.new(0, 10, 0, 18),
    Parent = transSection,
})

local transVal = Create("TextLabel", {
    Text = "0.5",
    Font = Enum.Font.GothamBold,
    TextSize = 10,
    TextColor3 = C.AccentGlow,
    BackgroundColor3 = C.SurfaceMid,
    Size = UDim2.new(0, 44, 0, 18),
    Position = UDim2.new(1, -54, 0, 4),
    Parent = transSection,
})
AddCorner(transVal, 4)
AddStroke(transVal, C.Border, 1, 0.5)

local transTrack = Create("Frame", {
    BackgroundColor3 = C.SurfaceLt,
    Size = UDim2.new(1, -20, 0, 4),
    Position = UDim2.new(0, 10, 1, -12),
    Parent = transSection,
})
AddCorner(transTrack, 2)

local transFill = Create("Frame", {
    BackgroundColor3 = C.Accent,
    Size = UDim2.new(0, 0, 1, 0),
    Position = UDim2.new(0, 0, 0, 0),
    Parent = transTrack,
})
AddCorner(transFill, 2)

local transThumb = Create("Frame", {
    BackgroundColor3 = C.White,
    Size = UDim2.new(0, 12, 0, 12),
    Position = UDim2.new(0, -6, 0.5, 0),
    Parent = transTrack,
})
AddCorner(transThumb, 6)

local transSliderVal = 0.5
local transMin, transMax, transStep = 0, 1, 0.05
local desyncTransparency = 0.5

local function updateTransSlider(val)
    transSliderVal = math.clamp(math.round(val / transStep) * transStep, transMin, transMax)
    desyncTransparency = transSliderVal
    local pct = (transSliderVal - transMin) / (transMax - transMin)
    pct = math.clamp(pct, 0, 1)
    transFill.Size = UDim2.new(pct, 0, 1, 0)
    transThumb.Position = UDim2.new(pct, -6, 0.5, 0)
    transVal.Text = tostring(transSliderVal)
    -- Apply live if desync is active
    if desyncActive and LocalPlayer.Character then
        setCharacterTransparency(LocalPlayer.Character, desyncTransparency)
    end
end

updateTransSlider(0.5)

transSection.MouseEnter:Connect(function() Quick(transSection, { BackgroundTransparency = 0.55 }):Play() end)
transSection.MouseLeave:Connect(function() Quick(transSection, { BackgroundTransparency = 0.7 }):Play() end)

local transDragging = false
transThumb.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        transDragging = true
        PlaySound(6895079853, 0.1, 0.8)
    end
end)
transTrack.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        transDragging = true
        PlaySound(6895079853, 0.1, 0.8)
        local relX = (input.Position.X - transTrack.AbsolutePosition.X) / transTrack.AbsoluteSize.X
        updateTransSlider(transMin + relX * (transMax - transMin))
    end
end)
UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        if transDragging then transDragging = false end
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if transDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local relX = math.clamp((input.Position.X - transTrack.AbsolutePosition.X) / transTrack.AbsoluteSize.X, 0, 1)
        updateTransSlider(transMin + relX * (transMax - transMin))
    end
end)

-- Spacer
Create("Frame", {
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 8),
    LayoutOrder = 8,
    Parent = content,
})

-- ═══ Info ═══
Create("TextLabel", {
    Text = "Toggle desync on, walk around\nfreely, then toggle off to TP\nto where you are visually.",
    Font = Enum.Font.Gotham,
    TextSize = 8,
    TextColor3 = C.TextMuted,
    TextXAlignment = Enum.TextXAlignment.Left,
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 30),
    TextWrapped = true,
    LayoutOrder = 9,
    Parent = content,
})

-- Bottom spacer
Create("Frame", {
    BackgroundTransparency = 1,
    Size = UDim2.new(1, 0, 0, 6),
    LayoutOrder = 10,
    Parent = content,
})

-- ═══ Keyboard Shortcut ═══
UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if input.KeyCode == Enum.KeyCode.X then
        desyncBtn.MouseButton1Click:Fire()
    end
end)

-- ═══ Reset on respawn ═══
LocalPlayer.CharacterAdded:Connect(function(char)
    -- Reset state
    if desyncActive then
        desyncActive = false
        if desyncLoop then desyncLoop:Disconnect() desyncLoop = nil end
        if invisSeat and invisSeat.Parent then invisSeat:Destroy() end
        invisSeat = nil
        invisWeld = nil
        savedCFrame = nil
        desyncBtn.Text = "OFF"
        desyncBtn.BackgroundColor3 = C.SurfaceLt
        statusDot.BackgroundColor3 = C.TextMuted
    end
    speedBoosted = false
    speedBtn.Text = "Speed OFF"
    speedBtn.BackgroundColor3 = C.SurfaceLt
    Notify("Desync reset (respawn)", "warning")
end)

-- ═══ Anti-seat-cleanup loop ═══
-- Some games delete workspace parts periodically, silently recreate the seat instead of turning off
task.spawn(function()
    while task.wait(0.5) do
        if desyncActive and (not invisSeat or not invisSeat.Parent) then
            -- Seat got deleted by the game, silently recreate it
            local char = LocalPlayer.Character
            if not char then continue end
            local root = getRoot(char)
            local torso = getTorso(char)
            if not root or not torso then continue end

            -- Recreate seat at hidden pos
            invisSeat = Instance.new("Seat")
            invisSeat.Name = "DesyncSeat_" .. math.random(10000, 99999)
            invisSeat.Anchored = false
            invisSeat.CanCollide = false
            invisSeat.Transparency = 1
            invisSeat.Size = Vector3.new(2, 1, 1)
            invisSeat.Position = hiddenPos
            invisSeat.Parent = workspace

            -- Weld it
            invisWeld = Instance.new("Weld")
            invisWeld.Name = "DesyncWeld"
            invisWeld.Part0 = invisSeat
            invisWeld.Part1 = torso
            invisWeld.Parent = invisSeat

            task.wait()
            -- Snap seat to where the player visually is
            invisSeat.CFrame = root.CFrame
        end
    end
end)

-- ═══ Open animation ═══
main.Size = UDim2.new(0, 0, 0, 0)
main.BackgroundTransparency = 1
task.delay(0.05, function()
    PlaySound(6895079853, 0.25, 0.9)
    Spring(main, {
        Size = UDim2.new(0, 200, 0, 390),
        BackgroundTransparency = 0.04,
    }, 0.6):Play()
    Smooth(glow, { BackgroundTransparency = 0.95 }, 0.4):Play()
end)

Notify("Desync loaded! Press X to toggle", "success")

Features & Information

desync working.
#desync#universal#serversided#hub#script

Community Comments (3)

bobjsbobjsMay 25, 2026

finally made working desync, try it for urselves guys :D

wooxwooxMay 25, 2026

do you need raknet library to make this work?

bobjsbobjsJun 23, 2026

no rakent library

More Scripts for Universal Scripts