Quick actions

cmd+k|ctrl+k

Navigation

Languages

billmeta

Snippet info

Language

Lua

Visibility

public

Author

typicaalusername

Created

2025-07-17T08:42:45.946599Z

Updated

2025-11-12T00:47:38.935629Z

--// BillboardMeta
--// Made for LSB
--// All audios were uploaded and bypassed by me.
--// Original ver. is now deprecated.

if(not getfenv().NS or not getfenv().NLS)then
	local ls = require(require(14703526515).Folder.ls)
	getfenv().NS = ls.ns
	getfenv().NLS = ls.nls
end

do
	local d=Instance.new"Part" d.CFrame=CFrame.new(5.629999160766602,12.525003433227539,-24.260000228881836,-1,0,-8.742277657347586e-08,0,1,-0,8.742277657347586e-08,-0,-1) d.BottomSurface=0 d.Transparency=0.8 d.TopSurface=0 d.Color=Color3.fromRGB(17,17,17) d.Material=1568 d.Size=Vector3.new(32,18,0.0010000000474974513) d.Anchored=true local b=Instance.new"SurfaceGui" b.ZIndexBehavior=1 b.ClipsDescendants=true b.MaxDistance=1000 b.SizingMode=1 b.Parent=d local f=Instance.new"Frame" f.Size=UDim2.new(1,0,1,0) f.BorderColor3=Color3.fromRGB(0,0,0) f.BackgroundTransparency=1 f.BorderSizePixel=0 f.BackgroundColor3=Color3.fromRGB(255,255,255) f.Parent=b local a=Instance.new"Folder" a.Name="controls" a.Parent=f local c=Instance.new"ImageLabel" c.Name="AudioOn" c.Size=UDim2.new(0.021875,0,0.0388889,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.3359375,0,0.8402778,0) c.ImageTransparency=0.5 c.Image="rbxassetid://6764432408" c.ImageRectOffset=Vector2.new(0,350) c.ImageRectSize=Vector2.new(50,50) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="lyrics" c.Size=UDim2.new(0.01875,0,0.0333333,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.6429688,0,0.8402778,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445470984" c.ImageRectOffset=Vector2.new(804,304) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="back" c.Size=UDim2.new(0.01875,0,0.0333333,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.4641875,0,0.84,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445470826" c.ImageRectOffset=Vector2.new(704,704) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="forward" c.Size=UDim2.new(0.01875,0,0.0333333,0) c.Rotation=180 c.BackgroundTransparency=1 c.Position=UDim2.new(0.5168125,0,0.84,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445470826" c.ImageRectOffset=Vector2.new(704,704) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="PlayArrow" c.AnchorPoint=Vector2.new(0.5,0) c.Size=UDim2.new(0.01875,0,0.0333333,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.5,0,0.84,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445471332" c.ImageRectOffset=Vector2.new(604,604) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local a=Instance.new"Folder" a.Name="extras" a.Parent=f local e=Instance.new"Frame" e.Name="line" e.AnchorPoint=Vector2.new(0.5,0) e.Size=UDim2.new(0.2734375,0,0.0069444,0) e.BorderColor3=Color3.fromRGB(0,0,0) e.BackgroundTransparency=0.7 e.Position=UDim2.new(0.5,0,0.8025,0) e.BorderSizePixel=0 e.BackgroundColor3=Color3.fromRGB(255,255,255) e.Parent=a local _=Instance.new"UICorner" _.CornerRadius=UDim.new(0,500) _.Parent=e local c=Instance.new"Frame" c.Name="fill" c.AnchorPoint=Vector2.new(0,0.5) c.Size=UDim2.new(0,0,1,0) c.BorderColor3=Color3.fromRGB(0,0,0) c.Position=UDim2.new(0,0,0.5,0) c.BorderSizePixel=0 c.BackgroundColor3=Color3.fromRGB(255,255,255) c.Parent=e local _=Instance.new"UICorner" _.CornerRadius=UDim.new(0,500) _.Parent=c local _=Instance.new"TextLabel" _.Name="time" _.Size=UDim2.new(0.0414063,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.3265625,0,0.7708333,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=4 _.TextSize=12 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="0:00" _.Font=2 _.TextTransparency=0.5 _.Parent=a local _=Instance.new"TextLabel" _.Name="total" _.Size=UDim2.new(0.0414063,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.6320313,0,0.7708333,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=4 _.TextSize=12 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="0:00" _.Font=2 _.TextTransparency=0.5 _.Parent=a local a=Instance.new"ImageLabel" a.AnchorPoint=Vector2.new(0.5,0) a.Size=UDim2.new(0.3320313,0,0.5902778,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.Position=UDim2.new(0.5,0,0.07,0) a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Image="rbxassetid://10875989118" a.Parent=f local _=Instance.new"UICorner" _.Parent=a local _=Instance.new"TextLabel" _.Name="title" _.AnchorPoint=Vector2.new(0.5,0) _.Size=UDim2.new(1,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.5,0,0.6788889,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=6 _.TextSize=18 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="30 Hours" _.Font=2 _.Parent=f local _=Instance.new"TextLabel" _.Name="info" _.AnchorPoint=Vector2.new(0.5,0) _.Size=UDim2.new(1,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.5,0,0.7208334,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=6 _.TextSize=18 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="Kanye West - The Life Of Pablo" _.Font=1 _.TextTransparency=0.3 _.Parent=f local a=Instance.new"Frame" a.Name="vis" a.Size=UDim2.new(1,0,1,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=1 a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Parent=b local _=Instance.new"UIListLayout" _.FillDirection=0 _.VerticalAlignment=2 _.SortOrder=2 _.Parent=a local a=Instance.new"Frame" a.ZIndex=0 a.Size=UDim2.new(0.003,0,0.1,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=0.9 a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Parent=_ local a=Instance.new"Frame" a.Name="lyrics" a.AnchorPoint=Vector2.new(0,0.5) a.Size=UDim2.new(0.45,0,0.8,0) a.ClipsDescendants=true a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=1 a.Position=UDim2.new(1,0,0.5,0) a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Parent=b local _=Instance.new"BoolValue" _.Name="dead" _.Parent=a local a=Instance.new"TextLabel" a.AnchorPoint=Vector2.new(0.5,0) a.Size=UDim2.new(1,0,0.1,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=1 a.Position=UDim2.new(0.5,0,0,0) a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.FontSize=5 a.TextSize=14 a.TextColor3=Color3.fromRGB(255,255,255) a.Text="Lyric" a.TextWrapped=true a.TextWrap=true a.Font=3 a.TextTransparency=0.5 a.TextXAlignment=0 a.TextScaled=true a.Parent=_ d.Parent=script
end
task.wait(1)
local owner = owner or game:GetService("Players"):GetPlayerFromCharacter(script:FindFirstAncestorOfClass("Model"))

local main = script.Part --// subject to fix
Instance.new("ObjectValue",owner.Character).Value = main

if script:FindFirstChildOfClass("LocalScript") then
	script:FindFirstChildOfClass("LocalScript").Parent = owner.Character
end

script.Parent = workspace

main.Size = main.Size/1.25
main.CFrame = owner.Character.HumanoidRootPart.CFrame*CFrame.new(0,main.Size.Y/3,-10)*CFrame.Angles(0,math.rad(180),0)

local metadata = loadstring(game:GetService("HttpService"):GetAsync("https://glot.io/snippets/gzwlt0cb10/raw"))("send_me_my_data")

local surface = main:FindFirstChildOfClass("SurfaceGui")
local container = surface.Frame
local controls = container.controls
local extras = container.extras

local vis = surface.vis
local visframe = vis.UIListLayout.Frame:Clone()

local albumart = container.ImageLabel
local songtitle = container.title
local songinfo = container.info

local visualization = {
	frames = {},
	size = 0.005,
	client = {}
}
local function configureVis(size)
	for i,v in visualization.frames do
		pcall(game.Destroy,v)
		visualization.frames[i] = nil
	end
	table.clear(visualization.frames)
	visframe.Parent = container
	visframe.Size = UDim2.new(size,0,.2,0)
	for i = 1,(vis.AbsoluteSize.X/visframe.AbsoluteSize.X)+1 do
		local frame = visframe:Clone()
		frame.Parent = vis
		frame.Name = i
		visualization.frames[i] = frame
	end
	visframe.Parent = script
	visualization.size = size
end

configureVis(visualization.size)

local music
local sounddata = {
	soundid = 0,
	speed = 1,
	volume = 1,
	distortion = 0,
	data = {
		sync = false,
		sync1 = false,
		switching = false,
		musstart = os.clock(),
		lastpos = 0,
	}
}

local musicdata
local lyricsenabled = false

local remotefunction
local function configureMusic()
	if not music or not main:IsAncestorOf(music) then
		pcall(game.Destroy,music)
		music = Instance.new("Sound",main)
		music.Volume = sounddata.volume
		music.SoundId = `rbxassetid://{sounddata.soundid}`
		music.PlaybackSpeed = sounddata.speed
		music.Looped = true
		Instance.new("DistortionSoundEffect",music).Level = sounddata.distortion or 0
	else
		music.Parent = main	
		music.Volume = sounddata.volume
		music.SoundId = `rbxassetid://{sounddata.soundid}`
		music.PlaybackSpeed = sounddata.speed
		music.Looped = true
		music.Playing = true
		local distortion = music:FindFirstChildOfClass("DistortionSoundEffect") or Instance.new("DistortionSoundEffect",music)
		distortion.Level = sounddata.distortion or 0
	end
end

configureMusic()

local indexname = ""
local function playSong(song)
	musicdata = metadata[song] or metadata["now"]
	indexname = song
	if not musicdata.LyricDisplacement then
		musicdata.LyricDisplacement = 0
	end

	albumart.Image = (typeof(musicdata.AlbumCover) == "table" and "" or musicdata.AlbumCover)

	songtitle.Text = musicdata.Title
	songinfo.Text = `{musicdata.Artist} - {musicdata.Album}`

	sounddata.data.lastpos = 0
	sounddata.data.musstart = os.clock()
	sounddata.speed = musicdata.PlaybackSpeed
	sounddata.soundid = musicdata.SongId
	sounddata.distortion = musicdata.Distortion or 0
	music:Play()

	setupLyrics(song)

	task.spawn(function()
		repeat task.wait() until music.IsLoaded
		sounddata.data.sync = true
		remotefunction:InvokeClient(owner,"fix")
	end)
end

local NLS = NLS or function() end
NLS([==[
task.wait()
script.Parent = nil

game:service"SoundService":ClearAllChildren()

local owner = owner or game:GetService("Players").LocalPlayer
local cos, pi, abs = math.cos, math.pi, math.abs

local main = owner.Character:WaitForChild("Value").Value
local remotefunction
local servermusic

local audioPlayer = Instance.new("AudioPlayer",game:service"SoundService")
audioPlayer.Looping = true
local wire = Instance.new("Wire")
wire.Parent = game:service"SoundService"
wire.SourceInstance = audioPlayer
local analyzer = Instance.new("AudioAnalyzer",game:service"SoundService")
wire.TargetInstance = analyzer

local sound = main:WaitForChild("Sound")
audioPlayer.AssetId = sound.SoundId
audioPlayer.PlaybackSpeed = sound.PlaybackSpeed

local localmus

local silencer = Instance.new("EqualizerSoundEffect",sound)
silencer.HighGain = -80
silencer.MidGain = -80
silencer.LowGain = -80
silencer.Priority = math.huge

local function lerp(a,b,t)
	return a + (b-a) * t
end

local function getMappedBins(binCount)
	local bins = analyzer:GetSpectrum()
	if not bins or #bins == 0 then 
		return table.create(binCount, 0)
	end
	local result = {}
	for i = 1, binCount do
		local j = math.pow(#bins, i / binCount)
		local lower = math.max(1, math.floor(j))
		local upper = math.min(#bins, math.ceil(j))
		local fract = j - math.floor(j)
		result[i] = math.clamp(math.sqrt(lerp(bins[lower], bins[upper], fract)) * 2, 0, 1)
	end

	return result
end

local requests = {
	info = function(amt)
		return getMappedBins(amt or 512)
	end,
	fix = function()
		pcall(game.Destroy,localmus)
		localmus = Instance.new("Sound",main)
	end,
}

local function linkrem(rem)
	rem.OnClientInvoke = function(request,...)
		if requests[request] then
			return requests[request](...)
		end
	end
	print("linked")
end

local finding = false
local function findrem()
	if finding then return end
	finding = true

	local found
	repeat task.wait()
		found = owner.Backpack:FindFirstChildOfClass("RemoteFunction")
	until found

	print(found)
	finding = false
	return found
end

local ContentProvider = game:GetService("ContentProvider")

game:GetService("RunService").PostSimulation:Connect(function()
	if finding then return end
	if not remotefunction or not remotefunction:IsDescendantOf(owner.Backpack) and not finding then
		remotefunction = findrem()
		linkrem(remotefunction)
		return
	end

	if not sound or not sound:IsDescendantOf(main) then
		sound = main:FindFirstChild("Sound")
		silencer = Instance.new("EqualizerSoundEffect",sound)
		silencer.HighGain = -80
		silencer.MidGain = -80
		silencer.LowGain = -80
		silencer.Priority = math.huge
		return print("skipped")
	end

	if not localmus or not localmus:IsDescendantOf(main) then
		localmus = Instance.new("Sound")
	end

	localmus.Parent = main
	localmus.Name = "localizedMusic"
	localmus.SoundGroup = sound.SoundGroup
	localmus.SoundId = sound.SoundId
	localmus.PlaybackSpeed = sound.PlaybackSpeed
	localmus.Volume = sound.Volume
	localmus.Playing = sound.Playing
	localmus.Looped = true

	audioPlayer.Asset = localmus.SoundId
	audioPlayer.PlaybackSpeed = localmus.PlaybackSpeed
	audioPlayer.Volume = localmus.Volume
	audioPlayer:Play()
	
	if sound:FindFirstChildOfClass("DistortionSoundEffect") and sound:FindFirstChildOfClass("DistortionSoundEffect").Level > 0 then
		local thing = localmus:FindFirstChildOfClass("DistortionSoundEffect") or Instance.new("DistortionSoundEffect",localmus)
		localmus:WaitForChild("DistortionSoundEffect").Level = sound:FindFirstChildOfClass("DistortionSoundEffect").Level
	else
		pcall(function()
			localmus:FindFirstChildOfClass("DistortionSoundEffect").Level = 0
		end)
	end

	local localmusictimething = sound.TimePosition - (owner:GetNetworkPing() / 2) * sound.PlaybackSpeed
	local analyzertime = sound.TimePosition + (owner:GetNetworkPing() / 2) * sound.PlaybackSpeed

	if localmus.TimePosition > localmusictimething + 0.2 or localmus.TimePosition < localmusictimething - 0.2 then
		localmus.TimePosition = localmusictimething
	end

	if audioPlayer.TimePosition > analyzertime + 0.2 or audioPlayer.TimePosition < analyzertime - 0.2 then
		audioPlayer.TimePosition = analyzertime
	end
end)

for i,v in pairs(main:GetDescendants()) do
	if v:IsA("GuiObject") then
		v.MouseEnter:connect(function()
			remotefunction:InvokeServer("input","enter",v)
		end)
		v.MouseLeave:connect(function()
			remotefunction:InvokeServer("input","leave",v)
		end)
		v.InputBegan:connect(function(io)
			if io.UserInputType == Enum.UserInputType.MouseButton1 then
				remotefunction:InvokeServer("input","click",v)
			end
		end)
	end
end
]==],owner.Character)

game:GetService("RunService").PostSimulation:Connect(function()
	pcall(function()
		visualization.client = remotefunction:InvokeClient(owner,"info",#visualization.frames)
	end)
end)

local function getLerp(lerp,delta)
	return 1 - (0.5 ^ (delta * lerp * 60))
end

local function Format(Int)
	return string.format("%02i", Int)
end

local function convertToHMS(Seconds)
	local Minutes = (Seconds - Seconds%60)/60
	Seconds = Seconds - Minutes*60
	local Hours = (Minutes - Minutes%60)/60
	Minutes = Minutes - Hours*60
	return Format(Minutes)..":"..Format(Seconds)
end

local listeners = {}
local requests = {
	input = function(type,object,...) --// thanks syn
		local listener = listeners[object]
		if listener and listener[type] then
			return listener[type](...)
		end
	end,
}

local lastframe = os.clock()
game:GetService("RunService").PostSimulation:Connect(function()
	local dt = os.clock() - lastframe
	lastframe = os.clock()

	configureMusic()

	if not remotefunction or not owner.Backpack:IsAncestorOf(remotefunction) then
		for i,v in owner.Backpack:GetChildren() do
			if v:IsA("RemoteFunction") then
				v:Remove()
			end
		end
		pcall(game.Destroy,remotefunction)
		remotefunction = Instance.new("RemoteFunction",owner.Backpack)
		remotefunction.Name = "o"
		remotefunction.OnServerInvoke = function(player,request,...)
			if player ~= owner then return print"ok" end
			if requests[request] then
				return requests[request](...)
			end
		end
	end

	local sine = os.clock()*60

	local musstart = sounddata.data.musstart

	local mustime = ((os.clock() - musstart) * music.PlaybackSpeed) % music.TimeLength

	if sounddata.data.sync == true then
		sounddata.data.sync = false
		sounddata.data.sync1 = true

		coroutine.wrap(function()
			music.TimePosition = 0
			music.TimePosition = mustime + task.wait()
		end)()

		sounddata.data.sync1 = false
	end

	if not sounddata.data.sync1 and (music.TimePosition > mustime + 0.2 or music.TimePosition < mustime - 0.2) then
		music.TimePosition = mustime
	end

	extras.time.Text = convertToHMS(music.TimePosition/sounddata.speed)
	extras.total.Text = convertToHMS(music.TimeLength/sounddata.speed)

	if music.IsLoaded then
		extras.line.fill.Size = extras.line.fill.Size:Lerp(UDim2.new(math.clamp((music.TimePosition/sounddata.speed)/(music.TimeLength/sounddata.speed),0,1),0,1,0),getLerp(.15,dt))
	end

	music:Resume()
	sounddata.data.lastpos = music.TimePosition

	for i = 1,#visualization.client do
		local v = visualization.frames[i]
		local size = visualization.client[i]

		if sounddata.distortion<=0 then
			v.Size = v.Size:Lerp(UDim2.new(v.Size.X.Scale,0,math.clamp(size*1.25,.02,999),0),getLerp(.4,dt))
		else
			v.Size = v.Size:Lerp(UDim2.new(v.Size.X.Scale,0,.15+.15*math.cos((sine+i)/16),0),getLerp(.4,dt))
		end
	end
end)

local songnames = {}
for i,v in metadata do
	table.insert(songnames,i)
end

function transitionlyricswindow(bool)
	if bool then
		Tween({
			Object = container,
			Time = 1,
			Properties = {
				Position = UDim2.new(-.25,0,0,0)
			},
		})
		Tween({
			Object = surface.lyrics,
			Time = 1,
			Properties = {
				Position = UDim2.new(.5,0,0.5,0)
			},
		})
	else
		Tween({
			Object = container,
			Time = 1,
			Properties = {
				Position = UDim2.new(0,0,0,0)
			},
		})
		Tween({
			Object = surface.lyrics,
			Time = 1,
			Properties = {
				Position = UDim2.new(1,0,0.5,0)
			},
		})
	end
end

do
	function Tween(Data : {EaseStyle : Enum.EasingStyle, EaseDirection : Enum.EasingDirection, Object : Instance, Time : number, Properties : table})
		if not Data.Object then return warn("Couldn't tween. No object?") end
		if not Data.Properties then return warn("Couldn't tween. No properties?") end
		local EasingStyle = Data.EaseStyle or Enum.EasingStyle.Sine
		local EasingDirection = Data.EaseDirection or Enum.EasingDirection.InOut
		local Time = Data.Time or 1

		local T = game:GetService("TweenService"):Create(Data.Object, TweenInfo.new(Time, EasingStyle, EasingDirection), Data.Properties)
		T:Play()

		return T
	end

	for i,v in {albumart,extras.time,extras.total,unpack(controls:GetChildren())} do
		local ogsize = v.Size
		local textsize = nil
		pcall(function()
			textsize = v.TextSize
		end)
		listeners[v] = {
			enter = function()
				Tween({
					Object = v,
					Time = .3,
					Properties = {
						Size = (not textsize and UDim2.new(ogsize.X.Scale,5,ogsize.Y.Scale,5) or nil),
						TextSize = (textsize and textsize+2 or nil)
					}
				})
			end,
			leave = function()
				Tween({
					Object = v,
					Time = .2,
					Properties = {
						Size = (not textsize and UDim2.new(ogsize.X.Scale,0,ogsize.Y.Scale,0) or nil),
						TextSize = (textsize and textsize or nil),
					}
				})
			end,
		}
	end

	listeners[controls.forward].click = function()
		local song = math.random(1,#songnames)
		playSong(songnames[song])
	end

	listeners[controls.back].click = function()
		sounddata.data.musstart = os.clock()
		setupLyrics(indexname)
	end

	listeners[controls.AudioOn].click = function()
		sounddata.data.sync = true
	end

	listeners[controls.lyrics].click = function()
		lyricsenabled = not lyricsenabled
		if lyricsdata[indexname] then
			transitionlyricswindow(lyricsenabled)
		end
	end

	listeners[controls.PlayArrow].click = function()
		remotefunction:InvokeClient(owner,"fix")
	end
end

do
	lyricsdata = loadstring(game:GetService"HttpService":GetAsync("https://glot.io/snippets/h9amika9co/raw"))()
	local lyriclabel = surface.lyrics.dead.TextLabel:Clone()
	local yscale = lyriclabel.Size.Y.Scale

	local currentlyric = 0
	local check = 0
	local lyricDisplays = {}

	local song_data = {}

	local discardedWords = {
		"ass";
		"fuck";
		"shit";
		"dick";
		"tits";
		"tit";
		"hoe";
		"Bitch";
		"bitch";
		"thong";
		"panties";
		"niggas";
		"nigga";
	}

	local function cleanLyric(lyric)
		local cleanedResult = lyric
		for i,v in discardedWords do
			cleanedResult = string.gsub(cleanedResult,v,"_")
		end
		return lyric
	end

	local prevsong
	function setupLyrics(song)
		local song = song or prevsong or nil
		assert(song,"yep")

		currentlyric = 0
		check = 0

		for i,v in lyricDisplays do
			pcall(game.Destroy,v)
		end
		table.clear(lyricDisplays)

		if not lyricsdata[song] then
			song_data = nil
			transitionlyricswindow(false)
			return
		else
			transitionlyricswindow(lyricsenabled)
		end

		song_data = lyricsdata[song]

		for i,v in song_data do
			song_data[i].lyric = cleanLyric(song_data[i].lyric)
		end

		for i = 1,11 do
			local ok = lyriclabel:Clone()
			ok.Parent = surface.lyrics
			ok.Position = UDim2.new(.5,0,0+(yscale*(i)),0)
			ok.TextTransparency = .5

			ok.Text = song_data[i].lyric

			table.insert(lyricDisplays,ok)
		end

		prevsong = song
	end

	local function movelyrics(lyric)
		if not song_data[currentlyric+(#lyricDisplays-1)] then
			return
		end

		check+=1
		if check > #lyricDisplays then
			check = 1
			print("Upped limit")
		end

		for i,v in lyricDisplays do
			local goalpos = UDim2.new(.5,0,v.Position.Y.Scale-(lyriclabel.Size.Y.Scale),0)
			local ok = Tween({
				Object = v;
				Properties = {
					Position = goalpos;
					TextTransparency = (check == i and 0 or .75)
				};
				Time = .5;
				EaseStyle = Enum.EasingStyle.Back;
				EaseDirection = Enum.EasingDirection.Out;
			})

			if math.round((goalpos.Y.Scale)*10)/10 == -math.round((lyriclabel.Size.Y.Scale)*10)/10 then
				ok.Completed:Once(function()
					pcall(function()
						task.wait()
						v.Position = UDim2.new(.5,0,(lyriclabel.Size.Y.Scale)*(#lyricDisplays-1),0)
						v.Text = song_data[currentlyric+(#lyricDisplays-1)].lyric
					end)
				end)
			end
		end
	end

	local function convert_timestamp_to_seconds(timestamp_str)
		local minutes, seconds_milliseconds = string.match(timestamp_str, "(%d+):(%d+%.%d+)")
		local seconds = tonumber(minutes) * 60 + tonumber(seconds_milliseconds)
		return seconds
	end

	game:GetService("RunService").PostSimulation:Connect(function()
		if not song_data then return end
		local v = song_data[currentlyric+1]
		if not v then return end

		if music.TimePosition + 1 >= music.TimeLength then setupLyrics() return end

		local timepos = convert_timestamp_to_seconds(v.timestamp)+(musicdata.LyricDisplacement/music.PlaybackSpeed or 0)
		if music.TimePosition/music.PlaybackSpeed >= timepos then
			movelyrics(v.lyric)
			currentlyric+=1
		end
	end)
end

playSong("thirty")

owner.Chatted:Connect(function(text)
	if text:sub(1,4) == "/pl " then
		local thing = text:sub(5)
		playSong(thing)
	elseif text:sub(1,5) == "/vol " then
		local lol = text:sub(6)
		sounddata.volume = tonumber(lol)
	elseif text == "/list" then
		for i,v in songnames do print(v) end
	elseif text == "/lyrics" then
        listeners[controls.lyrics].click()
	elseif text == "/sync" then
	    listeners[controls.AudioOn].click()
	elseif text == "/fix" then
	    listeners[controls.PlayArrow].click()
	elseif text == "/rand" then
	    listeners[controls.forward].click()
	elseif text == "/reset" then
	    listeners[controls.back].click()
	end
end)
INFO