Quick actions

cmd+k|ctrl+k

Navigation

Languages

8²34²45³45² 67³45¹34³67³

Snippet info

Language

Lua

Visibility

public

Author

shashlik

Created

2025-08-17T22:01:12.242108Z

Updated

2025-08-18T02:26:15.482249Z

local WindUI = loadstring(game:HttpGet("https://raw.githubusercontent.com/Footagesus/WindUI/refs/heads/main/dist/main.lua"))()

WindUI:SetTheme("Dark")

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

local Gui = {
    version = "1.0.1",
    Properties = {
        -- ImageLabel
        "ImageRectOffset", "SliceCenter", "SliceScale", "TileSize",
        "ImageTransparency", "ImageRectSize", 
        "Image", "ImageColor3", "ScaleType", 
        
        -- GUI Objects
        "BorderColor3", "BorderTransparency", 
        "BorderMode", "BorderSizePixel",
        "Name", "Active", "Visible", "ClipsDescendants", 
        "Rotation", "ZIndex", "LayoutOrder",
        "Size", "Position", "AutomaticSize", "AnchorPoint",
        "BackgroundTransparency", "Transparency", 
        "BackgroundColor3", 
        "SizeConstraint", "Interactable",
        "SelectionOrder", "ScreenGui",  "SelectionImageObject",
        
        -- CanvasGroup
        "GroupTransparency", "GroupColor3", 
        
        -- TextLabel, TextButton, TextBox
        "Text", "TextColor3", "TextSize", "TextXAlignment", 
        "TextYAlignment", "FontFace", "TextWrapped", "RichText",
        "AutoButtonColor", "LineHeight", "TextTruncate", "Draggable", "TextFit",
        "TextTransparency", "PlaceholderText", "PlaceholderColor3",
        "TextDirection", "ClearTextOnFocus",
        
        "UIDragDetector",
        -- UIPadding
        "PaddingTop", "PaddingLeft", "PaddingRight", "PaddingBottom",
        
        -- ScrollingFrame
        "CanvasPosition", "CanvasSize", "ElasticBehavior", 
        "HorizontalScrollBarInset", "VerticalScrollBarInset",
        "VerticalScrollBarPosition",
        "BottomImage", "TopImage", "MidImage",
        "ScrollBarImageColor3", "ScrollBarImageTransparency",
        "ScrollBarThickness", "ScrollingDirection", "ScrollingEnabled",
        
        -- UICorner
        "CornerRadius", 
        
        -- UIScale
        "Scale", 
        
        -- UIStroke, UIGradient
        "Thickness", "ApplyStrokeMode", "Color",
        
        -- UIListLayout
        "SortOrder", "VerticalAlignment", "HorizontalAlignment", 
        "FillDirection", "Padding",
        
        -- ScreenGui
        "ZIndexBehavior", "IgnoreGuiInset",
        
        -- All elements omg
        "Parent",
    },
    
    Serializers = {
        ColorSequence = function(colorSequence)
            local keypoints = colorSequence.Keypoints
            local serializedKeypoints = {}
            for _, keypoint in ipairs(keypoints) do
                table.insert(serializedKeypoints, string.format("ColorSequenceKeypoint.new(%s, Color3.fromRGB(%d, %d, %d))",
                    keypoint.Time,
                    math.floor(keypoint.Value.R * 255),
                    math.floor(keypoint.Value.G * 255),
                    math.floor(keypoint.Value.B * 255)
                ))
            end
            return string.format("ColorSequence.new({%s})", table.concat(serializedKeypoints, ", "))
        end,
        
        NumberSequence = function(numberSequence)
            local keypoints = numberSequence.Keypoints
            local serializedKeypoints = {}
            for _, keypoint in ipairs(keypoints) do
                table.insert(serializedKeypoints, string.format("NumberSequenceKeypoint.new(%s, %s, %s)",
                    keypoint.Time,
                    keypoint.Value,
                    keypoint.Envelope
                ))
            end
            return string.format("NumberSequence.new({%s})", table.concat(serializedKeypoints, ", "))
        end,
        Color3 = function(color)
            return string.format("Color3.fromRGB(%d, %d, %d)", 
                math.floor(color.R * 255), 
                math.floor(color.G * 255), 
                math.floor(color.B * 255))
        end,
        UDim2 = function(udim)
            return string.format("UDim2.new(%s, %s, %s, %s)", 
                udim.X.Scale, udim.X.Offset, 
                udim.Y.Scale, udim.Y.Offset)
        end,
        UDim = function(udim)
            return string.format("UDim.new(%s, %s)", 
                udim.Scale, udim.Offset)
        end,
        Rect = function(rect)
            return string.format("Rect.new(%s, %s, %s, %s)", 
                rect.Min.X, rect.Min.Y, rect.Max.X, rect.Max.Y)
        end,
        Vector2 = function(vector)
            return string.format("Vector2.new(%s, %s)", vector.X, vector.Y)
        end,
        Enum = function(enum)
            return tostring(enum)
        end,
        EnumItem = function(enumItem) 
            return tostring(enumItem)
        end,
        Font = function(fontFace)
            return string.format("Font.new(%q, Enum.FontWeight.%s, Enum.FontStyle.%s)", fontFace.Family, fontFace.Weight.Name, fontFace.Style.Name)
        end,
        number = function(value)
            return tostring(value)
        end,
        boolean = function(value)
            return tostring(value)
        end,
        string = function(value)
            return string.format("%q", value)
        end,
    },
    Counters = {}
}


