Como trazer de volta o tema escuro do Studio
O Dark do Studio clareou e o editor de script virou um cinza lavado que cansa a vista. Dá pra reescrever a paleta inteira do editor por script, em um clique, e guardar backup das cores antigas antes.
Rascunho assistido por IA, revisado, testado e editado por um humano antes de publicar. Ver Política Editorial. · Revisado por Gustavo Cantino, 04/09/2026 Política Editorial
O "darker theme" que você quer de volta não é um botão só — são três coisas que o Studio separou ao longo do tempo. A primeira é o tema geral, Dark contra Light, que mora em File > Studio Settings. A segunda é a atualização de interface que clareou o cinza do próprio Dark: se a sua build ainda tiver o toggle em Beta Features, dá pra desligar; se não tiver, acabou. E a terceira — a que quase todo mundo está sentindo falta sem saber nomear — é a paleta do editor de script, aquele fundo quase preto com comentário verde-escuro que virou um cinza claro sem contraste.
A boa notícia: a terceira é 100% recuperável, cor por cor, e é a que você olha por horas seguidas. E ela é editável por script, o que significa que você não precisa clicar em 27 color pickers na mão.
O tema escuro clareou e você quer o antigo de volta
Abra File > Studio Settings (atalho Alt+S) e vá em Studio. Role até a parte de cores do editor de script. Você vai contar mais de 25 propriedades: Background Color, Text Color, Comment Color, String Color, Number Color, Keyword Color, Operator Color, Error Color, Warning Color, Todo Color, Whitespace Color, e por aí vai. Cada uma abre um color picker onde você digita três campos RGB. Consertar isso na mão é digitar perto de 80 números em sequência, num painel que rola, sem barra de busca decente. Dá de 10 a 15 minutos se você já souber os valores — e você não sabe, porque o Studio não te mostra qual era o valor antigo.
Pior: essas configurações não têm Ctrl+Z. Trocar uma cor no Studio Settings não entra na pilha de undo do lugar. Se você errar o Background Color e sair, o valor anterior sumiu.
E tem o terceiro problema, o que morde depois: Studio Settings é por máquina, não por conta. Formatou o PC, reinstalou o Studio, entrou num notebook novo pra viajar — paleta zerada de novo. Team Create também não compartilha nada disso: seu parceiro continua no cinza claro enquanto você já arrumou o seu.
Então o objetivo aqui não é "trocar umas cores". É transformar sua paleta em um arquivo que você aplica em qualquer máquina em dois cliques, e que você consegue desfazer.
Os três lugares onde o "darker" foi parar
1. O tema geral. File > Studio Settings > Studio > Theme. Se estiver em Light, mude pra Dark e pronto — 80% das pessoas que perguntam isso pararam no Light sem perceber, geralmente depois de reinstalar. Se já está em Dark e ainda parece claro, o problema é o item 2 ou o 3.
Dá pra fazer isso por script também, mas tem uma pegadinha. Este é o jeito errado:
settings().Studio.Theme = "Dark"
-- Unable to assign property Theme. StudioTheme expected, got stringTheme não aceita texto, aceita um objeto StudioTheme. O jeito certo é pegar da lista que o próprio Studio expõe:
local studio = settings().Studio
for _, theme in studio:GetAvailableThemes() do
if theme.Name == "Dark" then
studio.Theme = theme
end
end2. A atualização de interface. Quando o Studio renovou a UI, o cinza de fundo das janelas subiu de tom. Isso não é uma cor que você edita: é a skin da aplicação. Enquanto o recurso está em beta, ele aparece em File > Beta Features com um checkbox — desmarcar, reiniciar o Studio e voltar ao visual antigo funciona. Quando o recurso sai do beta, o toggle some da lista e não existe rollback. Vale abrir Beta Features e conferir; se não tiver nada de UI lá, pule pro item 3 e não perca tempo procurando plugin "que deixa o Studio preto" — plugin não repinta a moldura do Studio, só as janelas que o próprio plugin cria.
3. A paleta do editor de script. Aqui você manda em tudo. Cada uma daquelas propriedades é acessível por código, com o nome exato que aparece no painel, incluindo os espaços. Teste com uma linha só na Command Bar:
settings().Studio["Background Color"] = Color3.fromRGB(20, 20, 20)Abra qualquer script: o fundo escureceu na hora. Feche e abra o Studio: continua escuro. Isso persiste porque é configuração de usuário, não do lugar — não tem nada a ver com o jogo aberto, você não precisa publicar nada e não vai commitar isso pro Team Create.
A partir daí é só repetir a linha pra cada cor. Só que repetir 27 vezes na Command Bar, colando e corrigindo, é exatamente o trabalho manual que a gente quer evitar. É pra isso que serve o artefato abaixo.
Bônus que quase ninguém liga: se você escreve plugins com interface própria, o tema também é lido por código. Em vez de chutar um cinza fixo que fica horrível pra quem usa Light, pergunte pro tema:
local theme = settings().Studio.Theme
frame.BackgroundColor3 = theme:GetColor(Enum.StudioStyleGuideColor.MainBackground)O plugin que reescreve a paleta inteira em um clique
O artefato é um plugin local com dois botões: Backup e Aplicar.
Pra instalar: crie um Script novo em qualquer lugar do Explorer (ServerStorage serve), cole o código, clique com o botão direito no Script e escolha "Save as Local Plugin". Salve como DarkerTheme e reinicie o Studio. Vai aparecer uma toolbar chamada "Darker Theme" na aba Plugins.
Clique em Backup primeiro. Ele lê o valor atual de cada uma das cores e imprime no Output já formatado como tabela Luau — é só copiar o bloco do Output e colar num arquivo de texto seu. Esse é o seu botão de desfazer, porque o Studio não tem um.
Depois clique em Aplicar. Ele percorre a paleta e escreve propriedade por propriedade dentro de um pcall. O pcall existe porque a lista de cores muda entre versões do Studio: se a sua build não tiver "Luau Keyword Color", por exemplo, a escrita falha só naquela linha e o resto passa. No fim ele imprime quantas foram aplicadas e quantas foram puladas, com o nome das puladas. Se aparecer "27 aplicadas, 0 puladas", você acertou a build inteira.
Os valores RGB que estão lá são uma reconstrução do escuro antigo, não um dump oficial da Roblox. Trate como ponto de partida: abra a tabela PALETTE, troque os números que te incomodarem, salve o plugin de novo e clique em Aplicar. O ciclo inteiro leva uns 5 segundos, então dá pra ir afinando cor por cor com o script aberto do lado.
O erro caro: aplicar a paleta sem salvar a antiga
O erro que dói é clicar em Aplicar antes de clicar em Backup. Não tem Ctrl+Z pra Studio Settings, não tem botão de "restaurar padrões" que devolva a sua customização antiga, e a lista não guarda histórico. Se você já tinha uma paleta ajustada há dois anos e sobrescreveu, ela foi. Rode Backup, copie o Output pra um arquivo, guarde esse arquivo no mesmo repositório do jogo. É um .txt de 30 linhas que vale mais que o plugin.
O segundo erro é escurecer demais. Fundo em RGB 0,0,0 com comentário verde-escuro parece bonito num print e destrói sua vista em duas horas. A referência pública é a WCAG: contraste mínimo de 4.5:1 entre texto e fundo pra texto normal, 7:1 se você quer conforto de leitura longa. Comentário e string são os dois que costumam cair abaixo disso quando as pessoas escurecem o fundo sem clarear o texto na mesma proporção. Jogue seu Background Color e seu Comment Color num verificador de contraste antes de fixar a paleta.
Terceiro: não confunda Studio Settings com Game Settings. Nada disso aqui entra no seu jogo, não afeta jogador nenhum, não sobe no publish. Se você foi em Game Settings procurando tema, está no painel errado.
Quarto, pra quem vai atrás do arquivo bruto: as configurações costumam viver em um GlobalSettings_13.xml dentro de %LOCALAPPDATA%\Roblox. Editar esse XML com o Studio aberto é jogar dinheiro fora — o Studio reescreve o arquivo ao fechar e apaga o que você digitou. Se for mexer lá, feche o Studio antes. Mas o plugin faz o mesmo trabalho sem risco de corromper o arquivo.
O que medir depois
Teste a paleta num script real, não num vazio: abra um módulo seu de 300 linhas, com comentário, string longa, número, chamada de método e um erro de sintaxe proposital. É onde você descobre que o Error Color sumiu no fundo novo ou que o Todo Color ficou igual ao Comment Color.
Depois, meça duas coisas concretas. Uma: o contraste de Text Color contra Background Color, mirando 7:1. Duas: quantas propriedades o Backup conseguiu ler na sua build — se o Output listar menos itens do que a PALETTE tem, o Studio renomeou algo e a sua paleta está incompleta sem você perceber.
Por último, faça a paleta viajar. O arquivo do plugin local é um .rbxmx numa pasta Plugins da sua máquina; copie ele pro repositório do time e todo mundo aplica o mesmo esquema em dois cliques, inclusive você no PC novo. É a diferença entre "arrumei meu Studio" e "o time inteiro lê código do mesmo jeito".
E se você mantém plugins com interface própria, o próximo passo natural é conectar em ThemeChanged, pra sua janela repintar sozinha quando alguém alternar Dark e Light:
settings().Studio.ThemeChanged:Connect(function()
-- repinte aqui os Frames e TextLabels do seu widget
end)Artefato pronto pra usar
--!strict
-- Darker Theme — plugin local do Studio.
-- INSTALACAO: crie um Script no Explorer (ServerStorage serve), cole isto,
-- clique com o botao direito no Script > "Save as Local Plugin", nome DarkerTheme.
-- Reinicie o Studio e use a toolbar "Darker Theme" na aba Plugins.
local studio = settings().Studio
-- As cores do editor tem nome com espaco ("Background Color").
-- O checker do --!strict nao conhece esses campos, entao indexamos por um alias solto.
local studioAny = studio :: any
type Palette = { [string]: Color3 }
-- Reconstrucao do escuro antigo. NAO e um dump oficial: troque os RGB ao seu gosto,
-- salve o plugin de novo e clique em Aplicar (o ciclo leva ~5 segundos).
local PALETTE: Palette = {
["Background Color"] = Color3.fromRGB(20, 20, 20),
["Current Line Highlight Color"] = Color3.fromRGB(30, 30, 30),
["Selection Background Color"] = Color3.fromRGB(38, 79, 120),
["Selection Color"] = Color3.fromRGB(255, 255, 255),
["Matching Word Background Color"] = Color3.fromRGB(45, 60, 45),
["Text Color"] = Color3.fromRGB(215, 215, 215),
["Comment Color"] = Color3.fromRGB(105, 150, 105),
["String Color"] = Color3.fromRGB(200, 150, 100),
["Number Color"] = Color3.fromRGB(255, 198, 0),
["Keyword Color"] = Color3.fromRGB(240, 120, 145),
["Luau Keyword Color"] = Color3.fromRGB(240, 120, 145),
["Operator Color"] = Color3.fromRGB(215, 215, 215),
["Bool Color"] = Color3.fromRGB(240, 120, 145),
["Nil Color"] = Color3.fromRGB(240, 120, 145),
["Function Color"] = Color3.fromRGB(120, 190, 255),
["Function Name Color"] = Color3.fromRGB(120, 190, 255),
["Built-in Function Color"] = Color3.fromRGB(130, 205, 255),
["Method Color"] = Color3.fromRGB(130, 205, 255),
["Property Color"] = Color3.fromRGB(215, 215, 215),
["Local Color"] = Color3.fromRGB(160, 200, 255),
["Self Color"] = Color3.fromRGB(240, 120, 145),
["Warning Color"] = Color3.fromRGB(255, 180, 60),
["Error Color"] = Color3.fromRGB(255, 90, 90),
["Todo Color"] = Color3.fromRGB(120, 200, 200),
["Whitespace Color"] = Color3.fromRGB(60, 60, 60),
["Ruler Color"] = Color3.fromRGB(60, 60, 60),
["Debugger Current Line Color"] = Color3.fromRGB(70, 70, 30),
["Debugger Error Line Color"] = Color3.fromRGB(90, 30, 30),
}
-- Theme NAO aceita string: aceita um objeto StudioTheme vindo de GetAvailableThemes().
local function setDarkTheme(): boolean
for _, theme in studio:GetAvailableThemes() do
if theme.Name == "Dark" then
studio.Theme = theme
return true
end
end
return false
end
local function toRgbLine(name: string, color: Color3): string
return string.format(
'\t["%s"] = Color3.fromRGB(%d, %d, %d),',
name,
math.round(color.R * 255),
math.round(color.G * 255),
math.round(color.B * 255)
)
end
-- BACKUP: imprime a paleta ATUAL no Output ja como tabela Luau.
-- Rode ISTO antes de aplicar. Studio Settings nao tem Ctrl+Z.
local function backup(): ()
print("-- [Darker Theme] backup da paleta atual — copie o bloco abaixo para um arquivo")
print("local PALETTE = {")
local lidas = 0
for name in PALETTE do
local ok, value = pcall(function()
return studioAny[name]
end)
if ok and typeof(value) == "Color3" then
print(toRgbLine(name, value))
lidas += 1
end
end
print("}")
print(string.format("-- [Darker Theme] %d de %d propriedades existem nesta build", lidas, #PALETTE :: any or lidas))
end
-- APLICAR: escreve cada cor dentro de pcall. Nome que nao existe nesta build
-- falha sozinho e o resto passa.
local function apply(): ()
local aplicadas, puladas = 0, 0
for name, color in PALETTE do
local ok = pcall(function()
studioAny[name] = color
end)
if ok then
aplicadas += 1
else
puladas += 1
warn(string.format("[Darker Theme] pulada: %s (nao existe nesta versao do Studio)", name))
end
end
if not setDarkTheme() then
warn("[Darker Theme] tema Dark nao encontrado em GetAvailableThemes()")
end
print(string.format("[Darker Theme] %d aplicadas, %d puladas", aplicadas, puladas))
end
local toolbar = plugin:CreateToolbar("Darker Theme")
local backupButton = toolbar:CreateButton(
"DarkerThemeBackup",
"Imprime a paleta atual no Output. Rode ANTES de aplicar.",
"rbxasset://textures/ui/GuiImagePlaceholder.png",
"Backup"
)
local applyButton = toolbar:CreateButton(
"DarkerThemeApply",
"Escreve a paleta escura no editor de script.",
"rbxasset://textures/ui/GuiImagePlaceholder.png",
"Aplicar"
)
backupButton.ClickableWhenViewportHidden = true
applyButton.ClickableWhenViewportHidden = true
backupButton.Click:Connect(function()
backup()
backupButton:SetActive(false)
end)
applyButton.Click:Connect(function()
apply()
applyButton:SetActive(false)
end)