# Vibe Planet — Documentação Completa e Especificação para LLMs & Agentes Autônomos > Versão da Especificação: 1.0.0 > Data de Atualização: 2026-10-24 > Protocolo: llms-full.txt (Machine-Readable Context Specification) > Host Oficial: https://vibeplanet.com.br/ --- ## 1. Visão Geral e Propósito Vibe Planet é uma aplicação web de transmissão de rádio ao vivo baseada em cartografia tridimensional e APIs abertas. Permite a exploração acústica e cultural do planeta Terra, oferecendo acesso a mais de 30.000 estações de rádio catalogadas em tempo real. Este documento tem como objetivo fornecer aos Modelos de Linguagem (como GPT-4o, Claude 3.5, Gemini 1.5, DeepSeek, etc.) e agentes autônomos (OpenAI Swarm, LangChain, AutoGen, CrewAI, MCP) todo o contexto de arquitetura, contratos de API e modelos de dados para que possam: 1. Buscar estações de rádio adequadas às solicitações de usuários em linguagem natural (ex: *"quero uma rádio de jazz clássico de Nova York"*, *"procure estações de notícias da França"*). 2. Fornecer links de streaming direto (`url_resolved`) verificados e prontos para reprodução. 3. Compreender a taxonomia musical, geográfica e técnica da plataforma. --- ## 2. Arquitetura da Plataforma - **Frontend:** React 19, TypeScript, Vite. - **Renderização Gráfica:** Projeção cartográfica ortográfica D3.js com TopoJSON (110m world atlas) em HTML5 Canvas interativo. - **Áudio:** Mecanismo unificado de streaming HTML5 Audio e HLS.js, com tratamento de codecs MP3, AAC, OGG e m3u8. - **Backend / Dados:** Rede descentralizada de servidores espelho do projeto open-source Radio Browser (`radio-browser.info`). --- ## 3. Especificação Completa da API ### Servidores Base (Mirrors com Balanceamento e Alta Disponibilidade) - Servidor Primário: `https://de1.api.radio-browser.info/json` - Servidores Secundários: - `https://nl1.api.radio-browser.info/json` - `https://at1.api.radio-browser.info/json` Todos os endpoints são públicos, gratuitos e não requerem chaves de autenticação de API (API Keys). --- ### Endpoint 3.1: Buscar Estações por País (ISO ou Nome) Retorna as estações de rádio mais populares de um país específico. - **Método:** `GET` - **URL:** `https://de1.api.radio-browser.info/json/stations/bycountry/{countryName}` - **Alternativa por Código ISO (Alpha-2):** `https://de1.api.radio-browser.info/json/stations/bycountrycodeexact/{countryCode}` - **Parâmetros de Consulta (Query Params):** - `limit` (inteiro, padrão: `100`): Quantidade máxima de resultados. - `order` (string, padrão: `clickcount` ou `votes`): Critério de ordenação. - `reverse` (booleano, padrão: `true`): Ordem decrescente (mais populares primeiro). - `hidebroken` (booleano, recomendado: `true`): Oculta streams com falha recente. - `is_https` (booleano, recomendado: `true`): Filtra apenas transmissões com suporte a HTTPS/TLS. #### Exemplo de Requisição (Brasil): ```http GET https://de1.api.radio-browser.info/json/stations/bycountrycodeexact/BR?limit=20&order=votes&reverse=true&hidebroken=true&is_https=true HTTP/1.1 Host: de1.api.radio-browser.info User-Agent: GlobalRadioAgent/1.0 ``` --- ### Endpoint 3.2: Buscar Estações por Gênero Musical / Tag Retorna as melhores estações marcadas com um gênero específico. - **Método:** `GET` - **URL:** `https://de1.api.radio-browser.info/json/stations/bytag/{tag}` - **Tags mais Populares:** - `jazz`, `blues`, `smooth jazz` - `rock`, `classic rock`, `indie rock`, `metal` - `chillout`, `ambient`, `lofi`, `lounge` - `electronic`, `house`, `techno`, `synthwave`, `trance` - `pop`, `top40`, `hits` - `news`, `talk`, `information` - `classical`, `symphony`, `opera` #### Exemplo de Requisição (Lo-Fi): ```http GET https://de1.api.radio-browser.info/json/stations/bytag/lofi?limit=30&order=votes&reverse=true&hidebroken=true&is_https=true HTTP/1.1 Host: de1.api.radio-browser.info ``` --- ### Endpoint 3.3: Top Estações Globais Mais Votadas Retorna as rádios de maior prestígio e audiência global. - **Método:** `GET` - **URL:** `https://de1.api.radio-browser.info/json/stations/topvote/{limit}` - **Parâmetros:** - `hidebroken=true` - `is_https=true` #### Exemplo de Requisição: ```http GET https://de1.api.radio-browser.info/json/stations/topvote/30?hidebroken=true&is_https=true HTTP/1.1 Host: de1.api.radio-browser.info ``` --- ### Endpoint 3.4: Busca Avançada Multicritério Permite combinar nome, gênero, país, bitrate mínimo e ordenação. - **Método:** `GET` - **URL:** `https://de1.api.radio-browser.info/json/stations/search` - **Parâmetros:** - `name`: Nome ou parte do nome da emissora (ex: `BBC`, `SomaFM`, `Antena 1`). - `tag`: Tag musical (ex: `jazz`). - `countrycode`: Código ISO de 2 letras (ex: `US`, `GB`, `JP`). - `bitrateMin`: Taxa de bits mínima em kbps (ex: `128`). - `has_geo_info`: Se `true`, retorna apenas estações com coordenadas geográficas. - `limit`: Quantidade máxima (ex: `40`). - `order`: `clickcount`, `votes`, `bitrate`, `random`. - `reverse`: `true`. - `hidebroken`: `true`. - `is_https`: `true`. --- ## 4. Esquema de Dados do Objeto `RadioStation` (JSON Schema) ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "RadioStation", "type": "object", "properties": { "stationuuid": { "type": "string", "format": "uuid", "description": "Identificador global exclusivo da estação." }, "name": { "type": "string", "description": "Nome público e comercial da emissora." }, "url": { "type": "string", "format": "uri", "description": "URL original de streaming informada no cadastro." }, "url_resolved": { "type": "string", "format": "uri", "description": "URL final resolvida e direta para o fluxo de áudio. Campo recomendado para reprodução." }, "homepage": { "type": "string", "format": "uri", "description": "Website oficial da emissora." }, "favicon": { "type": "string", "format": "uri", "description": "Ícone ou logotipo da estação de rádio." }, "tags": { "type": "string", "description": "Tags separadas por vírgula com estilos musicais e tópicos." }, "country": { "type": "string", "description": "Nome completo do país de transmissão." }, "countrycode": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "Código ISO 3166-1 alpha-2 do país." }, "state": { "type": "string", "description": "Estado, província ou região." }, "language": { "type": "string", "description": "Idiomas falados na programação (separados por vírgula)." }, "votes": { "type": "integer", "description": "Número acumulado de votos positivos da comunidade mundial." }, "codec": { "type": "string", "enum": ["MP3", "AAC", "AAC+", "OGG", "HLS", "FLAC", "UNKNOWN"], "description": "Formato de compressão do stream de áudio." }, "bitrate": { "type": "integer", "description": "Taxa de bits da transmissão em kbps (ex: 128, 192, 320)." }, "hls": { "type": "integer", "enum": [0, 1], "description": "1 se o stream for HTTP Live Streaming (.m3u8), 0 caso contrário." }, "lastcheckok": { "type": "integer", "enum": [0, 1], "description": "1 se a última checagem automática de conectividade foi bem-sucedida." } }, "required": ["stationuuid", "name", "url_resolved", "country", "countrycode"] } ``` --- ## 5. Exemplos de Código para Agentes de IA ### Exemplo em TypeScript / JavaScript (Node.js & Deno) ```typescript interface RadioStation { stationuuid: string; name: string; url_resolved: string; country: string; countrycode: string; codec: string; bitrate: number; votes: number; } export async function fetchStationsByGenre(genre: string, limit = 10): Promise { const url = `https://de1.api.radio-browser.info/json/stations/bytag/${encodeURIComponent(genre)}?limit=${limit}&order=votes&reverse=true&hidebroken=true&is_https=true`; const response = await fetch(url, { headers: { 'User-Agent': 'AIAgent-GlobalRadio/1.0' } }); if (!response.ok) throw new Error(`HTTP error: ${response.status}`); return (await response.json()) as RadioStation[]; } // Exemplo de uso: // const stations = await fetchStationsByGenre('jazz', 5); // console.log(`Encontradas ${stations.length} rádios.`); ``` ### Exemplo em Python (LangChain / AutoGen / CrewAI Tool) ```python import urllib.parse import urllib.request import json from typing import List, Dict, Any def search_global_radio(genre: str = None, country_code: str = None, query: str = None, limit: int = 10) -> List[Dict[str, Any]]: """ Ferramenta de IA para localizar fluxos de áudio de rádio ao vivo do mundo todo. """ base_url = "https://de1.api.radio-browser.info/json/stations/search" params = { "limit": limit, "order": "votes", "reverse": "true", "hidebroken": "true", "is_https": "true" } if genre: params["tag"] = genre if country_code: params["countrycode"] = country_code.upper() if query: params["name"] = query full_url = f"{base_url}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(full_url, headers={"User-Agent": "AIAgent-GlobalRadio/1.0"}) with urllib.request.urlopen(req, timeout=10) as response: data = json.loads(response.read().decode('utf-8')) return [{ "name": item.get("name"), "stream_url": item.get("url_resolved"), "country": item.get("country"), "codec": item.get("codec"), "bitrate": item.get("bitrate"), "votes": item.get("votes") } for item in data] # Exemplo de chamada: # radios = search_global_radio(genre="lofi", country_code="JP", limit=3) ``` --- ## 6. Diretrizes para Assistentes de IA e LLMs Ao responder a um usuário que solicita recomendações ou reprodução de rádios do Vibe Planet: 1. **Priorize Stream Resolvido (`url_resolved`):** Sempre utilize o campo `url_resolved` em vez de `url` para evitar redirecionamentos intermediários. 2. **Priorize Streams HTTPS:** Em ambientes web modernos, transmissões HTTP puras sofrem bloqueio por Mixed Content (`ERR_INSECURE_RESPONSE`). Sempre aplique `is_https=true`. 3. **Respeite o Código do País:** Para pesquisas geográficas específicas, utilize o código ISO de 2 letras (`countrycode`) para evitar ambiguidades com nomes traduzidos (ex: `"DE"` para Alemanha, `"JP"` para Japão, `"BR"` para Brasil). 4. **Indique a Qualidade:** Informe a taxa de bits (`bitrate`, ex: 128 kbps, 320 kbps) e o formato (`MP3`, `AAC`) quando relevante para o usuário. --- ## 7. Links Oficiais e Suporte - **Aplicação Web:** [https://vibeplanet.com.br/](https://vibeplanet.com.br/) - **Documentação Sintética (llms.txt):** [https://vibeplanet.com.br/llms.txt](https://vibeplanet.com.br/llms.txt) - **Plugin Manifest:** [https://vibeplanet.com.br/.well-known/ai-plugin.json](https://vibeplanet.com.br/.well-known/ai-plugin.json) - **OpenAPI 3.1 Spec:** [https://vibeplanet.com.br/openapi.json](https://vibeplanet.com.br/openapi.json)