--[[ Hey users! If you are reading this checking if this is bait this isn't why would it be reviewed also if you are reading this because your bored keep reading it. Hey reviewers! If you are reading this trying to verify the script could you tell me what u should improve in the comments and maybe a compliment! :D ]] local Players = game:GetService("Players") local UIS = game:GetService("UserInputService") local SoundService = game:GetService("SoundService") local Tween = game:GetService("TweenService") local LP = Players.LocalPlayer local PG = LP:WaitForChild("PlayerGui") local Theme = { Accent = Color3.fromRGB(96, 165, 250), Accent2 = Color3.fromRGB(147, 51, 234), BgTop = Color3.fromRGB(22, 22, 32), BgBottom = Color3.fromRGB(14, 14, 22), Header = Color3.fromRGB(28, 28, 40), Sidebar = Color3.fromRGB(18, 18, 28), Card = Color3.fromRGB(32, 32, 46), Text = Color3.fromRGB(238, 238, 248), Dim = Color3.fromRGB(148, 148, 168), Btn = Color3.fromRGB(38, 38, 54), BtnHi = Color3.fromRGB(52, 52, 72), Success = Color3.fromRGB(52, 211, 153), Danger = Color3.fromRGB(248, 113, 113), Warn = Color3.fromRGB(251, 191, 36), } local BG_TRANSPARENCY = 0.15 local state = { sound = nil, soundId = "", playing = false, pitch = 1, speed = 1, volume = 0.5, looped = false, } local connections = {} local function track(c) table.insert(connections, c) return c end local function tween(obj, props, dur) Tween:Create(obj, TweenInfo.new(dur or 0.16, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), props):Play() end local function addHover(btn, base, hover) btn.MouseEnter:Connect(function() tween(btn, {BackgroundColor3 = hover}) end) btn.MouseLeave:Connect(function() tween(btn, {BackgroundColor3 = base}) end) end local gui = Instance.new("ScreenGui") gui.Name = "BoomboxMusic" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling gui.Parent = PG local panel = Instance.new("Frame") panel.Name = "Panel" panel.Size = UDim2.fromOffset(620, 460) panel.Position = UDim2.new(0, 40, 0, 80) panel.BackgroundColor3 = Color3.new(1, 1, 1) panel.BackgroundTransparency = BG_TRANSPARENCY panel.BorderSizePixel = 0 panel.Active = true panel.Parent = gui Instance.new("UICorner", panel).CornerRadius = UDim.new(0, 14) local panelGrad = Instance.new("UIGradient") panelGrad.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Theme.BgTop), ColorSequenceKeypoint.new(1, Theme.BgBottom), }) panelGrad.Rotation = 135 panelGrad.Parent = panel local panelStroke = Instance.new("UIStroke", panel) panelStroke.Color = Theme.Accent panelStroke.Thickness = 1.5 panelStroke.Transparency = 0.55 local HEADER_H = 46 local header = Instance.new("Frame") header.Name = "Header" header.Size = UDim2.new(1, 0, 0, HEADER_H) header.BackgroundColor3 = Theme.Header header.BackgroundTransparency = 0.05 header.BorderSizePixel = 0 header.ZIndex = 2 header.Parent = panel Instance.new("UICorner", header).CornerRadius = UDim.new(0, 14) local headerBottomFix = Instance.new("Frame") headerBottomFix.Size = UDim2.new(1, 0, 0, 16) headerBottomFix.Position = UDim2.new(0, 0, 1, -16) headerBottomFix.BackgroundColor3 = Theme.Header headerBottomFix.BackgroundTransparency = 0.05 headerBottomFix.BorderSizePixel = 0 headerBottomFix.ZIndex = 3 headerBottomFix.Parent = header local accentLine = Instance.new("Frame") accentLine.Size = UDim2.new(1, -24, 0, 2) accentLine.Position = UDim2.new(0, 12, 0, 0) accentLine.BackgroundColor3 = Theme.Accent accentLine.BorderSizePixel = 0 accentLine.ZIndex = 5 accentLine.Parent = header Instance.new("UICorner", accentLine).CornerRadius = UDim.new(1, 0) local dragHandle = Instance.new("TextButton") dragHandle.Size = UDim2.new(1, -110, 1, 0) dragHandle.BackgroundTransparency = 1 dragHandle.Text = "" dragHandle.AutoButtonColor = false dragHandle.ZIndex = 4 dragHandle.Parent = header local titleLbl = Instance.new("TextLabel") titleLbl.Size = UDim2.new(1, -110, 1, 0) titleLbl.Position = UDim2.fromOffset(20, 0) titleLbl.BackgroundTransparency = 1 titleLbl.Font = Enum.Font.GothamBold titleLbl.TextSize = 15 titleLbl.TextXAlignment = Enum.TextXAlignment.Left titleLbl.TextColor3 = Theme.Text titleLbl.Text = "♫ BOOMBOX MUSIC" titleLbl.ZIndex = 5 titleLbl.Parent = header local tagLbl = Instance.new("TextLabel") tagLbl.Size = UDim2.new(1, -110, 0, 12) tagLbl.Position = UDim2.new(0, 20, 0, 28) tagLbl.BackgroundTransparency = 1 tagLbl.Font = Enum.Font.Gotham tagLbl.TextSize = 10 tagLbl.TextXAlignment = Enum.TextXAlignment.Left tagLbl.TextColor3 = Theme.Dim tagLbl.Text = "by N00XC" tagLbl.ZIndex = 5 tagLbl.Parent = header local function makeWinBtn(txt, xoff, col) local b = Instance.new("TextButton") b.Size = UDim2.fromOffset(30, 26) b.Position = UDim2.new(1, xoff, 0, 10) b.BackgroundColor3 = col or Theme.Btn b.BorderSizePixel = 0 b.Font = Enum.Font.GothamBold b.TextSize = 13 b.TextColor3 = Theme.Text b.Text = txt b.AutoButtonColor = false b.ZIndex = 6 b.Parent = header Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6) addHover(b, col or Theme.Btn, col and Color3.fromRGB(220, 90, 90) or Theme.BtnHi) return b end local minBtn = makeWinBtn("–", -74) local closeBtn = makeWinBtn("✕", -40, Theme.Danger) local SIDEBAR_W = 152 local sidebar = Instance.new("Frame") sidebar.Name = "Sidebar" sidebar.Size = UDim2.new(0, SIDEBAR_W, 1, -(HEADER_H + 26)) sidebar.Position = UDim2.new(0, 0, 0, HEADER_H) sidebar.BackgroundColor3 = Theme.Sidebar sidebar.BackgroundTransparency = 0.15 sidebar.BorderSizePixel = 0 sidebar.Parent = panel local sideScroll = Instance.new("ScrollingFrame") sideScroll.Size = UDim2.fromScale(1, 1) sideScroll.BackgroundTransparency = 1 sideScroll.BorderSizePixel = 0 sideScroll.ScrollBarThickness = 3 sideScroll.ScrollBarImageColor3 = Theme.Accent sideScroll.ScrollBarImageTransparency = 0.7 sideScroll.CanvasSize = UDim2.new() sideScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y sideScroll.Parent = sidebar local sideLayout = Instance.new("UIListLayout") sideLayout.Padding = UDim.new(0, 4) sideLayout.SortOrder = Enum.SortOrder.LayoutOrder sideLayout.Parent = sideScroll local sidePad = Instance.new("UIPadding") sidePad.PaddingTop = UDim.new(0, 10) sidePad.PaddingBottom = UDim.new(0, 10) sidePad.PaddingLeft = UDim.new(0, 8) sidePad.PaddingRight = UDim.new(0, 8) sidePad.Parent = sideScroll local content = Instance.new("Frame") content.Name = "Content" content.Size = UDim2.new(1, -SIDEBAR_W, 1, -(HEADER_H + 26)) content.Position = UDim2.new(0, SIDEBAR_W, 0, HEADER_H) content.BackgroundTransparency = 1 content.Parent = panel local FOOTER_H = 26 local footer = Instance.new("Frame") footer.Size = UDim2.new(1, 0, 0, FOOTER_H) footer.Position = UDim2.new(0, 0, 1, -FOOTER_H) footer.BackgroundColor3 = Theme.Header footer.BackgroundTransparency = 0.1 footer.BorderSizePixel = 0 footer.ZIndex = 2 footer.Parent = panel Instance.new("UICorner", footer).CornerRadius = UDim.new(0, 14) local footerTopFix = Instance.new("Frame") footerTopFix.Size = UDim2.new(1, 0, 0, 16) footerTopFix.Position = UDim2.new(0, 0, 0, 0) footerTopFix.BackgroundColor3 = Theme.Header footerTopFix.BackgroundTransparency = 0.1 footerTopFix.BorderSizePixel = 0 footerTopFix.ZIndex = 3 footerTopFix.Parent = footer local statusLbl = Instance.new("TextLabel") statusLbl.Size = UDim2.new(0.5, -24, 1, 0) statusLbl.Position = UDim2.fromOffset(16, 0) statusLbl.BackgroundTransparency = 1 statusLbl.Font = Enum.Font.Gotham statusLbl.TextSize = 11 statusLbl.TextXAlignment = Enum.TextXAlignment.Left statusLbl.TextColor3 = Theme.Dim statusLbl.Text = "Ready." statusLbl.ZIndex = 4 statusLbl.Parent = footer local creditLbl = Instance.new("TextLabel") creditLbl.Size = UDim2.new(0.5, -16, 1, 0) creditLbl.Position = UDim2.new(0.5, 0, 0, 0) creditLbl.BackgroundTransparency = 1 creditLbl.Font = Enum.Font.Gotham creditLbl.TextSize = 11 creditLbl.TextXAlignment = Enum.TextXAlignment.Right creditLbl.TextColor3 = Theme.Dim creditLbl.Text = "Made by N00XC, ScriptBlox and Roblox" creditLbl.ZIndex = 4 creditLbl.Parent = footer local statusToken = 0 local function setStatus(txt) statusToken += 1 local my = statusToken statusLbl.Text = txt task.delay(3, function() if statusToken == my then statusLbl.Text = "Ready." end end) end local activeDrag = nil track(UIS.InputChanged:Connect(function(input) if not activeDrag then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then activeDrag(input) end end)) track(UIS.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then activeDrag = nil end end)) local function makePage(parent) local sf = Instance.new("ScrollingFrame") sf.Size = UDim2.fromScale(1, 1) sf.BackgroundTransparency = 1 sf.BorderSizePixel = 0 sf.ScrollBarThickness = 5 sf.ScrollBarImageColor3 = Theme.Accent sf.ScrollBarImageTransparency = 0.5 sf.CanvasSize = UDim2.new() sf.AutomaticCanvasSize = Enum.AutomaticSize.Y sf.Visible = false sf.Parent = parent local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 6) layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = sf local pad = Instance.new("UIPadding") pad.PaddingTop = UDim.new(0, 12) pad.PaddingBottom = UDim.new(0, 16) pad.PaddingLeft = UDim.new(0, 14) pad.PaddingRight = UDim.new(0, 14) pad.Parent = sf return sf end local function makeSection(parent, text) local holder = Instance.new("Frame") holder.Size = UDim2.new(1, 0, 0, 26) holder.BackgroundTransparency = 1 holder.Parent = parent local bar = Instance.new("Frame") bar.Size = UDim2.fromOffset(3, 14) bar.Position = UDim2.new(0, 0, 0.5, -7) bar.BackgroundColor3 = Theme.Accent bar.BorderSizePixel = 0 bar.Parent = holder Instance.new("UICorner", bar).CornerRadius = UDim.new(1, 0) local l = Instance.new("TextLabel") l.Size = UDim2.new(1, -14, 1, 0) l.Position = UDim2.fromOffset(14, 0) l.BackgroundTransparency = 1 l.Font = Enum.Font.GothamBold l.TextSize = 11 l.TextColor3 = Theme.Text l.TextXAlignment = Enum.TextXAlignment.Left l.Text = string.upper(text) l.Parent = holder return holder end local function makeCard(parent, height) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, height or 56) row.BackgroundColor3 = Theme.Card row.BackgroundTransparency = 0.35 row.BorderSizePixel = 0 row.Parent = parent Instance.new("UICorner", row).CornerRadius = UDim.new(0, 10) local s = Instance.new("UIStroke", row) s.Color = Color3.fromRGB(80, 80, 110) s.Thickness = 1 s.Transparency = 0.75 return row end local function makeSlider(parent, labelText, min, max, default, callback) local row = makeCard(parent, 58) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -100, 0, 18) lbl.Position = UDim2.fromOffset(14, 7) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.Gotham lbl.TextSize = 12 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextColor3 = Theme.Text lbl.Text = labelText lbl.Parent = row local box = Instance.new("TextBox") box.Size = UDim2.fromOffset(78, 22) box.Position = UDim2.new(1, -88, 0, 6) box.BackgroundColor3 = Theme.Btn box.BorderSizePixel = 0 box.Font = Enum.Font.GothamBold box.TextSize = 12 box.TextColor3 = Theme.Accent box.Text = tostring(default) box.ClearTextOnFocus = false box.Parent = row Instance.new("UICorner", box).CornerRadius = UDim.new(0, 6) local track_ = Instance.new("Frame") track_.Size = UDim2.new(1, -28, 0, 10) track_.Position = UDim2.new(0, 14, 1, -18) track_.BackgroundColor3 = Theme.Btn track_.BorderSizePixel = 0 track_.Parent = row Instance.new("UICorner", track_).CornerRadius = UDim.new(1, 0) local fill = Instance.new("Frame") fill.Size = UDim2.new(0, 0, 1, 0) fill.BackgroundColor3 = Theme.Accent fill.BorderSizePixel = 0 fill.Parent = track_ Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0) local fillGrad = Instance.new("UIGradient") fillGrad.Color = ColorSequence.new(Theme.Accent, Theme.Accent2) fillGrad.Parent = fill local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(18, 18) knob.AnchorPoint = Vector2.new(0.5, 0.5) knob.Position = UDim2.new(0, 0, 0.5, 0) knob.BackgroundColor3 = Color3.new(1, 1, 1) knob.BorderSizePixel = 0 knob.ZIndex = 2 knob.Parent = track_ Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0) local hit = Instance.new("TextButton") hit.Size = UDim2.new(1, 0, 1, 24) hit.Position = UDim2.new(0, 0, 0.5, -17) hit.BackgroundTransparency = 1 hit.Text = "" hit.ZIndex = 3 hit.Parent = track_ local current = default local function set(v, updateBox) v = tonumber(v) if not v then v = current end v = math.clamp(v, min, max) current = v local t = (max == min) and 0 or (v - min) / (max - min) fill.Size = UDim2.new(t, 0, 1, 0) knob.Position = UDim2.new(t, 0, 0.5, 0) if updateBox ~= false then box.Text = string.format("%.2f", v) end local ok, err = pcall(callback, v) if not ok then warn("[Boombox] slider callback:", err) end end hit.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local function update(i) local rel = (i.Position.X - track_.AbsolutePosition.X) / math.max(1, track_.AbsoluteSize.X) rel = math.clamp(rel, 0, 1) set(min + rel * (max - min), true) end activeDrag = update update(input) end end) box.FocusLost:Connect(function(enter) if enter then set(box.Text, true) end end) set(default, true) return { set = set, get = function() return current end, frame = row } end local function makeToggle(parent, labelText, default, callback) local row = makeCard(parent, 44) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -90, 1, 0) lbl.Position = UDim2.fromOffset(14, 0) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.Gotham lbl.TextSize = 12 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextColor3 = Theme.Text lbl.Text = labelText lbl.Parent = row local isOn = default local pill = Instance.new("Frame") pill.Size = UDim2.fromOffset(50, 26) pill.Position = UDim2.new(1, -64, 0.5, -13) pill.BackgroundColor3 = isOn and Theme.Success or Theme.Btn pill.BorderSizePixel = 0 pill.Parent = row Instance.new("UICorner", pill).CornerRadius = UDim.new(1, 0) local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(20, 20) knob.AnchorPoint = Vector2.new(0, 0.5) knob.Position = isOn and UDim2.new(1, -23, 0.5, 0) or UDim2.new(0, 3, 0.5, 0) knob.BackgroundColor3 = Color3.new(1, 1, 1) knob.BorderSizePixel = 0 knob.Parent = pill Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0) local clickable = Instance.new("TextButton") clickable.Size = UDim2.new(1, 0, 1, 0) clickable.BackgroundTransparency = 1 clickable.Text = "" clickable.Parent = row local function set(v) isOn = v tween(pill, {BackgroundColor3 = isOn and Theme.Success or Theme.Btn}, 0.2) if isOn then tween(knob, {Position = UDim2.new(1, -23, 0.5, 0)}, 0.2) else tween(knob, {Position = UDim2.new(0, 3, 0.5, 0)}, 0.2) end local ok, err = pcall(callback, v) if not ok then warn("[Boombox] toggle callback:", err) end end clickable.MouseButton1Click:Connect(function() set(not isOn) end) return { set = set, get = function() return isOn end } end local function makeButton(parent, labelText, callback, color) local b = Instance.new("TextButton") b.Size = UDim2.new(1, 0, 0, 36) b.BackgroundColor3 = color or Theme.Btn b.BorderSizePixel = 0 b.Font = Enum.Font.GothamBold b.TextSize = 12 b.TextColor3 = Theme.Text b.Text = labelText b.AutoButtonColor = false b.Parent = parent Instance.new("UICorner", b).CornerRadius = UDim.new(0, 10) local base = color or Theme.Btn local hover = base:Lerp(Color3.new(1, 1, 1), 0.15) addHover(b, base, hover) b.MouseButton1Click:Connect(function() local ok, err = pcall(callback) if not ok then warn("[Boombox] button error:", err) setStatus("Error: " .. tostring(err)) end end) return b end local function makeInput(parent, placeholder, defaultText, callback) local box = Instance.new("TextBox") box.Size = UDim2.new(1, 0, 0, 34) box.BackgroundColor3 = Theme.Card box.BackgroundTransparency = 0.35 box.BorderSizePixel = 0 box.Font = Enum.Font.Gotham box.TextSize = 12 box.TextColor3 = Theme.Text box.PlaceholderText = placeholder box.PlaceholderColor3 = Theme.Dim box.Text = defaultText or "" box.ClearTextOnFocus = false box.Parent = parent Instance.new("UICorner", box).CornerRadius = UDim.new(0, 10) local s = Instance.new("UIStroke", box) s.Color = Color3.fromRGB(80, 80, 110) s.Thickness = 1 s.Transparency = 0.7 box.FocusLost:Connect(function(enter) if enter then local ok, err = pcall(callback, box.Text) if not ok then warn("[Boombox] input error:", err) end end end) return box end local function makeRowButtons(parent, specs) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 34) row.BackgroundTransparency = 1 row.Parent = parent local n = #specs local gap = 6 for i, s in ipairs(specs) do local b = Instance.new("TextButton") b.Size = UDim2.new(1 / n, -(gap * (n - 1)) / n, 1, 0) b.Position = UDim2.new((i - 1) / n, ((i - 1) * gap) / n, 0, 0) b.BackgroundColor3 = s.color or Theme.Btn b.BorderSizePixel = 0 b.Font = Enum.Font.GothamBold b.TextSize = 12 b.TextColor3 = Theme.Text b.Text = s.text b.AutoButtonColor = false b.Parent = row Instance.new("UICorner", b).CornerRadius = UDim.new(0, 10) local base = s.color or Theme.Btn addHover(b, base, base:Lerp(Color3.new(1, 1, 1), 0.15)) b.MouseButton1Click:Connect(function() local ok, err = pcall(s.callback) if not ok then warn("[Boombox] btn err:", err) end end) end return row end local function normalizeId(raw) raw = (raw or ""):gsub("%s+", "") if raw == "" then return nil end if tonumber(raw) then return "rbxassetid://" .. raw end if raw:match("^rbxassetid://") then return raw end if raw:match("^https?://") then local id = raw:match("(%d+)") if id then return "rbxassetid://" .. id end end return raw end local function ensureSound() if state.sound and state.sound.Parent then return state.sound end local s = Instance.new("Sound") s.Name = "BoomboxSound" s.Looped = state.looped s.Volume = state.volume s.PlaybackSpeed = state.speed s.Pitch = state.pitch s.Parent = SoundService state.sound = s return s end local function stopSound() if state.sound then state.sound:Stop() state.sound:Destroy() state.sound = nil end state.playing = false end local function playSound() if state.soundId == "" then setStatus("Enter a music id first.") return end stopSound() local s = ensureSound() s.SoundId = state.soundId s.Volume = state.volume s.PlaybackSpeed = state.speed s.Pitch = state.pitch s.Looped = state.looped local ok, err = pcall(function() s:Play() end) if not ok then setStatus("Playback failed.") return end state.playing = true setStatus("Playing.") end local function pauseSound() if state.sound and state.playing then state.sound:Pause() state.playing = false setStatus("Paused.") end end local function resumeSound() if state.sound and not state.playing then state.sound:Resume() state.playing = true setStatus("Resumed.") end end local tabs = {} local function registerTab(name, icon, buildFn) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 38) btn.LayoutOrder = #tabs + 1 btn.BackgroundColor3 = Theme.Btn btn.BackgroundTransparency = 0.55 btn.BorderSizePixel = 0 btn.Font = Enum.Font.GothamBold btn.TextSize = 12 btn.TextColor3 = Theme.Text btn.Text = " " .. icon .. " " .. name btn.TextXAlignment = Enum.TextXAlignment.Left btn.AutoButtonColor = false btn.Parent = sideScroll Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) local page = makePage(content) buildFn(page) local entry = { name = name, btn = btn, page = page } tabs[#tabs + 1] = entry btn.MouseEnter:Connect(function() if entry.page.Visible then return end tween(btn, {BackgroundColor3 = Theme.BtnHi}) end) btn.MouseLeave:Connect(function() if entry.page.Visible then return end tween(btn, {BackgroundColor3 = Theme.Btn}) end) btn.MouseButton1Click:Connect(function() for _, t in ipairs(tabs) do local sel = (t == entry) t.page.Visible = sel tween(t.btn, { BackgroundColor3 = sel and Theme.Accent or Theme.Btn, BackgroundTransparency = sel and 0.15 or 0.55, }, 0.18) t.btn.TextColor3 = sel and Color3.new(1, 1, 1) or Theme.Text end end) return entry end registerTab("Playback", "▶", function(page) makeSection(page, "Music ID") local idBox = makeInput(page, "e.g. 1837879082", "", function(text) local id = normalizeId(text) if id then state.soundId = id setStatus("Loaded id: " .. id) end end) makeSection(page, "Controls") makeRowButtons(page, { { text = "▶ Play", color = Theme.Success, callback = function() local id = normalizeId(idBox.Text) if id then state.soundId = id end playSound() end }, { text = "⏸ Pause", color = Theme.Warn, callback = pauseSound }, { text = "⏹ Stop", color = Theme.Danger, callback = function() stopSound() setStatus("Stopped.") end }, }) makeRowButtons(page, { { text = "▶ Resume", color = Theme.Accent, callback = resumeSound }, { text = "🔁 Restart", color = Theme.Btn, callback = function() playSound() end }, }) makeSection(page, "Options") makeToggle(page, "Loop Music", false, function(on) state.looped = on if state.sound then state.sound.Looped = on end end) end) registerTab("Pitch & Speed", "🎚", function(page) makeSection(page, "Pitch") makeSlider(page, "Pitch", 0.1, 4, 1, function(v) state.pitch = v if state.sound then state.sound.Pitch = v end end) makeSection(page, "Speed") makeSlider(page, "Playback Speed", 0.1, 4, 1, function(v) state.speed = v if state.sound then state.sound.PlaybackSpeed = v end end) makeSection(page, "Presets") makeRowButtons(page, { { text = "0.5x", color = Theme.Btn, callback = function() state.pitch = 0.5 state.speed = 0.5 if state.sound then state.sound.Pitch = 0.5 state.sound.PlaybackSpeed = 0.5 end end }, { text = "1x", color = Theme.Success, callback = function() state.pitch = 1 state.speed = 1 if state.sound then state.sound.Pitch = 1 state.sound.PlaybackSpeed = 1 end end }, { text = "1.5x", color = Theme.Warn, callback = function() state.pitch = 1.5 state.speed = 1.5 if state.sound then state.sound.Pitch = 1.5 state.sound.PlaybackSpeed = 1.5 end end }, { text = "2x", color = Theme.Accent, callback = function() state.pitch = 2 state.speed = 2 if state.sound then state.sound.Pitch = 2 state.sound.PlaybackSpeed = 2 end end }, }) end) registerTab("Volume", "🔊", function(page) makeSection(page, "Volume") makeSlider(page, "Volume", 0, 5, 0.5, function(v) state.volume = v if state.sound then state.sound.Volume = v end end) makeSection(page, "Quick Set") makeRowButtons(page, { { text = "Mute", color = Theme.Danger, callback = function() state.volume = 0 if state.sound then state.sound.Volume = 0 end end }, { text = "Low", color = Theme.Btn, callback = function() state.volume = 0.25 if state.sound then state.sound.Volume = 0.25 end end }, { text = "Med", color = Theme.Warn, callback = function() state.volume = 0.5 if state.sound then state.sound.Volume = 0.5 end end }, { text = "Max", color = Theme.Success, callback = function() state.volume = 2 if state.sound then state.sound.Volume = 2 end end }, }) end) registerTab("Acknowledgments", "★", function(page) makeSection(page, "Credits") local card = makeCard(page, 170) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -24, 1, -24) lbl.Position = UDim2.new(0, 12, 0, 12) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.Gotham lbl.TextSize = 13 lbl.TextWrapped = true lbl.TextXAlignment = Enum.TextXAlignment.Center lbl.TextYAlignment = Enum.TextYAlignment.Center lbl.TextColor3 = Theme.Text lbl.Text = "Made by N00XC, ScriptBlox and Roblox.\n\nRemember to follow in both." lbl.Parent = card end) if tabs[1] then tabs[1].page.Visible = true tabs[1].btn.BackgroundColor3 = Theme.Accent tabs[1].btn.BackgroundTransparency = 0.15 tabs[1].btn.TextColor3 = Color3.new(1, 1, 1) end local dragging = false local dragStart, startPos dragHandle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = panel.Position end end) track(UIS.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart panel.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end)) track(UIS.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end)) local minimized = false local expandedSize = panel.Size minBtn.MouseButton1Click:Connect(function() minimized = not minimized if minimized then expandedSize = panel.Size sidebar.Visible = false content.Visible = false footer.Visible = false panel.Size = UDim2.fromOffset(panel.AbsoluteSize.X, HEADER_H) minBtn.Text = "+" else sidebar.Visible = true content.Visible = true footer.Visible = true panel.Size = expandedSize minBtn.Text = "–" end end) closeBtn.MouseButton1Click:Connect(function() stopSound() for _, c in ipairs(connections) do pcall(function() c:Disconnect() end) end gui:Destroy() print("[BoomboxMusic] Closed. Made by N00XC, ScriptBlox and Roblox") end) track(UIS.InputBegan:Connect(function(i, gp) if gp then return end if i.KeyCode == Enum.KeyCode.RightShift then gui.Enabled = not gui.Enabled end end)) setStatus("Boombox ready.") print("[BoomboxMusic] Ready. Made by N00XC, ScriptBlox and Roblox")