> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/publicacao/publishing.md).

# Publicação

Como publicar meu projeto?

## Antes de começar

Certifique-se do seguinte:

* A sua scene cumpre todas as [limitações da scene](/creator/content-creator-pt/scenes-sdk7/otimizacao/scene-limitations.md). A maioria delas é validada sempre que você executa um preview da sua scene.
* Se quiser que a sua scene funcione bem para players mobile, faça preview e teste-a primeiro num dispositivo real — veja [Building for Mobile](/creator/content-creator-pt/criar-para-dispositivos-moveis/mobile-client/overview.md) e [Preview on mobile](/creator/content-creator-pt/criar-para-dispositivos-moveis/desenvolver/preview-on-mobile.md). Depois de publicada, a sua scene fica acessível no app mobile do Decentraland da mesma forma que no desktop.
* Você tem uma conta [Metamask](https://metamask.io/) com os seus parcels de LAND atribuídos a ela.
* Você possui a quantidade necessária de parcels de LAND adjacentes ou um Decentraland NAME. Caso contrário, você pode comprar LAND no [Mercado](https://market.decentraland.org) ou um NAME no [Marketplace](https://decentraland.org/shop/items?category=names).

{% hint style="warning" %}
\*\*📔 Nota\*\*: Scenes com vários parcels só podem ser implantadas em parcels adjacentes.
{% endhint %}

{% hint style="danger" %}
**❗Aviso**: Ao planejar eventos ao vivo, não faça alterações de última hora na scene imediatamente antes do evento. Publique sua versão final pelo menos uma hora antes de o evento começar.

Após cada publicação, um processo interno otimiza todos os modelos 3D antes que eles possam ser renderizados. Isso normalmente leva apenas alguns segundos, mas pode demorar mais em scenes muito grandes ou quando os servidores estão ocupados. Até terminar, os players recebem a versão anterior da sua scene.
{% endhint %}

## Verificar dados da scene

Ao fazer deploy, a CLI lê as informações do *scene.json* arquivo para determinar onde fazer deploy da sua scene.

Abra o *scene.json* arquivo da sua scene e complete os seguintes dados:

* **title**: O título é exibido na UI abaixo do mini-mapa, sempre que os players entram na sua scene. Ele também aparece no popup de teleporte.
* **description**: Uma descrição do que os players encontrarão na sua scene. Isso é exibido no popup de teleporte.
* **navmapThumbnail**: Uma imagem que representa a sua scene. Isso é exibido no popup de teleporte. A imagem deve ser um arquivo *.png* ou *.jpg* com proporção 16:9, com tamanho recomendado de *1920x1080* pixels. Mantenha qualquer coisa essencial dentro do quadrado central *1080x1080* , pois algumas partes da plataforma exibem um recorte quadrado dele. Veja [thumbnail da scene](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#scene-thumbnail).
* **Parcels**: As coordenadas dos parcels que serão ocupados pela sua scene
* **Base**: As coordenadas do parcel que será considerado a coordenada \[0,0] da scene. Se a sua scene tiver vários parcels, ele deve ser o parcel inferior esquerdo (sudoeste).
* **spawnPoints**: Um conjunto de coordenadas dentro da scene (relativas ao parcel base da scene) onde os players aparecem. Por padrão, os players aparecem na *0,0,0* localização da scene (canto inferior esquerdo). Use isso para iniciar os players em um local específico, ou definir uma região para evitar que os players se sobreponham quando aparecerem pela primeira vez.
* **tags**: Um conjunto de tags que descrevem a sua scene. Elas ajudam os players a explorar o Decentraland, facilitando encontrar conteúdo de que eles gostam. [Veja a lista de categorias disponíveis](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#categories).
* **rating**: Isso é usado para classificar o conteúdo da sua scene. O Decentraland é uma plataforma 18+, então o valor a definir é `A` para Adults. Veja [Age Rating](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#age-rating).

{% hint style="warning" %}
**📔 Nota**: Veja [scene metadata](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md) para mais detalhes sobre como definir esses parâmetros.
{% endhint %}

## Para publicar a scene

### Usando o Scene Editor no Creator Hub

O Scene Editor no Creator Hub oferece uma forma fácil de publicar as suas scenes. Certifique-se de ter [instalado o Creator Hub](/creator/content-creator-pt/scene-editor/comece/editor-installation.md).

1. Abra o projeto da sua scene.
2. Clique no **Publish** botão no canto superior direito.
3. Um prompt perguntará se você quer publicar em um **WORLD** ou em **LAND**.
   * Selecione **PUBLISH TO WORLD** para tornar a sua scene disponível em um dos seus [WORLDs](/creator/content-creator-pt/scenes-sdk7/publicacao/publishing-options.md#decentraland-worlds). Depois selecione para qual dos seus NAMEs ou ENS Domains publicar.
   * Selecione **PUBLISH TO LAND** se você possui LAND, ou recebeu permissões de deploy de um proprietário. Depois selecione os parcels onde você quer fazer o deploy dela no mapa. Os parcels onde você pode fazer deploy são mostrados em rosa.
   * Selecione **Servidores alternativos** para publicar em um [servidor personalizado](#custom-servers).

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a9b358ccf604ec11addf4852ce36c321e35745e0%2Fpublish-options.png?alt=media)

4. Isso abre uma nova aba no seu navegador, mostrando detalhes sobre o upload. Assine o deployment com a sua wallet. Isso é apenas uma assinatura para provar a propriedade; é grátis e não envolve nenhuma transação de blockchain.
   * Para LAND em uma conta do navegador Metamask, confirme o deployment. Depois assine a mensagem na extensão do Metamask no navegador.
   * Para LAND vinculado a uma wallet que você pode usar via Wallet Connect, clique em **Connect wallet**, depois escaneie o código QR com o seu dispositivo móvel e siga os passos no Wallet Connect.

### Via a CLI

1. Entre na sua conta Metamask com o mesmo endereço público associado aos seus parcels no Decentraland.
2. Execute `npm run deploy` a partir da pasta da scene.

{% hint style="info" %}
\*\*💡 Dica\*\*: Se houver arquivos na pasta do seu projeto que você não quer fazer deploy, liste-os no arquivo \_.dclignore\_ antes de fazer deploy.
{% endhint %}

3. Uma aba do navegador será aberta, mostrando para quais parcels você está fazendo deploy. Clique em **Sign and Deploy**.
4. O Metamask abre, informando que a sua assinatura foi solicitada. Clique em **Sign** para confirmar esta ação.

{% hint style="info" %}
**💡 Dica**: Se você estiver implementando um fluxo de integração contínua, em que as alterações na sua scene são implantadas automaticamente, então você pode definir a variável de ambiente `export DCL_PRIVATE_KEY` para a chave privada de uma conta que tenha permissões de deploy.
{% endhint %}

{% hint style="info" %}
**💡 Dica**: `npm run deploy` executa um `npm run build`, que verifica a scene em busca de erros de tipo de forma mais rigorosa do que ao executar `npm run start`. Se esses erros não puderem ser evitados (por exemplo: acontecem em uma biblioteca externa) e não afetarem a scene, você pode usar `npm run deploy -- --skip-build` para pular a `npm run build` etapa e fazer deploy da scene como ela está.
{% endhint %}

## Publicar em Worlds

Para publicar a sua scene em um Decentraland World, você precisa possuir um Decentraland NAME ou um domínio ENS. Veja [Opções de Publicação](/creator/content-creator-pt/scenes-sdk7/publicacao/publishing-options.md#decentraland-worlds) para informações sobre como obter um.

### Configurar scene.json

Você precisa especificar sob qual **nome** seu deployment será feito. Adicione a seguinte seção no seu `scene.json`:

```json
{
	"worldConfiguration": {
		"name": "my-name.dcl.eth"
	}
}
```

O **nome** especificado no `scene.json` pode ser tanto um Decentraland NAME quanto um domínio ENS. Ele deve pertencer à wallet que assina o deployment, ou a qualquer wallet que tenha recebido permissão via Access Control Lists (ACL).

Tenha em mente o seguinte:

* A wallet que assina o deployment deve ser dona do NAME especificado no `scene.json` arquivo
* A scene não tem limitações de parcels (desde janeiro de 2023)
* Todos os Worlds são listados automaticamente na página Places, a menos que você faça opt-out, como detalhado abaixo

### Metadados do World

Um World tem seu próprio nome, descrição e thumbnail, separados dos metadados das scenes publicadas nele. Quando você publica em um World vazio, ou em um World que contém uma única scene, os metadados do World são atualizados para corresponder aos metadados da scene a cada publicação. Se o World contiver mais de uma scene, seus metadados são independentes: publicar uma scene não os altera, e eles só podem ser editados na seção **Manage** do Creator Hub. Veja [metadados do World vs metadados da scene](/creator/content-creator-pt/scene-editor/publish/publish-scene.md#world-metadata-vs-scene-metadata).

### Orçamento de armazenamento dos Worlds

Scenes implantadas em Worlds contam para um orçamento de armazenamento que é compartilhado entre todos os Worlds pertencentes à sua wallet. O orçamento cresce com os seus holdings de Decentraland:

* Cada Decentraland NAME que você possui concede 100 MB.
* Cada parcel de LAND que você possui concede mais 100 MB.
* A cada 2.000 MANA mantidos na sua wallet, você recebe mais 100 MB.

Você pode distribuir esse orçamento entre os seus Worlds como quiser. Por exemplo, com um orçamento de 500 MB você poderia implantar uma scene de 300 MB e uma scene de 200 MB, ou cinco scenes de 100 MB. Worlds publicados em domínios ENS não usam esse orçamento; em vez disso, têm um limite fixo de 36 MB por World.

Você pode verificar quanto do seu orçamento foi usado e quanto resta em dois lugares:

* O **Manage** seção do Creator Hub. Clique em **View Details** para ver a distribuição de como os seus holdings de MANA, LAND e NAME somam.
* O **Worlds** aba do [Builder](https://decentraland.org/builder/worlds).

Se você ultrapassar o seu orçamento (por exemplo, após vender ou transferir assets), você terá 48 horas para liberar espaço ou aumentar o seu orçamento antes que os seus Worlds fiquem inacessíveis. Veja [limites de tamanho dos Worlds](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/kinds-of-project.md#size-limits) para mais detalhes.

### Worlds com várias scenes

Por padrão, ao fazer deploy para um world via CLI, a sua scene será tratada como um world de uma única scene. Se o seu world já contiver uma scene, fazer deploy de uma nova scene substituirá essa scene mais antiga, mesmo que as coordenadas sejam diferentes.

Para fazer deploy como um world com várias scenes, adicione o parâmetro `--multi-scene` ao comando de deploy:

`npm run deploy -- --multi-scene --target-content https://worlds-content-server.decentraland.org`

Ao usar esse parâmetro, se a scene que você estiver publicando tiver coordenadas diferentes das scenes existentes nesse world, todas essas scenes existirão juntas.

{% hint style="warning" %}
\*\*📔 Nota\*\*: Se você tiver direitos de operador em um world que não é seu, e receber direitos apenas em parcels específicos desse world, então você só poderá publicar nesses parcels e não poderá afetar o conteúdo de outros parcels do world.
{% endhint %}

### Opt-out da listagem em Places

Se você quiser fazer opt-out de os seus Worlds serem indexados em Places, você pode adicionar a seguinte seção no seu `scene.json`:

```json
{
	"worldConfiguration": {
		"name": "my-name.dcl.eth",
		"placesConfig": {
			"optOut": true
		}
	}
}
```

### Usando o Scene Editor no Creator Hub

1. Abra o projeto da sua scene.
2. Clique no **Publish** botão no canto superior direito.
3. Selecione **PUBLISH TO WORLD**.
4. Selecione para qual dos seus NAMEs ou ENS Domains publicar.

### Via a CLI

Use o seguinte comando:

```bash
npm run deploy -- --target-content https://worlds-content-server.decentraland.org
```

Depois de executar o comando, você será solicitado a assinar o deployment com a sua wallet e um conjunto de validações será executado para permitir ou rejeitar a scene.

### Acessando um World

Depois que uma scene é enviada para o servidor de Worlds, você pode acessá-la usando o Decentraland Explorer com o seguinte URL: `decentraland://?realm=NAME.dcl.eth`, onde `NAME` deve ser substituído pelo Decentraland NAME ou domínio ENS para o qual você fez deploy.

Com o Decentraland já aberto, você também pode ir para um world digitando o comando `/goto NAME.dcl.eth` na chatbox.

Veja [Tornar descobrível](/creator/content-creator-pt/scenes-sdk7/publicacao/make-discoverable.md) para mais informações sobre como tornar o seu World descobrível.

### Migrando um World para Genesis City

Se você é um proprietário de LAND e deseja fazer deploy de uma scene de World em Genesis City, pode fazer isso fazendo novo deploy da sua scene para a rede descentralizada Catalyst, que é o content server de Genesis City.

Coisas a lembrar:

* Remova a seção `worldConfiguration` de `scene.json`
* A limitação de tamanho para Worlds (dinâmica com base nos holdings) é diferente da de parcels de LAND (15 MB por parcel), então certifique-se de que a sua scene tenha o tamanho correto para deployments em Genesis City!

## Publicar a partir de uma wallet de hardware

Em vez de armazenar os seus tokens de LAND em uma conta Metamask, você pode achar mais seguro armazená-los em um dispositivo de wallet de hardware, como um [Ledger](https://www.ledger.com/) ou um [Trezor](https://trezor.io/), fisicamente conectado ao seu computador.

Se você estiver usando um desses dispositivos, pode vincular a wallet de hardware ao Metamask para habilitar a assinatura de mensagens, mantendo os tokens mais seguros. Veja [este artigo do Metamask](https://metamask.zendesk.com/hc/en-us/articles/360020394612-How-to-connect-a-Trezor-or-Ledger-Hardware-Wallet) para instruções de como conectar a sua conta.

Depois que a sua wallet de hardware puder ser usada via Metamask, você poderá fazer deploy seguindo os mesmos passos como se os seus tokens estivessem em uma conta Metamask.

## Sobrescrita de scene

Quando uma nova scene é implantada, ela sobrescreve o conteúdo mais antigo que existia nos parcels que ocupa.

Se uma scene que ocupa vários parcels for sobrescrita apenas parcialmente por outra, todos os seus parcels serão sobrescritos ou apagados.

Suponha que você tenha implantado a sua scene *A* em dois parcels *\[100, 100]* e *\[100, 101]*. Então você vende o parcel *\[100, 101]* para um usuário que possui LAND adjacente e que implanta uma scene grande (*B*) em vários parcels, incluindo *\[100, 101]*.

A sua scene *A* não pode ser renderizada parcialmente em apenas um parcel, então *\[100, 100]* não exibirá nenhum conteúdo. Você deve construir uma nova versão da scene *A* que ocupe apenas um parcel e fazer deploy dela apenas no parcel *\[100, 100]*.

## O que são os content servers

Os content servers são uma rede de servidores de propriedade da comunidade, com um filesystem endereçado por conteúdo, o que significa que cada arquivo é identificado pelo seu conteúdo, e não por um nome de arquivo arbitrário.

Usamos os content servers para hospedar e distribuir todo o conteúdo da scene de uma forma semelhante ao BitTorrent, mantendo a rede do Decentraland distribuída.

1. Os content servers armazenam e distribuem todos os assets necessários para renderizar as suas scenes.
2. O `npm run deploy` comando vincula esses assets ao LAND parcel especificado no seu **scene.json** arquivo. Sempre que você fizer deploy da sua scene novamente, os content servers atualizam seus registros para apontar os parcels para o conteúdo mais recente. Fazer deploy não envolve nenhuma transação de blockchain; você apenas assina a nova entity da scene com a sua wallet para provar a propriedade.

As informações em cada cópia do servidor são verificáveis, pois cada scene é assinada pelo hash do proprietário do LAND. Isso significa que alguém hospedando uma cópia do servidor não poderá adulterar o conteúdo para exibir algo ilegítimo. A comunidade também pode votar para aprovar ou remover qualquer um desses servidores usando o DAO.

## Servidores personalizados

Você pode fazer deploy de conteúdo para um servidor personalizado que não pertence à rede oficial de servidores catalyst mantida pelo DAO. Para isso, você não precisa possuir nenhum token LAND ou NAME, pois pode configurar o servidor para usar qualquer lógica de validação que preferir para controlar quem pode fazer deploy e onde. Servidores personalizados podem optar por incluir conteúdo dos servidores oficiais (que você pode sobrescrever) ou começar do zero e publicar conteúdo totalmente novo.

Veja o [repositório catalyst-owner](https://github.com/decentraland/catalyst-owner) para mais informações sobre o que você pode fazer com o seu próprio servidor e como configurá-lo.

{% hint style="warning" %}
**📔 Nota**: Os players precisarão digitar manualmente um URL para acessar o seu servidor personalizado. Algumas validações de serviços como o [servidor de rewards](/creator/content-creator-pt/recompensas/getting-started.md) podem falhar nesses contextos, pois muitas vezes esses serviços exigem que a solicitação venha de um servidor oficial.
{% endhint %}

Os players nunca são direcionados para este servidor; a única forma de acessá-lo é digitar explicitamente o URL para se conectar a ele.

### Via a CLI

Para fazer deploy em um servidor personalizado, execute:

`npm run deploy -- --target <CUSTOM SERVER DOMAIN>`

O URL para entrar na sua scene implantada no seu servidor personalizado dependerá do domínio onde ela estiver hospedada.

## Verificar se o deployment foi bem-sucedido

Depois que você fizer deploy da sua scene, essas alterações podem levar alguns minutos para serem propagadas pelos vários content servers da rede. Se você entrar no Decentraland logo após fazer deploy, pode ser que ainda veja brevemente a versão anterior do seu conteúdo.

Se estiver usando a CLI para fazer deploy, o signing dapp começará a exibir confirmações de que a nova versão do seu conteúdo foi propagada por todos os servidores da rede.

Você verá uma lista de cada um dos servidores que compõem a rede de conteúdo do Decentraland. Para cada servidor, ele especifica o timestamp da última alteração enviada nesse parcel. Cada servidor se refere a um realm diferente. Você pode ver como os nomes desses servidores se mapeiam para nomes de realms na [tela do monitor do catalyst](https://decentraland.github.io/catalyst-monitor/).

A propagação é apenas parte do processo: após o upload, os modelos 3D da scene são convertidos em bundles de assets otimizados para cada plataforma (Windows e Mac). Até essa conversão terminar, os players recebem de propósito a última versão totalmente funcional da sua scene. Isso normalmente leva apenas alguns segundos, mas pode demorar mais em scenes muito grandes ou quando os servidores estão ocupados. Você pode consultar o progresso da conversão diretamente; veja [Verificar o status da conversão](/creator/content-creator-pt/scene-editor/publish/publish-scene.md#check-the-conversion-status).

Você também pode obter as informações de propagação a qualquer momento executando o seguinte comando no console da linha de comando:

`npx @dcl/opscli pointer-consistency --pointer 0,0`

{% hint style="warning" %}
**📔 Nota**: Use as coordenadas da sua scene em vez de `0,0`. Se a sua scene tiver vários parcels, qualquer um dos seus parcels produzirá a mesma saída. Se as coordenadas começarem com um número negativo, adicione uma `\` no início das coordenadas para evitar que o `-` caractere seja interpretado incorretamente pela linha de comando.
{% endhint %}

## Deployments automáticos

Se você faz alterações regularmente no conteúdo da sua scene e quer implementar um pipeline de publicação simplificado, pode automatizar o deployment da sua scene por meio de uma GitHub action.

Para isso, primeiro você deve armazenar a sua scene em um projeto do GitHub. Depois, você pode configurar uma [GitHub action](https://docs.github.com/en/actions) com o seguinte script, que é executado sempre que houver um merge para a branch `main` . O script instala quaisquer dependências, constrói o projeto e depois faz deploy para o Decentraland.

```yaml
name: Deploy para DCL PROD

on:
  push:
    branches:
      - main

env:
  DCL_PRIVATE_KEY: ${{ secrets.DCL_PRIVATE_KEY }}

jobs:
  deploy:
    name: Implantar
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Instalar pacotes npm
        run: |
          npm install
      - name: Construir scene
        run: |
          npm run build
      - name: Fazer deploy da scene
        run: |
          npm run deploy
```

> Importante: para que esse processo funcione, você deve definir a chave privada de uma wallet como variável de ambiente no GitHub, que será usada para assinar o deployment. Como sempre, tenha muito cuidado para manter as chaves privadas seguras. NÃO use a chave privada da conta que realmente possui os tokens de LAND, pois isso representaria riscos significativos de segurança. Em vez disso, delegue direitos de operador a uma wallet descartável que não possua tokens valiosos. Se essa chave privada algum dia vazar, você pode revogar facilmente esses direitos de operador da conta e configurar uma nova wallet.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/publicacao/publishing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
