Docs do Nodaro
DocumentaçãoReferência de nósModelosAgentes de IA (MCP)DesenvolvedoresSelf-hostingPesquisa

Edições e perfis de superfície

Compare as edições Community, Business e Cloud, mude um Nodaro self-hosted para a Business e restrinja a interface dele com um NODARO_SURFACE_PROFILE.

O Nodaro tem três edições — Community, Business e Cloud —, feitas a partir do mesmo código e escolhidas com a variável EDITION. Na Business edition, um perfil de superfície restringe, então, o que a instalação mostra, sem recompilar. Ele pode ocultar partes da interface, remover nós e modelos, renomear o produto e restringir o login. Esta página trata dos dois.

As três edições

CommunityBusinessCloud
Pode ser self-hostedSimSimNão, gerenciada pelo Nodaro
Painel de administraçãoNãoSimSim
Gerenciamento de usuáriosNãoSimSim
Registro de créditosNãoNãoSim
CobrançaNãoNãoSim
Preços de crédito definidos por administradoresNãoNãoSim
Perfil de superfícieIgnoradoSimSim
  • Community (EDITION=community, o padrão) é a edição self-hosted gratuita. Qualquer pessoa que cria uma conta se torna um usuário comum.
  • Business (EDITION=business) acrescenta o painel de administração e o gerenciamento de usuários. Ela continua self-hosted e continua sem cobrança.
  • Cloud (EDITION=cloud) acrescenta créditos e cobrança. Ela é a base do app.nodaro.ai e não é feita para self-hosting.

O painel de administração e o gerenciamento de usuários da Business edition são recursos Enterprise. Você pode rodá-los para desenvolvimento e testes, mas usá-los em produção exige uma assinatura do Nodaro Enterprise. Veja Licença.

Mudar uma instalação self-hosted para a Business

A API lê EDITION na inicialização. O editor no navegador lê a edição dele de VITE_EDITION quando a imagem é compilada. A imagem publicada é compilada como Community Edition, então uma instalação Business é compilada a partir do código-fonte.

Passar da Community para a Business não tem custo no banco de dados: o esquema é o mesmo.

Mudar os dois valores no arquivo do Compose

No docker-compose.community.yml, no serviço nodaro, mude as duas linhas que dizem community:

  nodaro:
    build:
      args:
        VITE_EDITION: business      # was: community
    environment:
      EDITION: business             # was: community

As duas linhas são fixas no arquivo do Compose, então definir EDITION no .env não tem efeito.

Compilar e iniciar

docker compose -f docker-compose.community.yml build --no-cache nodaro
docker compose -f docker-compose.community.yml up -d

Atualize uma instalação compilada a partir do código-fonte com git pull e build. O docker compose pull baixaria de novo a imagem Community publicada.

A build recusa um VITE_EDITION vazio ou desconhecido. Sem essa verificação, um valor não definido compilaria sem erros e voltaria a community, e uma imagem Business sairia sem o painel de administração. O arquivo do Compose passa o valor para você. Um docker build escrito à mão precisa de --build-arg VITE_EDITION=community, business ou cloud.

O que é fixado na build e o que não é

Três configurações do navegador não são fixadas na build: o endereço da API, o endereço de login do navegador e a chave anon. Na inicialização, o contêiner as grava em /config.js a partir de PUBLIC_URL, FRONTEND_SUPABASE_URL e SUPABASE_ANON_KEY, e o navegador lê esse arquivo antes de o app iniciar. Assim, a imagem publicada serve qualquer porta ou domínio depois de uma reinicialização. Os argumentos de build VITE_* são só alternativas para valores de tempo de execução não definidos.

Outras configurações do navegador fixadas na build:

Argumento de buildO que fazPadrão
VITE_STUDIO_URLO endereço do app Studio, para os links Abrir no Studiohttps://studio.nodaro.ai
VITE_PERSON_URLO endereço do app Person, para o cartão Abrir Person da tela inicialhttps://person.nodaro.ai

Perfis de superfície

