De onde vem cada número deste painel, quem leu o quê, e o quanto dá para confiar em cada coisa. Esta página é gerada pelos próprios arquivos de dado: as contagens abaixo são lidas na hora em que ela é montada, não digitadas.
Metade deste painel eu apurei do zero e dá para auditar linha a linha. A outra metade veio pronta.
store.steampowered.com/appreviews/<appid>, paginado por cursor, 100 por
requisição, sempre com language=all e purchase_type=all — sem esses dois
parâmetros a Steam devolve só inglês e só compra direta, que é cerca de 15% do total e daria um retrato
falso. Datas de update saem de ISteamNews/GetNewsForApp e a ficha da loja de
api/appdetails.Cobertura de cada coleta contra o número que a própria API declara. Coleta parcial está marcada e explicada.
| Base | App | Coletadas | API declara | Cobertura | Arquivo | Coleta |
|---|---|---|---|---|---|---|
| Season 1 | 1350650 | 18.678 | 18.679 | 100% | 19.1 MB | 13/08/2026 |
| Season 2 | 3478650 | 2.641 | 2.641 | 100% | 3.0 MB | 13/08/2026 |
| Season 3 | 4005870 | 0 | - | - | 0 KB | 13/08/2026 |
| Playtest S3 | 4509140 | 9 | 9 | 100% | 13 KB | 13/08/2026 |
| Pentiment | 1205520 | 9.687 | 9.687 | 100% | 830 KB | 14/08/2026 |
| SlayThePrincess | 1989270 | 33.460 | 33.465 | 100% | 3.9 MB | 14/08/2026 |
| YsFelghana | 207320 | 2.129 | 2.129 | 100% | 213 KB | 14/08/2026 |
| Wasteland2 | 240760 | 8.100 | 8.100 | 100% | 732 KB | 14/08/2026 |
| SunlessSkies | 596970 | 3.468 | 3.468 | 100% | 315 KB | 14/08/2026 |
| Disco Elysium | 632470 | 112.193 | 129.920 | 86% | 10.7 MB | 14/08/2026 |
Nenhum script classificou nada. O papel do regex foi achar candidatas e despejar o texto num arquivo; a decisão de classe é leitura, entrada por entrada.
| Classificação feita à mão | Reviews | Onde aparece |
|---|---|---|
| S1 · pedido explícito de voz | 211 | aba 01 e aba 04 |
| S1 · reclamação da ausência | 221 | aba 01 e aba 04 |
| S1 · total que pede voz | 432 | o 3,1% da aba 01 |
| S2 · elogia a voz | 111 | aba 02 |
| S2 · critica a voz | 18 | aba 02 |
| S2 · diz que a voz custou conteúdo | 9 | aba 02 |
| S2 · pede mais voz | 9 | aba 02 |
| S2 · cita sem julgar | 20 | aba 02 |
| S2 · falso positivo do filtro | 69 | descartadas |
| S1 · negativas lidas inteiras | 908 | os motivos da aba 01 |
| S2 · negativas lidas inteiras | 461 | os motivos da aba 02 |
Rede ampla de propósito: falso positivo o olho descarta na leitura, falso negativo some para sempre. Por isso o filtro é auditado contra uma amostra de fora dele.
ses em turco, 声音 em chinês e voces em espanhol. Com o filtro
ampliado entraram 114 candidatas novas, das quais 67 realmente pediam voz: a contagem inicial estava
15% baixa. Contra o filtro final, a mesma amostra tem zero escapes.Não existe um percentual único de confiabilidade, porque os números não foram produzidos do mesmo jeito. São quatro níveis.
| Tipo de número | Nível | Por quê |
|---|---|---|
| Aprovação, volume, idioma, data | censo | Não é amostra, é contagem: 18.678 de 18.679 na S1, 2.641 de 2.641 na S2. O erro possível é de coleta, não de estatística |
| Pedido de voz na S1, elogio na S2 | alta, e é piso | Leitura integral das candidatas, com o filtro auditado por amostra de fora. Erra para baixo, nunca para cima |
| Motivos das 461 negativas | ranking sim, linha não | A ordem é robusta — roteiro com 54,9% está muito à frente de tudo. O valor exato de cada linha muda conforme o termo escolhido |
| “Citam voz” nos casos da aba 05 | média | Só termo, sem leitura. Vale para o antes contra o depois, porque o critério é o mesmo dos dois lados; não vale como número absoluto |
| Tabela dos 22 concorrentes | metadado exato, amostra não | A marcação de áudio completo é da própria Steam. Mas a escolha dos 22 títulos é minha e não é aleatória: essa é a parte fraca da aba 05 |
| Faturamento e projeção | não verificado | Vem do Steamworks, entregue pronto. Não tenho como conferir |
Todos ficam na pasta do projeto e podem ser rodados de novo. A descrição de cada um é lida do cabeçalho do próprio arquivo.
| Script | Alimenta | O que faz | Tamanho |
|---|---|---|---|
coletar_todos.py | abas 01, 02, 04 e /community | Mesmos parametros do coletar_1350650.py (json=1, filter=recent, language=all, purchase_type=all, num_per_page=100, cursor). Um arquivo por app em _dados/. Sem os defaults abertos a API esconde ~85% das reviews, entao language=all e | 3 KB |
coletar_1350650.py | aba 01 | Coleta pura: nao filtra janela, nao analisa, nao resume. A analise le o arquivo depois, para que qualquer numero do relatorio possa ser reconferido no bruto. Parametros exigidos na tarefa: json=1, filter=recent, language=all, | 4 KB |
reviews.py | aba 01 | Alimenta a analise de reviews do painel (freshwomen-s3.pages.dev). Nao publica nada: so coleta e imprime o resumo, alem de gravar o JSON bruto para conferencia. Como a API se comporta (verificado em 11/08/2026, nao e de memoria): | 9 KB |
analisar_dublagem.py | abas 01 e 04 | Le o bruto de reviews_1350650.json (nunca chama a API: assim todo numero do relatorio pode ser reconferido no mesmo arquivo) e escreve um relatorio markdown. Janelas, atribuidas pela data de CRIACAO da review (timestamp_created, UTC): | 18 KB |
pedido_de_voz.py | abas 01 e 04 | Etapa 1 (--dump): rede ampla por regex sobre as 18.677 reviews e despejo dos candidatos em lotes de texto, para leitura humana. Review curta sai inteira; review longa sai como janela em volta do termo, que e o barato que da contagem | 7 KB |
voz_s2.py | aba 02 | A S2 nasceu dublada, entao aqui nao existe "antes e depois": a unica pergunta respondivel e QUANTO da conversa da S2 e sobre voz, e se e elogio ou queixa. O metodo e o mesmo da S1 (pedido_de_voz.py): rede ampla por regex, despejo dos | 5 KB |
coletar_caso.py | aba 05 | Serve para a aba de casos: para cada jogo que ganhou voz depois de lancado, o que interessa e a data, o polegar, o idioma e se o texto fala de voz. Guardar a review inteira de um jogo com 130 mil reviews nao cabe e nao serve para nada, | 4 KB |
categoria_voz.py | aba 05 | Para cada titulo de uma lista de VNs adultas e jogos do mesmo balcao na Steam, pega da API da loja: se algum idioma esta marcado como AUDIO COMPLETO, o total de reviews e o percentual positivo. Sem isso, "voz e diferencial" e opiniao. | 4 KB |
metricas_community.py | /community | Le _dados/reviews_ | 8 KB |
gerar_community.py | /community | A pagina nao calcula nada: recebe o payload pronto e so desenha. Assim todo numero do grafico pode ser reconferido no bruto de reviews_ | 7 KB |
graficos_s1.py | aba 01 | Duas figuras no mesmo eixo de tempo (out/2023 a abr/2024), para dar para ler uma em cima da outra: A) $/dia por bloco de venda, com as promocoes destacadas e o dia da DLC marcado | 7 KB |
graficos_s2.py | aba 02 | Quatro figuras, cada uma com UM eixo (nunca dois no mesmo desenho): A) reviews por mes, barra empilhada positiva/negativa -> volume B) % de recomendo por mes, linha -> recepcao | 10 KB |
graficos_casos.py | aba 05 | Cada caso e um jogo que ganhou voz depois de lancado. Sao duas medidas diferentes, entao sao dois desenhos, nunca dois eixos no mesmo: A) quanto da conversa passou a ser sobre voz (antes x depois) | 3 KB |
amostrar_ccu.py | /community | Roda de hora em hora pela tarefa do Windows "FreshWomen - CCU horario". Cada passada acrescenta uma linha em _dados/ccu.json, regenera site/community.html e publica. Um retrato solto de CCU nao vale nada; a serie ao longo das semanas ate | 2 KB |
gerar_fontes.py | esta página | A pagina de metodo nao pode ter numero digitado a mao, senao ela envelhece mentindo. Tudo aqui e lido na hora: cobertura de cada coleta, quantas reviews foram lidas a mao, o que cada script faz (a primeira linha do docstring dele) e | 22 KB |
publicar.py | todas | Projeto Pages proprio (freshwomen-s3), na conta da OPPAIMAN. Nao divide projeto com o LocStudio nem com o voice-oppaiman: cada deploy do Pages substitui a pasta inteira, entao juntar projetos so cria a chance de um apagar o outro. | 2 KB |
_dados/ guarda o bruto das coletas,
_dados/casos/ os jogos de referência da aba 05, _lotes/ e
_lotes_s2/ os despejos de texto que eu li, e classificacao.json e
classificacao_s2.json a decisão de cada review por índice — é por aí que se
audita qualquer número de leitura deste painel, review por review.python coletar_todos.py baixa as
reviews de novo, pedido_de_voz.py --contar e voz_s2.py --contar refazem as
contagens em cima da classificação salva, graficos_s2.py e graficos_casos.py
redesenham as figuras, gerar_fontes.py refaz esta página e
publicar.py põe no ar. Nenhuma etapa depende de número digitado à mão.Página gerada em 14/08/2026 a partir dos arquivos do projeto.