mesh-avatar-studio
일러스트를 코딩 에이전트와 로컬 편집기로 2D 메쉬 애니메이션 아바타로 변환
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기mydevice - veja e navegue por qualquer site dentro de molduras realistas de celular, tablet e desktop, com download do mockup em PNG transparente
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Digite a URL de um site e veja-o rodando de verdade dentro de uma moldura de celular, tablet ou desktop — navegável, com a cor da moldura à sua escolha e com download do mockup em PNG de fundo transparente.
O site não é embutido num <iframe>: ele é aberto num Chrome headless no
servidor, com a emulação real do aparelho (user-agent mobile, toque e viewport).
Por isso PWAs reconhecem corretamente que estão num celular, e funciona mesmo em
sites que bloqueiam incorporação.
npm install
npm start
Abra http://localhost:5177. Usa o Chrome ou Edge já instalado na máquina.
Localmente é permitido apontar para localhost — dá para ver o seu próprio
projeto em desenvolvimento dentro de uma moldura.
Precisa de um processo Node persistente com WebSocket e um Chromium ao lado. Plataformas serverless (Vercel, Netlify Functions, Cloudflare Workers) não servem: a sessão ao vivo depende de conexão contínua e de um navegador vivo entre as requisições.
O Dockerfile já traz o Chromium e as fontes necessárias.
Há um render.yaml pronto. No painel: New → Blueprint, aponte para o
repositório e confirme. Ou crie um Web Service com runtime Docker.
New Project → Deploy from GitHub repo. O Dockerfile é detectado automaticamente. Em Settings → Networking, gere o domínio público.
fly launch --dockerfile Dockerfile
fly deploy
| Variável | Padrão | Para que serve |
|---|---|---|
PORT | 5177 | Porta HTTP (as plataformas definem sozinhas) |
MAX_SESSIONS | 6 | Sessões simultâneas. Cada uma é uma aba de Chrome viva — subir demais estoura a memória |
ALLOW_PRIVATE_HOSTS | 0 em produção | Deixa abrir endereços internos. Mantenha desligado em servidor público |
PUPPETEER_EXECUTABLE_PATH | /usr/bin/chromium | Caminho do navegador |
PUBLIC_URL | http://localhost:5177 | Domínio público. Usado na URL canônica, no sitemap e no llms.txt — defina no deploy, senão o SEO aponta para localhost |
ADSENSE_CLIENT | vazio | ID do publisher (ca-pub-...). Sem ele, nenhum anúncio é carregado e /ads.txt responde 404 |
ADSENSE_SLOT_1, ADSENSE_SLOT_2 | vazio | IDs dos blocos de anúncio criados no painel do AdSense |
Reserve pelo menos 1 GB de RAM: Chromium com várias abas não cabe nos planos
gratuitos mais apertados. Comece com MAX_SESSIONS=2 se a memória for pouca.
GET /health responde {"ok":true} para o health check da plataforma.
Como o servidor abre qualquer URL que o visitante digitar, num servidor público ele poderia ser usado para alcançar coisas que só a máquina enxerga. Por isso:
169.254.169.254) é bloqueado no próprio
resolvedor do navegador, então nem um redirecionamento chega até ele;Ainda assim, o app deixa qualquer visitante navegar pela internet a partir do IP do seu servidor. Se for expor publicamente, considere colocar autenticação na frente.
Nenhum método de captura sozinho resolve, então ela é híbrida:
Page.startScreencast é rápido (~23 fps) mas o Chrome headless ignora o
deviceScaleFactor e sempre entrega 1x — borrado numa tela HiDPI;page.screenshot respeita a densidade de pixels (nítido) mas leva ~105 ms por
quadro, teto de ~10 fps — lento demais para navegar.Enquanto você interage, vale o screencast (fluido, ~20 fps, ~40 ms de resposta ao clique). Assim que você para, o screencast é desligado e a tela passa a ser enviada em alta resolução. Desligar importa: numa página que se atualiza sozinha (um relógio, por exemplo) os quadros 1x ficariam apagando os nítidos.
O conteúdo da página está em HTML de verdade e é lido sem executar JavaScript
(cerca de 900 palavras no HTML bruto), com dados estruturados JSON-LD
(SoftwareApplication e FAQPage).
| Rota | Para que serve |
|---|---|
/robots.txt | Libera explicitamente rastreadores de IA (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot e outros) |
/llms.txt | Resumo do site em formato legível por modelos de linguagem |
/sitemap.xml | Mapa das páginas |
/ads.txt | Gerado a partir de ADSENSE_CLIENT; some se a variável não estiver definida |
/privacidade | Política de privacidade, exigida pelo AdSense |
Os blocos só aparecem quando ADSENSE_CLIENT está definido — enquanto a conta
não é aprovada, o site fica sem espaços vazios.
Vale saber de dois riscos antes de submeter para aprovação:
Mesmo assim, a aprovação é decisão do Google.