NODARO_SURFACE_PROFILE restringe a interface de uma instalação Business ou Cloud sem recompilar. A Community Edition ignora essa variável e sempre mostra a interface completa.

  • Formato. JSON inline, ou @/path/to/profile.json para ler um arquivo. Para usar um arquivo na stack do Compose, monte-o no contêiner e informe o caminho dele dentro do contêiner.
  • Só restringe. Um perfil pode ocultar e remover. Ele nunca ativa algo que a edição desativa.
  • Todos os campos são opcionais. Uma lista vazia significa “manter o padrão”. Sem a variável, a instalação mostra a interface completa.
  • Erros. Um campo malformado volta ao padrão desse campo, com um aviso no log. Um perfil que não carrega de jeito nenhum impede a inicialização de uma instalação Business ou Cloud, com [surface-profile] FATAL … Refusing to boot a narrowing deployment mainline-open. Isso acontece com um arquivo ilegível, um JSON inválido ou um valor que falha na validação como um todo. Uma instalação com restrições nunca deve subir mostrando tudo.
  • Aplicar. Reinicie o app. O perfil chega ao navegador pelo /config.js.

Exemplo

NODARO_SURFACE_PROFILE={"nav":{"hide":["gallery"]},"brand":{"productName":"Studio"},"outputs":{"allowPublic":false},"voice":{"allowedGenders":["male"]}}

Isso oculta a galeria, renomeia o produto para Studio, mantém todas as saídas privadas e oferece só vozes masculinas.

Campos

CampoO que faz
nav.hideOculta itens da barra lateral. Valores: gallery, explore, pricing, templates, apps, community, integrations.
dashboard.tabsUma única lista de permissões ordenada das seções da tela inicial. Veja Seções da tela inicial.
nodes.deny, models.denyTipos de nó e IDs de modelo a remover em todos os lugares: no menu Adicionar nó, em GET /v1/nodes, em GET /v1/models, nas ferramentas MCP e na hora da execução. Um nó removido falha com node_not_available.
nodes.allow, models.allowListas de permissões. Quando uma lista não está vazia, só os tipos de nó ou os IDs de modelo listados são oferecidos, e deny ainda retira itens deles. Veja Listas de permissões.
auth.methods, auth.ssoLabelOs métodos de login a oferecer: email, google, sso. sso é descartado, a menos que auth.ssoLabel esteja definido. Veja Métodos de login.
siblings.appsSubstitui os links do Nodaro no seletor de produtos: [{ "label": "...", "url": "..." }].
brand.productNameSubstitui o logotipo tipográfico e o título da página. Sem ele, o título da página fica como veio.
brand.wordmarkTexto curto mostrado ao lado do seu próprio logo no cabeçalho da barra lateral, para uma instalação que tem os próprios arquivos de logo. Por exemplo, o nome de produto Acme Studio com o logotipo tipográfico Studio.
brand.descriptionSubstitui a meta description da página.
brand.platformLinksfalse oculta os links da própria plataforma para avisos legais, documentação, notas de versão e promoção de produtos. Os links que você define em siblings.apps continuam.
locale.defaultO idioma em que um novo visitante começa.
locale.pickerfalse oculta o seletor de idioma. O padrão é true.
outputs.allowPublicfalse torna todas as saídas privadas, seja qual for a escolha do usuário.
voice.allowedGendersRestringe as vozes a qualquer subconjunto de male, female e neutral. Vazio significa todos os gêneros. Veja Gêneros de voz.
features.hideDesativa recursos inteiros: copilot remove o Workflow Copilot, e presentation oculta a aba Apresentar do canvas.
catalogs{ "required": true, "factoryPresets": false } para instalações que precisam de conteúdo revisado nos seletores. Veja Catálogos de seletores.

Os logos e o favicon não fazem parte do perfil. Substitua-os por uma camada de arquivos estáticos na sua imagem Docker.

Seções da tela inicial

dashboard.tabs é uma única lista de permissões ordenada. O conjunto completo de chaves é workflows, projects, apps, miniapps, templates, tutorials, statistics, gallery, studio e mcp.

  • workflows, projects, studio — as listas do filtro de espaço de trabalho da aba Continuar, na ordem da sua lista. Se a sua lista não citar nenhuma das três, as três aparecem, para que a lista principal nunca fique vazia.
  • apps — a faixa de apps do Nodaro na aba Continuar.
  • templates — a linha “Comece com um template” da aba Explorar e o item Templates da barra lateral.
  • tutorials — os tutoriais da seção Suba de nível na aba Explorar e o item Tutoriais da barra lateral. Sem templates e tutorials, a aba Explorar não aparece.
  • miniapps — o item Miniapps da barra lateral.
  • statistics — o resumo de estatísticas da página Execuções.
  • mcp — a quarta lista de “Continue de onde parou”: os workflows que um cliente MCP criou no projeto automático mcp dele.

