an artfully marvelous show
Key RequiredUniversal

an artfully marvelous show

Universal Scriptimdisplayimdisplay 4.6K views 2.4K executesUpdated Apr 24, 2026
5.0/ 5(3 votes)
30100% Positive
Lua Script•127 lines (4973 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local ContentProvider = game:GetService("ContentProvider")
local player = Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart")
local MODEL_ID = "rbxassetid://110786751701517"
local AUDIO_URL = "https://github.com/phurinwong/phighting-sword-anims/raw/refs/heads/main/MonstrousPerformance.mp3"
local showModel = game:GetObjects(MODEL_ID)[1]
showModel.Parent = workspace
local offset = hrp.CFrame.LookVector * 25 + Vector3.new(0, 17, 0)
showModel:PivotTo(hrp.CFrame + offset)
local artful  = showModel:WaitForChild("Artful")
local pursuer = showModel:WaitForChild("Pursuer")
local a1 = artful:FindFirstChild("Animate")
if a1 then a1:Destroy() end
local a2 = pursuer:FindFirstChild("Animate")
if a2 then a2:Destroy() end
local artfulAnim  = artful:WaitForChild("AnimSaves"):WaitForChild("harmonicaanimartf")
local pursuerAnim = pursuer:WaitForChild("AnimSaves"):WaitForChild("harmonicaapurs")
local stagePart   = showModel:WaitForChild("soundpart", 10)
writefile("MonstrousPerformance.mp3", game:HttpGet(AUDIO_URL))
local sound = Instance.new("Sound")
sound.SoundId = getcustomasset("MonstrousPerformance.mp3")
sound.Volume = 1
sound.Parent = stagePart or showModel
local function buildMotorMap(model)
    local map = {}
    for _, v in ipairs(model:GetDescendants()) do
        if v:IsA("Motor6D") and v.Part1 then
            map[v.Part1.Name] = v
        end
    end
    return map
end
local artfulMotors  = buildMotorMap(artful)
local pursuerMotors = buildMotorMap(pursuer)
local function buildTweenData(model, kfs, motorMap)
    local motors = {}
    local values = {}
    for _, kf in ipairs(kfs:GetKeyframes()) do
        for _, pose in ipairs(kf:GetDescendants()) do
            if pose:IsA("Pose") then
                local m = motorMap[pose.Name]
                if m then
                    motors[pose.Name] = m
                    if not values[pose.Name] then
                        local val = Instance.new("CFrameValue")
                        val.Value = m.Transform
                        val.Parent = m
                        values[pose.Name] = val
                    end
                end
            end
        end
    end
    local tweens = {}
    local keyframes = kfs:GetKeyframes()
    table.sort(keyframes, function(a, b) return a.Time < b.Time end)
    for i = 1, #keyframes - 1 do
        local k1 = keyframes[i]
        local k2 = keyframes[i + 1]
        local dt  = k2.Time - k1.Time
        for _, pose in ipairs(k2:GetDescendants()) do
            if pose:IsA("Pose") and motors[pose.Name] then
                if pose.EasingStyle == Enum.PoseEasingStyle.Constant then
                    table.insert(tweens, {
                        delay = k1.Time,
                        snap  = true,
                        name  = pose.Name,
                        cframe = pose.CFrame,
                    })
                else
                    local t = TweenService:Create(
                        values[pose.Name],
                        TweenInfo.new(dt, Enum.EasingStyle.Linear),
                        { Value = pose.CFrame }
                    )
                    table.insert(tweens, {
                        delay = k1.Time,
                        tween = t,
                    })
                end
            end
        end
    end
    local length = keyframes[#keyframes].Time
    return tweens, motors, values, length
end
local function PlayKeyframeSequence(tweens, motors, values, length)
    local conn
    conn = RunService.Heartbeat:Connect(function()
        for name, motor in pairs(motors) do
            if values[name] then
                motor.Transform = values[name].Value
            end
        end
    end)
    for _, data in ipairs(tweens) do
        task.delay(data.delay, function()
            if data.snap then
                if values[data.name] then
                    values[data.name].Value = data.cframe
                end
            elseif data.tween then
                data.tween:Play()
            end
        end)
    end
    task.delay(length, function()
        if conn then conn:Disconnect() end
    end)
end
local artfulTweens,  artfulMotors2,  artfulValues,  len1 = buildTweenData(artful,  artfulAnim,  artfulMotors)
local pursuerTweens, pursuerMotors2, pursuerValues, len2 = buildTweenData(pursuer, pursuerAnim, pursuerMotors)
local totalLength = math.max(len1, len2)
ContentProvider:PreloadAsync({ sound, artful, pursuer })
task.wait(0.1)
PlayKeyframeSequence(artfulTweens,  artfulMotors2,  artfulValues,  len1)
PlayKeyframeSequence(pursuerTweens, pursuerMotors2, pursuerValues, len2)
task.wait(1.3)
sound:Play()
task.delay(totalLength + 0.5, function()
    if sound then sound:Destroy() end
    if showModel then showModel:Destroy() end
end)

Features & Information

watch artful and pursuer perform on stage artfully i guess this is client sided, only you can see it. if it freezes, don't panic, the animation is loading. i got inspired by the live performance in Artful's marvelous show on roblox and since i love roblox live performance events so much that i decided to turn it into a client-side script might not work well on low level executors like Xenos (probably stuff like audio desync or something like that) assets used https://www.roblox.com/games/111772397205366/Artfuls-Marvelous-Show animations and model https://www.youtube.com/watch?v=BsO4KWi1IKQ sound https://create.roblox.com/store/asset/121769105252456/Artful-Stage-show stage model

Community Comments (3)

rowdyjr26throwdyjr26thJun 9, 2026

this is so good and the song is god :D good one

yasukohOFFICALyasukohOFFICALJun 13, 2026

a

perplexedbutosperplexedbutosAug 27, 2026

uhh can i try to make this into a ss script i am a skid and i need your approval if you even read this

More Scripts for Universal Scripts