FE PNG Loader 2026 Remake
Key RequiredUniversal

FE PNG Loader 2026 Remake

Universal ScriptJustAMaleJustAMale 2.2K views 782 executesUpdated Feb 25, 2026
0.0/ 5(1 votes)
010% Positive
Lua Script•1274 lines (39765 chars)
-- Optimized F3X PNG Loader - Velocity Compatible + Fast Mode + Instant Mode
-- Changes: getcustomasset support, batch processing, skip transparent pixels,
-- parallel operations, configurable speed settings, INSTANT MODE

--// SETTINGS \\--
local SETTINGS = {
	BATCH_SIZE = 50,
	BATCH_DELAY = 0.03,
	SKIP_ALPHA_BELOW = 5,
	MAX_IMAGE_SIZE = 256,
	DOWNSCALE_FACTOR = 1,
	MERGE_SIMILAR_COLORS = true,
	COLOR_THRESHOLD = 10,
	USE_BULK_MOVE = true,
	PART_HEIGHT_MULTIPLIER = 5,
	FLAT_MODE = false,
	FLAT_HEIGHT = 1,

	-- INSTANT MODE SETTINGS
	INSTANT_MODE = false,
	INSTANT_THREADS = 100,        -- How many coroutines to spawn at once
	INSTANT_NO_YIELD = true,      -- Skip ALL yields for maximum speed
	INSTANT_SKIP_TRANSPARENCY = true, -- Skip transparency calls in instant mode
	INSTANT_QUEUE_SIZE = 500,     -- How many parts to queue before forcing yield
	INSTANT_PRECREATE_PARTS = true, -- Pre-create all parts before modifying them
}

--// EXECUTOR COMPATIBILITY \\--
local function getasset(path)
	if getcustomasset then
		return getcustomasset(path)
	elseif getsynasset then
		return getsynasset(path)
	end
end

local function httpget(url)
	if syn and syn.request then
		return syn.request({Url = url, Method = "GET"}).Body
	elseif http and http.request then
		return http.request({Url = url, Method = "GET"}).Body
	elseif request then
		return request({Url = url, Method = "GET"}).Body
	elseif game.HttpGetAsync then
		return game:HttpGetAsync(url)
	end
end