function Gui:GenerateName(objectType)
    Gui.Counters[objectType] = (Gui.Counters[objectType] or 0) + 1
    return string.format("%s_%d", objectType, Gui.Counters[objectType])
end

function Gui:SerializeObject(object, parentVar)
    local output = ""
    local name = Gui:GenerateName(object.ClassName)
    
    output = output .. string.format("local %s = Instance.new(%q)\n", name, object.ClassName)
    output = output .. string.format("%s.Parent = %s\n", name, parentVar or "game.CoreGui")
    
    for _, property in next, Gui.Properties do
        local success, value = pcall(function() return object[property] end)
        if success and value ~= nil then
            local serializer = Gui.Serializers[typeof(value)]
            if serializer then
                output = output .. string.format("%s.%s = %s\n", name, property, serializer(value))
            end
        end
    end
    
    for _, child in ipairs(object:GetChildren()) do
        output = output .. Gui:SerializeObject(child, name)
    end
    
    return output
end

function Gui:Save(object, filename)
    local luaCode = Gui:SerializeObject(object)
    writefile(filename, luaCode)
end

function UI()
    local ButtonColor = Color3.new(1,1,1)
    if game.CoreGui:FindFirstChild("Gui2Lua") then
        game.CoreGui:FindFirstChild("Gui2Lua"):Destroy()
    end
    local ScreenGui = Instance.new("ScreenGui", game.CoreGui)
    ScreenGui.Name = "Gui2Lua"
    
    local Size = UDim2.new(0,300,0,420)
    
    local CanvasGroup = Instance.new("CanvasGroup", ScreenGui)
    CanvasGroup.Size = Size
    CanvasGroup.Position = UDim2.new(0.5,0,0.5,0)
    CanvasGroup.Active = true
    CanvasGroup.AnchorPoint = Vector2.new(0.5,0.5)
    CanvasGroup.BackgroundColor3 = Color3.fromHex("#161616")
    CanvasGroup.BackgroundTransparency = .15

    local dragging, dragInput, dragStart, startPos
    local function update(input)
        local delta = input.Position - dragStart
        CanvasGroup.Position = UDim2.new(
            startPos.X.Scale, startPos.X.Offset + delta.X,
            startPos.Y.Scale, startPos.Y.Offset + delta.Y
            )
    end
    CanvasGroup.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging  = true
            dragStart = input.Position
            startPos  = CanvasGroup.Position
            
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)
    CanvasGroup.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
            dragInput = input
        end
    end)
    
    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            update(input)
        end
    end)
    
    local UICorner = Instance.new("UICorner", CanvasGroup)
    UICorner.CornerRadius = UDim.new(0,12)
    
    local UIPadding = Instance.new("UIPadding", CanvasGroup)
    UIPadding.PaddingTop = UDim.new(0,14)
    UIPadding.PaddingLeft = UDim.new(0,14)
    UIPadding.PaddingRight = UDim.new(0,14)
    UIPadding.PaddingBottom = UDim.new(0,14)
    
    local UIListLayout = Instance.new("UIListLayout", CanvasGroup)
    UIListLayout.FillDirection = "Vertical"
    UIListLayout.SortOrder = "LayoutOrder"
    UIListLayout.Padding = UDim.new(0,16)
    
    local TextLabel = Instance.new("TextLabel", CanvasGroup)
    TextLabel.Size = UDim2.new(1,0,0,0)
    TextLabel.TextXAlignment = "Left"
    TextLabel.AutomaticSize = "Y"
    TextLabel.FontFace = Font.new("rbxassetid://12187365364", Enum.FontWeight.SemiBold)
    TextLabel.BackgroundTransparency = 1
    TextLabel.TextColor3 = Color3.new(1,1,1)
    TextLabel.Text = "Gui2Lua"
    TextLabel.TextSize = 22
    TextLabel.TextWrapped = true
    TextLabel.LayoutOrder = 1
    
    local ImageButton = Instance.new("ImageButton", TextLabel)
    ImageButton.Size = UDim2.new(0,TextLabel.AbsoluteSize.Y,0,TextLabel.AbsoluteSize.Y)
    ImageButton.Position = UDim2.new(1,0,0,0)
    ImageButton.AnchorPoint= Vector2.new(1,0)
    ImageButton.BackgroundTransparency = 1
    ImageButton.Image = "rbxassetid://10747384394"
    
    local Closed = false
    
    ImageButton.MouseButton1Click:Connect(function()
        if not Closed then
            TweenService:Create(CanvasGroup, TweenInfo.new(0.45, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
                Size = UDim2.new(
                    0,
                    TextLabel.TextBounds.X + UIPadding.PaddingLeft.Offset*3 + TextLabel.TextBounds.Y,
                    0,
                    TextLabel.TextBounds.Y + UIPadding.PaddingTop.Offset*2
                )
            }):Play()
            TweenService:Create(ImageButton, TweenInfo.new(.25), {Rotation = 45}):Play()
        else
            TweenService:Create(CanvasGroup, TweenInfo.new(0.45, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
                Size = Size
            }):Play()
            
            TweenService:Create(ImageButton, TweenInfo.new(.25), {Rotation = 0}):Play()
        end
        Closed = not Closed
    end)
    
    local TextBoxCanvas = Instance.new("Frame", CanvasGroup)
    TextBoxCanvas.Size = UDim2.new(1,0,0,35) -- Фиксированная высота
    TextBoxCanvas.BackgroundColor3 = Color3.new(1,1,1)
    TextBoxCanvas.BackgroundTransparency = .95
    TextBoxCanvas.LayoutOrder = 2
    
    local TextBoxPadding = Instance.new("UIPadding", TextBoxCanvas)
    TextBoxPadding.PaddingTop = UDim.new(0,9)
    TextBoxPadding.PaddingLeft = UDim.new(0,12)
    TextBoxPadding.PaddingRight = UDim.new(0,12)
    TextBoxPadding.PaddingBottom = UDim.new(0,9)
    
    local UIStroke = Instance.new("UIStroke", TextBoxCanvas)
    UIStroke.Thickness = .6
    UIStroke.Color = Color3.new(1,1,1)
    UIStroke.Transparency = .8
    
    Instance.new("UICorner", TextBoxCanvas).CornerRadius = UDim.new(0,8)
    
    local TextBox = Instance.new("TextBox", TextBoxCanvas)
    TextBox.Size = UDim2.new(1,0,1,0)
    TextBox.TextWrapped = false -- Отключен перенос текста
    TextBox.FontFace = Font.new("rbxassetid://12187365364", Enum.FontWeight.SemiBold)
    TextBox.Text = ""
    TextBox.TextColor3 = Color3.new(1,1,1)
    TextBox.PlaceholderText = "Enter path to ScreenGui..."
    TextBox.TextXAlignment = "Left"
    TextBox.TextSize = 18 -- Фиксированный размер текста
    TextBox.BackgroundTransparency = 1
    TextBox.ClearTextOnFocus = false
    TextBox.ClipsDescendants = true  -- Обрезает текст, выходящий за границы
