UI Converter Plugin 100%!

Are you tired of making beautiful UIs to realize that it was better to use a text button instead of an image button, well I have the solution with this completely free plugin. You can convert all UI elements, their texts, images and even their attributes… Select the elements to convert (you can select several) and with the plugin menu, you can convert the selected elements super easily

Capture d'écran 2024-06-05 204643

You will find the plugin here :https://create.roblox.com/store/asset/17745253067

If you want i will also give you the source code :

---------------------- Variables ----------------------

local selection = game:GetService("Selection")
local CHS = game:GetService("ChangeHistoryService")

local toolbar = plugin:CreateToolbar("UI Convertion Menu")

local button = toolbar:CreateButton("UI Convertion", "Open/Close the converter menu", "rbxassetid://17745027478")
local menu = plugin:CreatePluginMenu("UI Conversion Menu", "Select a conversion type", "rbxassetid://17745027478")

local button1 = menu:AddNewAction("Convert to \"Frame\"","Convert to \"Frame\"", "rbxassetid://17743111518")
local button2 = menu:AddNewAction("Convert to \"TextLabel\"", "Convert to \"TextLabel\"", "rbxassetid://17743125741")
local button3 = menu:AddNewAction("Convert to \"ImageLabel\"", "Convert to \"ImageLabel\"", "rbxassetid://17743268042")
local button4 = menu:AddNewAction("Convert to \"TextButton\"", "Convert to \"TextButton\"", "rbxassetid://17743272279")
local button5 = menu:AddNewAction("Convert to \"ImageButton\"", "Convert to \"ImageButton\"", "rbxassetid://17743278198")
local button6 = menu:AddNewAction("Convert to \"TextBox\"", "Convert to \"TextBox\"", "rbxassetid://17743280235")
local button7 = menu:AddNewAction("Convert to \"ScrollingFrame\"", "Convert to \"ScrollingFrame\"", "rbxassetid://17743313709")


---------------------- Function ----------------------

local function convert(what)

	local selected, v = {}, 0
	for i, ui in ipairs(selection:Get()) do
		if ui:IsA("Frame") or ui:IsA("TextLabel") or ui:IsA("ImageLabel")
			or ui:IsA("TextButton") or ui:IsA("ImageButton") or ui:IsA("TextBox") or ui:IsA("ScrollingFrame") then

			v += 1 if v == 1 then CHS:SetWaypoint("UI Convertion button pressed") end

			local new = Instance.new(what, ui.Parent)

			--Values
			new.Archivable = ui.Archivable
			new.Active = ui.Active
			new.AnchorPoint = ui.AnchorPoint
			new.AutomaticSize = ui.AutomaticSize
			new.BackgroundColor3 = ui.BackgroundColor3
			new.BackgroundTransparency = ui.BackgroundTransparency
			new.BorderColor3 = ui.BorderColor3
			new.BorderMode = ui.BorderMode
			new.BorderSizePixel = ui.BorderSizePixel

			new.Interactable = ui.Interactable
			new.LayoutOrder = ui.LayoutOrder
			new.Name = ui.Name
			new.Position = ui.Position
			new.Rotation = ui.Rotation
			new.Size = ui.Size
			new.SizeConstraint = ui.SizeConstraint

			new.Visible = ui.Visible
			new.ZIndex = ui.ZIndex
			new.AutoLocalize = ui.AutoLocalize
			new.RootLocalizationTable = ui.RootLocalizationTable

			new.NextSelectionDown = ui.NextSelectionDown
			new.NextSelectionLeft = ui.NextSelectionLeft
			new.NextSelectionUp = ui.NextSelectionUp
			new.NextSelectionRight = ui.NextSelectionRight
			new.Selectable = ui.Selectable
			new.SelectionGroup = ui.SelectionGroup
			new.SelectionOrder = ui.SelectionOrder

			for i, tag in ui:GetTags() do new:AddTag(tag) end
			for key, att in ui:GetAttributes() do new:SetAttribute(i, att) end
			for i, child in ui:GetChildren() do child.Parent = new end


			--Check for textLabels
			if (what == "TextLabel" or what == "TextButton" or what == "TextBox")
				and (ui:IsA("TextBox") or ui:IsA("TextLabel") or ui:IsA("TextButton")) then

				new.FontFace = ui.FontFace
				new.LineHeight = ui.LineHeight
				new.MaxVisibleGraphemes = ui.MaxVisibleGraphemes
				new.RichText = ui.RichText
				new.Text = ui.Text
				new.TextColor3 = ui.TextColor3
				new.TextDirection = ui.TextDirection

				new.TextScaled = ui.TextScaled
				new.TextSize = ui.TextSize
				new.TextStrokeColor3 = ui.TextStrokeColor3
				new.TextStrokeTransparency = ui.TextStrokeTransparency
				new.TextTransparency = ui.TextTransparency
				new.TextTruncate = ui.TextTruncate
				new.TextWrapped = ui.TextWrapped
				new.TextXAlignment = ui.TextXAlignment
				new.TextYAlignment = ui.TextYAlignment

			elseif not (ui:IsA("TextBox") or ui:IsA("TextLabel") or ui:IsA("TextButton"))
				and (what == "TextLabel" or what == "TextButton" or what == "TextBox") then
				new.Text = ""
			end


			--Check for Images
			if (what == "ImageLabel" or what == "ImageButton")
				and (ui:IsA("ImageLabel") or ui:IsA("ImageButton")) then

				new.Image = ui.Image
				new.ImageColor3 = ui.ImageColor3
				new.ImageRectOffset = ui.ImageRectOffset
				new.ImageRectSize = ui.ImageRectSize
				new.ImageTransparency = ui.ImageTransparency
				new.ResampleMode = ui.ResampleMode
				new.ScaleType = ui.ScaleType
			end

			ui.Parent = nil
			table.insert(selected, new)
		end

		selection:Set(selected)
		if v > 0 then CHS:SetWaypoint("UI Convertion done!") end
	end
end


---------------------- Buttons Actions ----------------------


button.Click:Connect(function() menu:ShowAsync() end)

button1.Triggered:Connect(function() convert("Frame") end)
button2.Triggered:Connect(function() convert("TextLabel") end)
button3.Triggered:Connect(function() convert("ImageLabel") end)
button4.Triggered:Connect(function() convert("TextButton") end)
button5.Triggered:Connect(function() convert("ImageButton") end)
button6.Triggered:Connect(function() convert("TextBox") end)
button7.Triggered:Connect(function() convert("ScrollingFrame") end)
4 Likes

Alright, but why not use Reclass which lets me convert all instances?

1 Like

because i took a whole day to make this plugin

2 Likes

Thanks for sharing your script didn’t even know that you could make a context menu with plugin

But reclass can do it with any instances despite it removes all children when converting to canvas group

Another thing did you fully test it wouldn’t it errors if it sees an propertie what doesn’t exist

And also you set the object to nil what I wouldn’t recommend cuz it will still exist in the memory it’s better to use destroy

2 Likes

How does this make it better than reclass

Because it is open source ma brother

@foodeggs7 thats true, i made this script many months ago and there were things i didn’t know

I would still use Reclass over this because it is more professional, has more use cases, and is more trustworthy. Reclass is paid, but you could look at the code if you bought it (as with all plugins).

Thanks for the plugin it helps for when some UI designers import UI’s and don’t use the UI elements correctly (eg: ImageLabel buttons, etc)

And this plugin is free.