if (getcustomasset or getsynasset) and writefile and listfiles and readfile and isfile and isfolder and getgenv and loadstring then

	--// SERVICES \\--
	local Players = game:GetService("Players")
	local RunService = game:GetService("RunService")
	local CoreGui = game:GetService("CoreGui")
	local LocalPlayer = Players.LocalPlayer

	--// UTILITY FUNCTIONS \\--
	local function colorDistance(c1, c2)
		local dr = (c1.R - c2.R) * 255
		local dg = (c1.G - c2.G) * 255
		local db = (c1.B - c2.B) * 255
		return math.sqrt(dr * dr + dg * dg + db * db)
	end

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

	--// TOOL FINDER \\--
	local function gettool()
		local tools = {}
		local thetool
		for _, v in pairs(LocalPlayer:GetDescendants()) do
			if v:IsA("Tool") then
				table.insert(tools, v)
			end
		end
		if LocalPlayer.Character then
			for _, v in pairs(LocalPlayer.Character:GetChildren()) do
				if v:IsA("Tool") then
					table.insert(tools, v)
				end
			end
		end
		for _, tool in pairs(tools) do
			local handle = tool:FindFirstChild("Handle")
			if handle then
				local decal = handle:FindFirstChildOfClass("Decal")
				if decal then
					if string.find(decal.Texture, "129748355") then
						thetool = tool
						break
					end
				end
			end
		end
		return thetool
	end

	--// PROGRESS BAR \\--
	local function createProgressBar()
		local progressGui = Instance.new("ScreenGui")
		progressGui.Name = "PNGProgress"
		progressGui.Parent = CoreGui

		local frame = Instance.new("Frame")
		frame.Parent = progressGui
		frame.Size = UDim2.new(0.3, 0, 0.03, 0)
		frame.Position = UDim2.new(0.35, 0, 0.05, 0)
		frame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
		frame.BorderSizePixel = 0

		local corner = Instance.new("UICorner")
		corner.CornerRadius = UDim.new(0, 6)
		corner.Parent = frame

		local bar = Instance.new("Frame")
		bar.Parent = frame
		bar.Size = UDim2.new(0, 0, 1, 0)
		bar.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
		bar.BorderSizePixel = 0
		bar.Name = "Bar"

		local barCorner = Instance.new("UICorner")
		barCorner.CornerRadius = UDim.new(0, 6)
		barCorner.Parent = bar

		local label = Instance.new("TextLabel")
		label.Parent = frame
		label.Size = UDim2.new(1, 0, 1, 0)
		label.BackgroundTransparency = 1
		label.TextColor3 = Color3.new(1, 1, 1)
		label.Font = Enum.Font.SourceSansBold
		label.TextScaled = true
		label.Name = "Label"
		label.Text = "0%"
		label.ZIndex = 2

		local statsLabel = Instance.new("TextLabel")
		statsLabel.Parent = progressGui
		statsLabel.Size = UDim2.new(0.3, 0, 0.02, 0)
		statsLabel.Position = UDim2.new(0.35, 0, 0.08, 0)
		statsLabel.BackgroundTransparency = 1
		statsLabel.TextColor3 = Color3.fromRGB(180, 180, 180)
		statsLabel.Font = Enum.Font.SourceSans
		statsLabel.TextScaled = true
		statsLabel.Name = "Stats"
		statsLabel.Text = ""

		local modeLabel = Instance.new("TextLabel")
		modeLabel.Parent = progressGui
		modeLabel.Size = UDim2.new(0.3, 0, 0.02, 0)
		modeLabel.Position = UDim2.new(0.35, 0, 0.1, 0)
		modeLabel.BackgroundTransparency = 1
		modeLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
		modeLabel.Font = Enum.Font.SourceSansBold
		modeLabel.TextScaled = true
		modeLabel.Name = "Mode"
		modeLabel.Text = ""

		return {
			gui = progressGui,
			update = function(progress, current, total, elapsed, mode)
				bar.Size = UDim2.new(math.clamp(progress, 0, 1), 0, 1, 0)
				local percent = math.floor(progress * 100)
				label.Text = percent .. "%"

				local r = lerp(1, 0, progress)
				local g = lerp(0, 1, progress)
				bar.BackgroundColor3 = Color3.new(r, g, 0.2)

				if elapsed and current > 0 then
					local rate = current / elapsed
					local remaining = (total - current) / rate
					statsLabel.Text = string.format(
						"%d/%d parts | %.0f parts/sec | ~%.0fs remaining",
						current, total, rate, remaining
					)
				end

				if mode then
					modeLabel.Text = mode
				end
			end,
			destroy = function()
				progressGui:Destroy()
			end
		}
	end

	--// WARNING GUI FOR INSTANT MODE \\--
	local function showInstantWarning(callback)
		local warningGui = Instance.new("ScreenGui")
		warningGui.Name = "InstantWarning"
		warningGui.Parent = CoreGui

		local bg = Instance.new("Frame")
		bg.Parent = warningGui
		bg.Size = UDim2.new(1, 0, 1, 0)
		bg.BackgroundColor3 = Color3.new(0, 0, 0)
		bg.BackgroundTransparency = 0.5
		bg.ZIndex = 10

		local panel = Instance.new("Frame")
		panel.Parent = warningGui
		panel.Size = UDim2.new(0, 400, 0, 250)
		panel.Position = UDim2.new(0.5, -200, 0.5, -125)
		panel.BackgroundColor3 = Color3.fromRGB(30, 10, 10)
		panel.BorderSizePixel = 0
		panel.ZIndex = 11

		local panelCorner = Instance.new("UICorner")
		panelCorner.CornerRadius = UDim.new(0, 10)
		panelCorner.Parent = panel

		local panelStroke = Instance.new("UIStroke")
		panelStroke.Color = Color3.fromRGB(255, 50, 50)
		panelStroke.Thickness = 2
		panelStroke.Parent = panel

		local title = Instance.new("TextLabel")
		title.Parent = panel
		title.Size = UDim2.new(1, 0, 0, 40)
		title.BackgroundTransparency = 1
		title.Text = "⚠️ INSTANT MODE WARNING ⚠️"
		title.TextColor3 = Color3.fromRGB(255, 50, 50)
		title.Font = Enum.Font.SourceSansBold
		title.TextScaled = true
		title.ZIndex = 12

		local desc = Instance.new("TextLabel")
		desc.Parent = panel
		desc.Size = UDim2.new(1, -20, 0, 100)
		desc.Position = UDim2.new(0, 10, 0, 45)
		desc.BackgroundTransparency = 1
		desc.Text = "This will:\n• FREEZE your game temporarily\n• Spam server with requests\n• Use maximum CPU/memory\n• May crash on large images\n\nYour game WILL lag heavily."
		desc.TextColor3 = Color3.fromRGB(255, 200, 200)
		desc.Font = Enum.Font.SourceSans
		desc.TextScaled = true
		desc.TextWrapped = true
		desc.ZIndex = 12

		local confirmBtn = Instance.new("TextButton")
		confirmBtn.Parent = panel
		confirmBtn.Size = UDim2.new(0.4, 0, 0, 40)
		confirmBtn.Position = UDim2.new(0.05, 0, 1, -50)
		confirmBtn.BackgroundColor3 = Color3.fromRGB(200, 30, 30)
		confirmBtn.Text = "💀 DO IT"
		confirmBtn.TextColor3 = Color3.new(1, 1, 1)
		confirmBtn.Font = Enum.Font.SourceSansBold
		confirmBtn.TextScaled = true
		confirmBtn.ZIndex = 12

		local confirmCorner = Instance.new("UICorner")
		confirmCorner.CornerRadius = UDim.new(0, 6)
		confirmCorner.Parent = confirmBtn

		local cancelBtn = Instance.new("TextButton")
		cancelBtn.Parent = panel
		cancelBtn.Size = UDim2.new(0.4, 0, 0, 40)
		cancelBtn.Position = UDim2.new(0.55, 0, 1, -50)
		cancelBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
		cancelBtn.Text = "Cancel"
		cancelBtn.TextColor3 = Color3.new(1, 1, 1)
		cancelBtn.Font = Enum.Font.SourceSansBold
		cancelBtn.TextScaled = true
		cancelBtn.ZIndex = 12

		local cancelCorner = Instance.new("UICorner")
		cancelCorner.CornerRadius = UDim.new(0, 6)
		cancelCorner.Parent = cancelBtn

		confirmBtn.Activated:Connect(function()
			warningGui:Destroy()
			callback(true)
		end)

		cancelBtn.Activated:Connect(function()
			warningGui:Destroy()
			callback(false)
		end)
	end

	--// PIXEL OPTIMIZER \\--
	local function optimizePixels(imageData, width, height)
		local pixels = {}
		local skipped = 0
		local merged = 0
		local downscale = SETTINGS.DOWNSCALE_FACTOR

		local newWidth = math.floor(width / downscale)
		local newHeight = math.floor(height / downscale)

		if newWidth > SETTINGS.MAX_IMAGE_SIZE then
			local scale = SETTINGS.MAX_IMAGE_SIZE / newWidth
			newWidth = SETTINGS.MAX_IMAGE_SIZE
			newHeight = math.floor(newHeight * scale)
			downscale = width / newWidth
		end

		local grid = {}
		for y = 1, newHeight do
			grid[y] = {}
			for x = 1, newWidth do
				local srcX = math.min(math.floor((x - 1) * downscale) + 1, width)
				local srcY = math.min(math.floor((y - 1) * downscale) + 1, height)
				local color, alpha = imageData:GetPixel(srcX, srcY)

				if alpha >= SETTINGS.SKIP_ALPHA_BELOW then
					grid[y][x] = {
						color = color,
						alpha = alpha,
						x = x,
						y = y,
						merged = false,
						sizeX = 1,
						sizeZ = 1
					}
				else
					skipped = skipped + 1
				end
			end
		end

		if SETTINGS.MERGE_SIMILAR_COLORS then
			for y = 1, newHeight do
				for x = 1, newWidth do
					local pixel = grid[y][x]
					if pixel and not pixel.merged then
						local maxX = x
						for nx = x + 1, newWidth do
							local neighbor = grid[y][nx]
							if neighbor and not neighbor.merged
								and colorDistance(pixel.color, neighbor.color) < SETTINGS.COLOR_THRESHOLD
								and math.abs(pixel.alpha - neighbor.alpha) < SETTINGS.COLOR_THRESHOLD then
								maxX = nx
							else
								break
							end
						end

						local maxY = y
						local canExpand = true
						for ny = y + 1, newHeight do
							if not canExpand then break end
							for cx = x, maxX do
								local neighbor = grid[ny][cx]
								if not neighbor or neighbor.merged
									or colorDistance(pixel.color, neighbor.color) >= SETTINGS.COLOR_THRESHOLD
									or math.abs(pixel.alpha - neighbor.alpha) >= SETTINGS.COLOR_THRESHOLD then
									canExpand = false
									break
								end
							end
							if canExpand then
								maxY = ny
							end
						end

						local sizeX = maxX - x + 1
						local sizeZ = maxY - y + 1

						if sizeX > 1 or sizeZ > 1 then
							for my = y, maxY do
								for mx = x, maxX do
									if not (mx == x and my == y) then
										if grid[my][mx] then
											grid[my][mx].merged = true
											merged = merged + 1
										end
									end
								end
							end
						end

						pixel.sizeX = sizeX
						pixel.sizeZ = sizeZ
						pixel.x = x + (sizeX - 1) / 2
						pixel.y = y + (sizeZ - 1) / 2
					end
				end
			end
		end

		for y = 1, newHeight do
			for x = 1, newWidth do
				local pixel = grid[y][x]
				if pixel and not pixel.merged then
					table.insert(pixels, pixel)
				end
			end
		end

		print(string.format(
			"[PNG Optimizer] Original: %dx%d (%d pixels) | Skipped: %d transparent | Merged: %d | Final: %d parts",
			width, height, width * height, skipped, merged, #pixels
		))

		return pixels, newWidth, newHeight
	end

	--// ============================= \\--
	--// INSTANT MODE ENGINE            \\--
	--// ============================= \\--
	local function instantBuild(pixels, ServerEndpoint, origin, offset, progressBar)
		local totalPixels = #pixels
		local processed = 0
		local startTime = tick()
		local threads = SETTINGS.INSTANT_THREADS
		local activeThreads = 0
		local maxThreads = threads
		local completed = Instance.new("BindableEvent")
		local allDone = false
		local groupModel = ServerEndpoint:InvokeServer("CreateGroup", "Model", workspace, {})
		ServerEndpoint:InvokeServer("SetName", {groupModel}, "_PNG_INSTANT")

		progressBar.update(0, 0, totalPixels, 0, "💀 INSTANT MODE - FREEZING GAME...")

		-- Phase 1: Pre-create ALL parts at once if enabled
		local parts = {}
		if SETTINGS.INSTANT_PRECREATE_PARTS then
			progressBar.update(0, 0, totalPixels, 0, "💀 PHASE 1: Creating all parts...")

			local createBatch = {}
			local batchCount = 0

			for i = 1, totalPixels do
				-- Fire off part creation without waiting
				local idx = i
				spawn(function()
					local part = ServerEndpoint:InvokeServer("CreatePart", "Normal", CFrame.new(), groupModel)
					parts[idx] = part
					batchCount = batchCount + 1

					if batchCount % 200 == 0 then
						local elapsed = tick() - startTime
						progressBar.update(
							batchCount / totalPixels * 0.3,
							batchCount,
							totalPixels,
							elapsed,
							string.format("💀 PHASE 1: Creating parts... %d/%d", batchCount, totalPixels)
						)
					end
				end)

				-- Micro yield every N parts to prevent complete freeze
				if i % SETTINGS.INSTANT_QUEUE_SIZE == 0 then
					RunService.Heartbeat:Wait()
				end
			end

			-- Wait for all parts to be created
			while batchCount < totalPixels do
				RunService.Heartbeat:Wait()
				local elapsed = tick() - startTime
				progressBar.update(
					batchCount / totalPixels * 0.3,
					batchCount,
					totalPixels,
					elapsed,
					string.format("💀 PHASE 1: Waiting for parts... %d/%d", batchCount, totalPixels)
				)

				if groupModel.Parent ~= workspace then
					return false, 0
				end
			end

			progressBar.update(0.3, 0, totalPixels, tick() - startTime, "💀 PHASE 2: Applying properties...")
		end

		-- Phase 2: Apply ALL properties simultaneously using massive coroutine spam
		local phase2Start = tick()
		processed = 0

		local function processPixelInstant(index)
			local pixel = pixels[index]
			local color = pixel.color
			local alpha = pixel.alpha

			local v18
			if SETTINGS.FLAT_MODE then
				v18 = SETTINGS.FLAT_HEIGHT
			else
				v18 = (1 + SETTINGS.PART_HEIGHT_MULTIPLIER * (color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722)) * (alpha / 255)
			end

			local partPos = origin + offset + Vector3.new(pixel.x, v18 / 2, pixel.y)
			local partSize = Vector3.new(pixel.sizeX, v18, pixel.sizeZ)
			local partCFrame = CFrame.new(partPos)
			local transparency = 1 - alpha / 255

			local part = parts[index]
			if not part then
				part = ServerEndpoint:InvokeServer("CreatePart", "Normal", CFrame.new(), groupModel)
			end

			-- Fire ALL operations simultaneously without waiting
			part.Position = partPos

			-- Spawn separate threads for each operation - NO WAITING
			coroutine.wrap(function()
				pcall(function()
					ServerEndpoint:InvokeServer("SyncMove", {{CFrame = partCFrame, Part = part}})
				end)
			end)()

			coroutine.wrap(function()
				pcall(function()
					ServerEndpoint:InvokeServer("SyncResize", {{CFrame = partCFrame, Part = part, Size = partSize}})
				end)
			end)()

			coroutine.wrap(function()
				pcall(function()
					ServerEndpoint:InvokeServer("SyncColor", {{Color = color, Part = part, UnionColoring = true}})
				end)
			end)()

			if not SETTINGS.INSTANT_SKIP_TRANSPARENCY and transparency > 0 then
				coroutine.wrap(function()
					pcall(function()
						ServerEndpoint:InvokeServer("SyncMaterial", {{Part = part, Transparency = transparency}})
					end)
				end)()
			end

			processed = processed + 1
		end

		-- SPAM ALL THREADS AT ONCE
		local threadPool = {}
		local threadIndex = 1

		local function spawnNextBatch()
			local batchEnd = math.min(threadIndex + maxThreads - 1, totalPixels)

			for i = threadIndex, batchEnd do
				if groupModel.Parent ~= workspace then
					return false
				end

				coroutine.wrap(function()
					activeThreads = activeThreads + 1
					processPixelInstant(i)
					activeThreads = activeThreads - 1
				end)()
			end

			threadIndex = batchEnd + 1
			return threadIndex <= totalPixels
		end

		-- BLAST through all pixels
		if SETTINGS.INSTANT_NO_YIELD then
			-- MAXIMUM SPEED: Minimal yielding
			while threadIndex <= totalPixels do
				if groupModel.Parent ~= workspace then
					return false, processed
				end

				-- Spawn massive batch
				for i = 1, maxThreads do
					if threadIndex > totalPixels then break end

					coroutine.wrap(function()
						processPixelInstant(threadIndex)
					end)()

					threadIndex = threadIndex + 1
				end

				-- Only yield every QUEUE_SIZE to prevent COMPLETE freeze
				if threadIndex % SETTINGS.INSTANT_QUEUE_SIZE == 0 then
					RunService.Heartbeat:Wait()
					local elapsed = tick() - startTime
					local baseProgress = SETTINGS.INSTANT_PRECREATE_PARTS and 0.3 or 0
					local remainingProgress = 1 - baseProgress
					progressBar.update(
						baseProgress + (processed / totalPixels) * remainingProgress,
						processed,
						totalPixels,
						elapsed,
						string.format("💀 INSTANT: %d threads | %d active", processed, activeThreads)
					)
				end
			end
		else
			-- Slightly safer instant mode with more yields
			while threadIndex <= totalPixels do
				if groupModel.Parent ~= workspace then
					return false, processed
				end

				spawnNextBatch()

				-- Wait for threads to calm down
				while activeThreads > maxThreads * 0.8 do
					RunService.Heartbeat:Wait()
				end

				local elapsed = tick() - startTime
				local baseProgress = SETTINGS.INSTANT_PRECREATE_PARTS and 0.3 or 0
				local remainingProgress = 1 - baseProgress
				progressBar.update(
					baseProgress + (processed / totalPixels) * remainingProgress,
					processed,
					totalPixels,
					elapsed,
					string.format("💀 INSTANT: %d/%d | %d active threads", processed, totalPixels, activeThreads)
				)
			end
		end

		-- Wait for remaining threads to finish
		local timeout = tick()
		while processed < totalPixels and (tick() - timeout) < 60 do
			RunService.Heartbeat:Wait()
			local elapsed = tick() - startTime
			progressBar.update(
				processed / totalPixels,
				processed,
				totalPixels,
				elapsed,
				string.format("💀 Finishing... %d/%d | %d active", processed, totalPixels, activeThreads)
			)
		end

		return true, processed, groupModel
	end

	--// ============================= \\--
	--// NORMAL BUILD ENGINE             \\--
	--// ============================= \\--
	local function normalBuild(pixels, ServerEndpoint, origin, offset, progressBar)
		local totalPixels = #pixels
		local processed = 0
		local startTime = tick()
		local v12 = ServerEndpoint:InvokeServer("CreateGroup", "Model", workspace, {})
		ServerEndpoint:InvokeServer("SetName", {v12}, "_PNG")

		local v13 = true
		local batchMoves = {}
		local batchColors = {}
		local batchResizes = {}
		local batchMaterials = {}

		for i = 1, totalPixels do
			local pixel = pixels[i]

			if v12.Parent ~= workspace then
				v13 = false
				break
			end

			local color = pixel.color
			local alpha = pixel.alpha

			local v18
			if SETTINGS.FLAT_MODE then
				v18 = SETTINGS.FLAT_HEIGHT
			else
				v18 = (1 + SETTINGS.PART_HEIGHT_MULTIPLIER * (color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722)) * (alpha / 255)
			end

			local v19 = ServerEndpoint:InvokeServer("CreatePart", "Normal", CFrame.new(), v12)
			local transparency = 1 - alpha / 255

			local partPos = origin + offset + Vector3.new(pixel.x, v18 / 2, pixel.y)
			local partSize = Vector3.new(pixel.sizeX, v18, pixel.sizeZ)
			local partCFrame = CFrame.new(partPos)

			v19.Position = partPos

			table.insert(batchMoves, {CFrame = partCFrame, Part = v19})
			table.insert(batchResizes, {CFrame = partCFrame, Part = v19, Size = partSize})
			table.insert(batchColors, {Color = color, Part = v19, UnionColoring = true})

			if transparency > 0 then
				table.insert(batchMaterials, {Part = v19, Transparency = transparency})
			end

			processed = processed + 1

			if processed % SETTINGS.BATCH_SIZE == 0 or i == totalPixels then
				if SETTINGS.USE_BULK_MOVE and #batchMoves > 0 then
					pcall(function()
						ServerEndpoint:InvokeServer("SyncMove", batchMoves)
					end)
				else
					for _, move in pairs(batchMoves) do
						spawn(function()
							ServerEndpoint:InvokeServer("SyncMove", {move})
						end)
					end
				end

				if #batchResizes > 0 then
					pcall(function()
						ServerEndpoint:InvokeServer("SyncResize", batchResizes)
					end)
				end

				if #batchColors > 0 then
					pcall(function()
						ServerEndpoint:InvokeServer("SyncColor", batchColors)
					end)
				end

				if #batchMaterials > 0 then
					pcall(function()
						ServerEndpoint:InvokeServer("SyncMaterial", batchMaterials)
					end)
				end

				batchMoves = {}
				batchColors = {}
				batchResizes = {}
				batchMaterials = {}

				local elapsed = tick() - startTime
				progressBar.update(processed / totalPixels, processed, totalPixels, elapsed, "⚡ Normal Mode")

				if SETTINGS.BATCH_DELAY > 0 then
					task.wait(SETTINGS.BATCH_DELAY)
				else
					RunService.Heartbeat:Wait()
				end
			end
		end

		return v13, processed, v12
	end

	--// MAIN GUI SETUP \\--
	local ScreenGui = Instance.new("ScreenGui")
	local l__InputUrl__1 = Instance.new("TextBox")
	local ImportImageButton = Instance.new("TextButton")
	local ServerEndpoint = gettool():WaitForChild("SyncAPI"):WaitForChild("ServerEndpoint")
	local CorePackagesFolder = Instance.new("Folder")
	local PNGImporterGui = game:GetObjects("rbxassetid://11320460700")[1]
	local FileFrame = PNGImporterGui.Frame.ScrollingFrame.File:Clone()
	PNGImporterGui.Frame.ScrollingFrame.File:Destroy()
	local PNGImporter_Show = false
	PNGImporterGui.Parent = CoreGui
	PNGImporterGui.Frame.Active = true
	PNGImporterGui.Frame.Draggable = true

	local folder_exists = isfolder("png_images")
	local tutorialvideo_exists = isfile("pngfileloader-tutorial.png")
	local has_saw_tutorial = isfile("hasseentutorial.txt")

	local videoframe = Instance.new("ImageLabel")
	videoframe.Parent = ScreenGui
	videoframe.Position = UDim2.new(0.5, -568, 0.5, -319)
	videoframe.Size = UDim2.new(0, 1136, 0, 639)
	videoframe.BorderSizePixel = 0

	if not folder_exists then
		makefolder("png_images")
	end
	if not has_saw_tutorial then
		writefile("hasseentutorial.txt", "false")
	end
	if not tutorialvideo_exists then
		local success, data = pcall(function()
			return httpget("https://github.com/Lowerrated/rbx-f3x-png-loader/raw/main/tutorial.png")
		end)
		if success and data then
			writefile("pngfileloader-tutorial.png", data)
		end
	end

	if isfile("pngfileloader-tutorial.png") then
		videoframe.Image = getasset("pngfileloader-tutorial.png")
		videoframe.ImageRectSize = Vector2.new(1136, 639)
		videoframe.ScaleType = Enum.ScaleType.Fit
	end

	if readfile("hasseentutorial.txt") == "false" then
		spawn(function()
			task.wait(5)
			videoframe.ImageRectOffset = Vector2.new(2272, 0)
			task.wait(8)
			videoframe.ImageRectOffset = Vector2.new(3408, 0)
			task.wait(14)
			videoframe.ImageRectOffset = Vector2.new(4544, 0)
			task.wait(21)
			videoframe:Destroy()
			writefile("hasseentutorial.txt", "true")
		end)
	else
		videoframe:Destroy()
	end

	--// FILE BROWSER \\--
	local function refreshfiles()
		local files = listfiles("png_images")
		for _, v in pairs(PNGImporterGui.Frame.ScrollingFrame:GetChildren()) do
			if v:IsA("TextButton") then
				v:Destroy()
			end
		end
		for _, file in pairs(files) do
			local filewithextenstionname = string.gsub(file, "png_images" .. string.rep(string.char(92), 2), "")
			filewithextenstionname = string.gsub(filewithextenstionname, string.char(92), "/")
			if string.lower(string.sub(filewithextenstionname, string.len(filewithextenstionname) - 3, string.len(filewithextenstionname))) == ".png" then
				local frame = FileFrame:Clone()
				frame.Parent = PNGImporterGui.Frame.ScrollingFrame
				frame.Image.TextLabel.Text = string.sub(filewithextenstionname, 1, string.len(filewithextenstionname) - 4)
				frame.Image.Image = getasset("png_images/" .. string.gsub(filewithextenstionname, "png_images/", ""))
				frame.Activated:Connect(function()
					l__InputUrl__1.Text = "file:///" .. filewithextenstionname
				end)
			end
		end
	end

	refreshfiles()
	CorePackagesFolder.Name = "PNGLoaderModule"
	ScreenGui.Parent = CoreGui

	LocalPlayer.CharacterAdded:Connect(function()
		task.wait(1)
		local tool = gettool()
		if tool then
			ServerEndpoint = tool:WaitForChild("SyncAPI"):WaitForChild("ServerEndpoint")
		end
	end)

	getgenv().pngmodule = CorePackagesFolder

	--// INPUT URL BAR \\--
	l__InputUrl__1.Parent = ScreenGui
	l__InputUrl__1.Size = UDim2.new(1, 0, 0.025, 0)
	l__InputUrl__1.BackgroundColor3 = Color3.fromRGB(31, 31, 31)
	l__InputUrl__1.Font = Enum.Font.SourceSansBold
	l__InputUrl__1.TextScaled = true
	l__InputUrl__1.PlaceholderText = "Paste the URL to a PNG file here."
	l__InputUrl__1.Name = "InputUrl"
	l__InputUrl__1.TextColor3 = Color3.fromRGB(0, 0, 0)
	l__InputUrl__1.AnchorPoint = Vector2.new(0, 1)
	l__InputUrl__1.Position = UDim2.new(0, 0, 1, 0)
	l__InputUrl__1.Text = ""
	l__InputUrl__1.ClearTextOnFocus = false

	--// SETTINGS BUTTON \\--
	local SettingsButton = Instance.new("TextButton")
	SettingsButton.Parent = l__InputUrl__1
	SettingsButton.Text = "⚙"
	SettingsButton.Size = UDim2.new(0, 20, 0, workspace.CurrentCamera.ViewportSize.Y * 0.025)
	SettingsButton.ZIndex = 2
	SettingsButton.AnchorPoint = Vector2.new(1, 0)
	SettingsButton.Position = UDim2.new(1, -22, 0, -20)
	SettingsButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
	SettingsButton.TextColor3 = Color3.new(1, 1, 1)
	SettingsButton.Font = Enum.Font.SourceSansBold
	SettingsButton.TextScaled = true

	--// INSTANT MODE BUTTON \\--
	local InstantButton = Instance.new("TextButton")
	InstantButton.Parent = l__InputUrl__1
	InstantButton.Text = "💀"
	InstantButton.Size = UDim2.new(0, 20, 0, workspace.CurrentCamera.ViewportSize.Y * 0.025)
	InstantButton.ZIndex = 2
	InstantButton.AnchorPoint = Vector2.new(1, 0)
	InstantButton.Position = UDim2.new(1, -44, 0, -20)
	InstantButton.BackgroundColor3 = SETTINGS.INSTANT_MODE and Color3.fromRGB(200, 30, 30) or Color3.fromRGB(50, 50, 50)
	InstantButton.TextColor3 = Color3.new(1, 1, 1)
	InstantButton.Font = Enum.Font.SourceSansBold
	InstantButton.TextScaled = true

	InstantButton.Activated:Connect(function()
		SETTINGS.INSTANT_MODE = not SETTINGS.INSTANT_MODE
		InstantButton.BackgroundColor3 = SETTINGS.INSTANT_MODE and Color3.fromRGB(200, 30, 30) or Color3.fromRGB(50, 50, 50)

		if SETTINGS.INSTANT_MODE then
			l__InputUrl__1.PlaceholderText = "💀 INSTANT MODE ON - Paste URL here"
			l__InputUrl__1.BackgroundColor3 = Color3.fromRGB(50, 20, 20)
		else
			l__InputUrl__1.PlaceholderText = "Paste the URL to a PNG file here."
			l__InputUrl__1.BackgroundColor3 = Color3.fromRGB(31, 31, 31)
		end
	end)

	--// SETTINGS PANEL \\--
	local SettingsPanel = Instance.new("Frame")
	SettingsPanel.Parent = ScreenGui
	SettingsPanel.Size = UDim2.new(0, 280, 0, 500)
	SettingsPanel.Position = UDim2.new(1, -290, 1, -550)
	SettingsPanel.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
	SettingsPanel.BorderSizePixel = 0
	SettingsPanel.Visible = false
	SettingsPanel.Active = true
	SettingsPanel.Draggable = true

	local settingsCorner = Instance.new("UICorner")
	settingsCorner.CornerRadius = UDim.new(0, 8)
	settingsCorner.Parent = SettingsPanel

	local settingsTitle = Instance.new("TextLabel")
	settingsTitle.Parent = SettingsPanel
	settingsTitle.Size = UDim2.new(1, 0, 0, 30)
	settingsTitle.BackgroundTransparency = 1
	settingsTitle.Text = "⚡ PNG Speed Settings"
	settingsTitle.TextColor3 = Color3.fromRGB(0, 170, 255)
	settingsTitle.Font = Enum.Font.SourceSansBold
	settingsTitle.TextScaled = true

	local settingsLayout = Instance.new("UIListLayout")
	settingsLayout.Parent = SettingsPanel
	settingsLayout.SortOrder = Enum.SortOrder.LayoutOrder
	settingsLayout.Padding = UDim.new(0, 2)

	local function createSettingRow(name, key, min, max, increment)
		local row = Instance.new("Frame")
		row.Parent = SettingsPanel
		row.Size = UDim2.new(1, -10, 0, 25)
		row.BackgroundTransparency = 1
		row.LayoutOrder = #SettingsPanel:GetChildren()

		local label = Instance.new("TextLabel")
		label.Parent = row
		label.Size = UDim2.new(0.6, 0, 1, 0)
		label.Position = UDim2.new(0, 5, 0, 0)
		label.BackgroundTransparency = 1
		label.Text = name
		label.TextColor3 = Color3.new(1, 1, 1)
		label.Font = Enum.Font.SourceSans
		label.TextScaled = true
		label.TextXAlignment = Enum.TextXAlignment.Left

		local input = Instance.new("TextBox")
		input.Parent = row
		input.Size = UDim2.new(0.35, 0, 1, -4)
		input.Position = UDim2.new(0.63, 0, 0, 2)
		input.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
		input.TextColor3 = Color3.new(1, 1, 1)
		input.Font = Enum.Font.SourceSansBold
		input.TextScaled = true
		input.Text = tostring(SETTINGS[key])
		input.ClearTextOnFocus = true

		local inputCorner = Instance.new("UICorner")
		inputCorner.CornerRadius = UDim.new(0, 4)
		inputCorner.Parent = input

		input.FocusLost:Connect(function()
			local num = tonumber(input.Text)
			if num then
				num = math.clamp(num, min, max)
				if increment then
					num = math.floor(num / increment) * increment
				end
				SETTINGS[key] = num
				input.Text = tostring(num)
			else
				input.Text = tostring(SETTINGS[key])
			end
		end)

		return row
	end

	local function createToggleRow(name, key)
		local row = Instance.new("Frame")
		row.Parent = SettingsPanel
		row.Size = UDim2.new(1, -10, 0, 25)
		row.BackgroundTransparency = 1
		row.LayoutOrder = #SettingsPanel:GetChildren()

		local label = Instance.new("TextLabel")
		label.Parent = row
		label.Size = UDim2.new(0.6, 0, 1, 0)
		label.Position = UDim2.new(0, 5, 0, 0)
		label.BackgroundTransparency = 1
		label.Text = name
		label.TextColor3 = Color3.new(1, 1, 1)
		label.Font = Enum.Font.SourceSans
		label.TextScaled = true
		label.TextXAlignment = Enum.TextXAlignment.Left

		local toggle = Instance.new("TextButton")
		toggle.Parent = row
		toggle.Size = UDim2.new(0.35, 0, 1, -4)
		toggle.Position = UDim2.new(0.63, 0, 0, 2)
		toggle.Font = Enum.Font.SourceSansBold
		toggle.TextScaled = true
		toggle.Text = SETTINGS[key] and "ON" or "OFF"
		toggle.BackgroundColor3 = SETTINGS[key] and Color3.fromRGB(0, 150, 0) or Color3.fromRGB(150, 0, 0)
		toggle.TextColor3 = Color3.new(1, 1, 1)

		local toggleCorner = Instance.new("UICorner")
		toggleCorner.CornerRadius = UDim.new(0, 4)
		toggleCorner.Parent = toggle

		toggle.Activated:Connect(function()
			SETTINGS[key] = not SETTINGS[key]
			toggle.Text = SETTINGS[key] and "ON" or "OFF"
			toggle.BackgroundColor3 = SETTINGS[key] and Color3.fromRGB(0, 150, 0) or Color3.fromRGB(150, 0, 0)
		end)

		return row
	end

	-- Normal settings
	local normalHeader = Instance.new("TextLabel")
	normalHeader.Parent = SettingsPanel
	normalHeader.Size = UDim2.new(1, 0, 0, 20)
	normalHeader.BackgroundTransparency = 1
	normalHeader.Text = "── Normal Mode ──"
	normalHeader.TextColor3 = Color3.fromRGB(100, 200, 255)
	normalHeader.Font = Enum.Font.SourceSansBold
	normalHeader.TextScaled = true
	normalHeader.LayoutOrder = 2

	createSettingRow("Batch Size", "BATCH_SIZE", 1, 200, 1)
	createSettingRow("Batch Delay", "BATCH_DELAY", 0, 1, 0.01)
	createSettingRow("Skip Alpha Below", "SKIP_ALPHA_BELOW", 0, 255, 1)
	createSettingRow("Max Image Size", "MAX_IMAGE_SIZE", 16, 512, 1)
	createSettingRow("Downscale Factor", "DOWNSCALE_FACTOR", 1, 16, 1)
	createSettingRow("Color Threshold", "COLOR_THRESHOLD", 0, 255, 1)
	createSettingRow("Height Multiplier", "PART_HEIGHT_MULTIPLIER", 0, 20, 0.5)
	createSettingRow("Flat Height", "FLAT_HEIGHT", 0.1, 10, 0.1)
	createToggleRow("Merge Colors", "MERGE_SIMILAR_COLORS")
	createToggleRow("Flat Mode", "FLAT_MODE")
	createToggleRow("Bulk Move", "USE_BULK_MOVE")

	-- Instant mode settings
	local instantHeader = Instance.new("TextLabel")
	instantHeader.Parent = SettingsPanel
	instantHeader.Size = UDim2.new(1, 0, 0, 20)
	instantHeader.BackgroundTransparency = 1
	instantHeader.Text = "── 💀 Instant Mode ──"
	instantHeader.TextColor3 = Color3.fromRGB(255, 80, 80)
	instantHeader.Font = Enum.Font.SourceSansBold
	instantHeader.TextScaled = true
	instantHeader.LayoutOrder = 50

	createSettingRow("Threads", "INSTANT_THREADS", 10, 500, 10)
	createSettingRow("Queue Size", "INSTANT_QUEUE_SIZE", 50, 2000, 50)
	createToggleRow("No Yield", "INSTANT_NO_YIELD")
	createToggleRow("Skip Transparency", "INSTANT_SKIP_TRANSPARENCY")
	createToggleRow("Pre-create Parts", "INSTANT_PRECREATE_PARTS")

	-- Speed presets
	local presetLabel = Instance.new("TextLabel")
	presetLabel.Parent = SettingsPanel
	presetLabel.Size = UDim2.new(1, 0, 0, 20)
	presetLabel.BackgroundTransparency = 1
	presetLabel.Text = "⚡ Speed Presets"
	presetLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
	presetLabel.Font = Enum.Font.SourceSansBold
	presetLabel.TextScaled = true
	presetLabel.LayoutOrder = 100

	local presetFrame = Instance.new("Frame")
	presetFrame.Parent = SettingsPanel
	presetFrame.Size = UDim2.new(1, -10, 0, 30)
	presetFrame.BackgroundTransparency = 1
	presetFrame.LayoutOrder = 101

	local presetLayout = Instance.new("UIListLayout")
	presetLayout.Parent = presetFrame
	presetLayout.FillDirection = Enum.FillDirection.Horizontal
	presetLayout.SortOrder = Enum.SortOrder.LayoutOrder
	presetLayout.Padding = UDim.new(0, 4)

	local presets = {
		{"🐢 Safe", {BATCH_SIZE = 10, BATCH_DELAY = 0.1, DOWNSCALE_FACTOR = 2, MERGE_SIMILAR_COLORS = true, COLOR_THRESHOLD = 20, INSTANT_MODE = false}},
		{"⚡ Fast", {BATCH_SIZE = 50, BATCH_DELAY = 0.03, DOWNSCALE_FACTOR = 1, MERGE_SIMILAR_COLORS = true, COLOR_THRESHOLD = 10, INSTANT_MODE = false}},
		{"🚀 Ultra", {BATCH_SIZE = 100, BATCH_DELAY = 0.01, DOWNSCALE_FACTOR = 1, MERGE_SIMILAR_COLORS = true, COLOR_THRESHOLD = 5, INSTANT_MODE = false}},
		{"💀 INSTANT", {INSTANT_MODE = true, INSTANT_THREADS = 200, INSTANT_NO_YIELD = true, INSTANT_QUEUE_SIZE = 500, MERGE_SIMILAR_COLORS = true, COLOR_THRESHOLD = 10}},
	}

	for i, preset in pairs(presets) do
		local btn = Instance.new("TextButton")
		btn.Parent = presetFrame
		btn.Size = UDim2.new(0.24, -3, 1, 0)
		btn.BackgroundColor3 = Color3.fromRGB(40, 40, 60)
		btn.TextColor3 = Color3.new(1, 1, 1)
		btn.Font = Enum.Font.SourceSansBold
		btn.TextScaled = true
		btn.Text = preset[1]
		btn.LayoutOrder = i

		local btnCorner = Instance.new("UICorner")
		btnCorner.CornerRadius = UDim.new(0, 4)
		btnCorner.Parent = btn

		btn.Activated:Connect(function()
			for key, value in pairs(preset[2]) do
				SETTINGS[key] = value
			end

			InstantButton.BackgroundColor3 = SETTINGS.INSTANT_MODE and Color3.fromRGB(200, 30, 30) or Color3.fromRGB(50, 50, 50)
			if SETTINGS.INSTANT_MODE then
				l__InputUrl__1.PlaceholderText = "💀 INSTANT MODE ON - Paste URL here"
				l__InputUrl__1.BackgroundColor3 = Color3.fromRGB(50, 20, 20)
			else
				l__InputUrl__1.PlaceholderText = "Paste the URL to a PNG file here."
				l__InputUrl__1.BackgroundColor3 = Color3.fromRGB(31, 31, 31)
			end

			print("[PNG Loader] Applied preset: " .. preset[1])
		end)
	end

	SettingsButton.Activated:Connect(function()
		SettingsPanel.Visible = not SettingsPanel.Visible
	end)

	--// FILE BROWSER BUTTON \\--
	ImportImageButton.Parent = l__InputUrl__1
	ImportImageButton.Text = "File"
	ImportImageButton.Size = UDim2.new(0, 20, 0, workspace.CurrentCamera.ViewportSize.Y * 0.025)
	ImportImageButton.ZIndex = 2
	ImportImageButton.AnchorPoint = Vector2.new(1, 0)

	workspace.CurrentCamera:GetPropertyChangedSignal("ViewportSize"):Connect(function()
		ImportImageButton.Size = UDim2.new(0, 20, 0, workspace.CurrentCamera.ViewportSize.Y * 0.025)
		SettingsButton.Size = UDim2.new(0, 20, 0, workspace.CurrentCamera.ViewportSize.Y * 0.025)
		InstantButton.Size = UDim2.new(0, 20, 0, workspace.CurrentCamera.ViewportSize.Y * 0.025)
	end)

	ImportImageButton.Position = UDim2.new(1, 0, 0, -20)
	ImportImageButton.Activated:Connect(function()
		PNGImporter_Show = not PNGImporter_Show
		PNGImporterGui.Enabled = PNGImporter_Show
		refreshfiles()
	end)

	--// PNG FILE HANDLER \\--
	local l__GetPngFile__2 = {
		InvokeServer = function(link)
			local returning
			local success, err = pcall(function()
				if string.sub(link, 1, 8) == "file:///" then
					returning = readfile(string.sub(link, 9, string.len(link)))
				else
					returning = httpget(link)
				end
			end)
			if success then
				return true, returning
			end
			if err then
				return false, err
			end
		end,
	}

	local function u3(p1)
		local v3 = "[Error] " .. tostring(p1)
		l__InputUrl__1.Text = v3
		l__InputUrl__1.TextColor3 = Color3.new(1, 0, 0)
		delay(2, function()
			if l__InputUrl__1.Text == v3 then
				l__InputUrl__1.Text = ""
			end
		end)
	end

	--// LOAD PNG MODULE \\--
	for _, v in pairs(game:GetObjects("rbxassetid://11306417113")[1]:GetChildren()) do
		v:Clone().Parent = CorePackagesFolder
	end

	local u4 = loadstring("local script = getgenv().pngmodule\n" .. game:GetObjects("rbxassetid://11306417113")[1].Source)()

	--// INPUT HANDLERS \\--
	l__InputUrl__1.Focused:Connect(function()
		l__InputUrl__1.TextColor3 = Color3.new(1, 1, 1)
	end)

	l__InputUrl__1.FocusLost:Connect(function(enter)
		if enter then
			local link = l__InputUrl__1.Text
			l__InputUrl__1.Text = "Loading..."

			local v5, v4 = l__GetPngFile__2.InvokeServer(link)
			if not v5 then
				u3(v4)
				return
			end

			local v6, v7 = pcall(function()
				return u4.new(v4)
			end)
			if not v6 then
				u3(v7)
				return
			end

			local l__Width__9 = v7.Width
			local l__Height__10 = v7.Height

			l__InputUrl__1.Text = string.format("Optimizing %dx%d image...", l__Width__9, l__Height__10)

			local pixels, newWidth, newHeight = optimizePixels(v7, l__Width__9, l__Height__10)
			local totalPixels = #pixels

			if totalPixels == 0 then
				u3("No visible pixels found!")
				return
			end

			local at = LocalPlayer.Character.Head.Position
			local offset = Vector3.new(-newWidth / 2, 0, -newHeight / 2)

			local function startBuild()
				l__InputUrl__1.Text = string.format("Building %d parts...", totalPixels)

				local progress = createProgressBar()
				local startTime = tick()

				local success, processed, model

				if SETTINGS.INSTANT_MODE then
					success, processed, model = instantBuild(pixels, ServerEndpoint, at, offset, progress)
				else
					success, processed, model = normalBuild(pixels, ServerEndpoint, at, offset, progress)
				end

				task.wait(1)
				progress.destroy()

				if success and not l__InputUrl__1:IsFocused() then
					local elapsed = tick() - startTime
					local mode = SETTINGS.INSTANT_MODE and "💀 INSTANT" or "⚡ Normal"
					l__InputUrl__1.Text = string.format("%s Done! %d parts in %.1fs", mode, processed, elapsed)
					l__InputUrl__1.TextColor3 = Color3.new(0, 1, 0)
					wait(3)
					if not l__InputUrl__1:IsFocused() then
						l__InputUrl__1.Text = ""
					end
				end
			end

			-- Show warning for instant mode
			if SETTINGS.INSTANT_MODE then
				showInstantWarning(function(confirmed)
					if confirmed then
						startBuild()
					else
						l__InputUrl__1.Text = "Cancelled."
						l__InputUrl__1.TextColor3 = Color3.fromRGB(255, 200, 0)
						delay(1, function()
							if not l__InputUrl__1:IsFocused() then
								l__InputUrl__1.Text = ""
							end
						end)
					end
				end)
			else
				startBuild()
			end
		end
	end)