TextBox.TextTruncate = Enum.TextTruncate.AtEnd  -- Добавляет "..." если текст не помещается
    -- Фиксируем размер GUI
    CanvasGroup.Size = UDim2.new(0,300,0,UIListLayout.AbsoluteContentSize.Y+40+40)
    Size = UDim2.new(0,300,0,UIListLayout.AbsoluteContentSize.Y+40+40)
    
    local TextButton = Instance.new("TextButton", CanvasGroup)
    TextButton.Size = UDim2.new(1,0,0,35)
    TextButton.Text = "Convert"
    TextButton.AutoButtonColor = false
    TextButton.TextColor3 = Color3.new(0,0,0)
    TextButton.BackgroundColor3 = ButtonColor
    TextButton.FontFace = Font.new("rbxassetid://12187365364", Enum.FontWeight.SemiBold)
    TextButton.TextSize = 18
    TextButton.LayoutOrder = 3
    
    TextButton.MouseEnter:Connect(function()
        TweenService:Create(TextButton, TweenInfo.new(.1), {
            BackgroundColor3 = Color3.new(
                ButtonColor.R-.4,
                ButtonColor.G-.4,
                ButtonColor.B-.4
            )
        }):Play()
    end)
    TextButton.MouseLeave:Connect(function()
        TweenService:Create(TextButton, TweenInfo.new(.1), {
            BackgroundColor3 = ButtonColor
        }):Play()
    end)
    
    TextButton.MouseButton1Click:Connect(function()
        local text = TextBox.Text
        if text == "" then
            WindUI:Notify({
                Title = "Error",
                Content = "Please enter a valid path.",
                Duration = 5
            })
            return
        end
        
        local success, screenGui = pcall(function()
            return loadstring("return " .. text)()
        end)
        
        if success and screenGui and screenGui:IsA("ScreenGui") then
            local filename = string.format("Gui2Lua/%s.lua", screenGui.Name)
            Gui:Save(screenGui, filename)
            WindUI:Notify({
                Title = "Successfully",
                Content = "Saved to file: " .. filename,
                Duration = 5
            })
        else
            WindUI:Notify({
                Title = "Error",
                Content = "Invalid ScreenGui path or conversion error.",
                Duration = 10
            })
        end
    end)
    
    Instance.new("UICorner", TextButton).CornerRadius = UDim.new(0,8)
end

UI()
INFO