Liste todas as seções que você quer manter. Por exemplo, ["workflows","projects","statistics","tutorials"] mantém as listas de workflows e de projetos, os tutoriais e as estatísticas. Essa lista remove a lista do Studio, a faixa de apps, a linha de templates e os itens Templates e Miniapps da barra lateral. nav.hide continua valendo por cima disso.

Listas de permissões

Uma lista de permissões é o formato mais seguro para uma instalação com curadoria. Um nó ou um modelo novo fica, então, indisponível até você listá-lo, em vez de aparecer porque você não o bloqueou.

  • Os nós utilitários, como sticky-note e preview, nunca são removidos por ficarem de fora de uma lista de permissões. Só um deny explícito os remove.
  • Os administradores podem alterar a disponibilidade de nós e modelos em tempo de execução, no painel de administração. Uma configuração de tempo de execução salva substitui as listas do perfil até ser redefinida para o estado de fábrica.
  • Um nó que um administrador desativa no painel de administração continua utilizável pelos administradores. Um nó removido pelo perfil também é removido para os administradores. Mas um administrador que reativa no painel de administração um nó removido pelo perfil o libera para todos, então dê a função de administrador só a pessoas em quem você confia para isso.
  • Um modelo desativado também fica desativado para os administradores.
  • Uma execução é verificada como o usuário em nome de quem ela roda. Uma execução de app ou de apresentação roda como a pessoa que a executa. Uma execução agendada ou disparada por webhook roda como o proprietário do workflow, e um token de API ou um app conectado age como o proprietário dele. Quando esse proprietário é um administrador, a execução pode usar um nó oculto para os usuários, então trate com cuidado a URL de webhook de um workflow assim.
  • Um app, um componente ou um template que contém um nó oculto não pode ser publicado: a requisição falha com node_not_available.
  • Uma mudança de função chega a essas verificações em cerca de 5 minutos.

Métodos de login

auth.methods restringe os métodos de login da página de login, entre email, google e sso. Mantenha sso na lista só junto com auth.ssoLabel, o texto do botão de SSO.

Uma lista que cita só sso também ativa uma regra no servidor: toda conta logada precisa ter sido criada ou vinculada por login único (SSO). Qualquer outra sessão é recusada na primeira chamada à API com 403 sso_required, então uma conta registrada diretamente no serviço de login não pode usar a instalação. Adicionar email à lista desativa a regra. Veja Login único (SSO).

Gêneros de voz

voice.allowedGenders é aplicado no servidor:

  • A lista de vozes e a biblioteca compartilhada de vozes mostram só vozes dos gêneros permitidos.
  • Uma requisição com uma voz nativa de outro gênero é recusada com voice_not_available.
  • Toda voz padrão e toda voz alternativa passam a ser a primeira voz de um gênero permitido.
  • O editor oculta as tags de gênero vocal dos outros gêneros nos nós do Suno.

O gênero da saída dos nós de criação de voz não pode ser conhecido com antecedência. Para removê-los, adicione "nodes":{"deny":["voice-design","voice-remix"]}.

Catálogos de seletores

Para instalações que só podem oferecer conteúdo revisado nos seletores, defina "catalogs":{"required":true,"factoryPresets":false}.

  • Com required: true, o editor só oferece opções nos seletores depois de receber do servidor o catálogo completo com curadoria, e não oferece nenhuma se essa requisição falhar. Os nós novos e as redefinições de fábrica usam só valores oferecidos.
  • Com factoryPresets: false, as predefinições incluídas ficam ocultas no editor e na API. As predefinições dos próprios usuários continuam.
  • O servidor também rejeita opções excluídas do catálogo em workflows importados ou salvos anteriormente.

Perguntas frequentes

Última atualização

Nesta página