This consists of two parts, a local script in the frame where the text box resides, and a script in ServerScriptService

local textbox = script.Parent.FaceId 
local textButton = script.Parent.Sender2 
local event = game.ReplicatedStorage.Events:WaitForChild("FaceEvent")

textButton.MouseButton1Click:Connect(function()
	event:FireServer(textbox.Text)
end)

Here's the server script

local event = game.ReplicatedStorage.FaceEvent
local insertService = game:GetService("InsertService")

event.OnServerEvent:Connect(function(player, id)
	local model = insertService:LoadAsset(id)
	model.Parent = workspace
	local asset = model:GetChildren()
	if asset:IsA("Texture") then
		if player.Character.Head.face.Texture:FindFirstChildWhichIsA("Texture") then
			player.Character.Head.face.Texture:FindFirstChildWhichIsA("Texture"):Destroy()
		end
		asset.Parent = player.Character
	end
end)

For anybody wondering, the code is more or less copied from the same script I used to insert hats onto a character, hence the weird names