Você está certo; pensei que funcionava do meu lado, mas acho que não. ![]()
Aqui uma alternativa: definir uma propriedade CSS personalizada via js.
document.documentElement.style.setProperty(
"--hat-url",
`url(${settings.theme_uploads[settings.hat_type]}`
);
body {
background: var(--hat-url);
}
settings.theme_uploads conterá uma lista de seus uploads.
Por exemplo:

Em seguida, com base na sua configuração, você define a propriedade personalizada.
Note que, pelos meus testes, não funciona fazer url(var(--hat-url)), é por isso que passei o url() diretamente na propriedade personalizada.