else
	local msg = Instance.new("Hint")
	msg.Parent = game:GetService("CoreGui")
	msg.Text = "Your executor doesn't support this script. Need: " ..
		(not (getcustomasset or getsynasset) and "getcustomasset/getsynasset " or "") ..
		(not writefile and "writefile " or "") ..
		(not listfiles and "listfiles " or "") ..
		(not readfile and "readfile " or "") ..
		(not isfile and "isfile " or "") ..
		(not isfolder and "isfolder " or "") ..
		(not getgenv and "getgenv " or "") ..
		(not loadstring and "loadstring " or "")
	game:GetService("Debris"):AddItem(msg, 5)
end

Features & Information

Credits: Scriptifier: The Original And Non-working Script in 2026 Claude/AI: Remaked The Script Without Suspicious All the time Features: Instant Mode PNG Loader Settings Anything Else I Forgot... Required: Level 8 Executor. (Recommend Velocity, Delta, and anything on level 8 executor) Building Tools F3X. Description: This Original Script was made in 4 YEARS AGO... oh my god, it needs synapse x but it got not working anymore, since it's 2022/2024 not working, i've deciced to remake the script in 2026, you can now use png loader such you need building tools and level 8 executor, after that, you go get some popular for png loading, and I glad to you it worked, the first you got png inside of roblox... ...No Uploading Image Roblox.. Thats it... Power Unlocked!
#png#loader#image#BuildingTools#instant

Community Comments (3)

MagnifyMagnifyFeb 25, 2026

Made with ai.

Replying to @Magnify
JustAMaleJustAMaleFeb 25, 2026

@x9dzz Disrespectful... Look in Credits wdym

EpicGuyYTEpicGuyYTMay 11, 2026

hi Paramity,what prompts u use to make those

More Scripts for Universal Scripts