Realmente… A busca nas APIs pedem o nome todo, vou conseguir ajustar no meu provider a forma de buscar… Já nos outros (libretro e screenscraper) não tem muito o que fazer.
Como sua API é um dump do libretro o Fuzzy vai funcionar bem pra quem usa a configuração padrão de API que vem no OpenEmux. E só o fato de encontrar os nomes completos, facilita de encontrar no libretro e no screenscraper.
Encontrei os nomes das roms dentro do projeto do libretro e através dos nomes consegui encontrar a capa perfeitamente. O erro era que libreto não lida bem com o caractere especial “&” no jogo “Adventures of Batman & Robin, The (USA)” então a busca fica “Adventures of Batman _ Robin, The (USA)”.
Consegui resolver todas as ocorrências de falta de capa usando esse procedimento.
PS: E esse AlienWare aí? 100% compatível no Linux Mint?
poxa, que dahora @mozertdev !
agora tá rolando o build da v1.10.0, na próxima release vou ajustar essa normalização dos nomes na hora de rodar a busca das capas… tive esse mesmo problema que vc descreveu com as roms de pokemon, eu renomeei a rom colocando sufixo 1.x, 2.x… pra na ordenação eu ordenar cronologicamente. vai ser um bom caso de teste pra melhorar as buscas das capas.
ah, é o Alieware M16 R2 (meu monstrinho) 100% funcional com linux mint.
tenho dois ssds na máquina 1TB (com windows 11, entro raramente pra jogar jogos da steam, battlenet, etc…) e adicionei um ssd de 2TB com o linux mint nele… meu principal sistema, uso pra trabalhar, no mestrado, projetos pessoais, e rodar meus emuladores. hehehehehe uma máquina excelente.
lançado a versão 1.10.0 ![]()
precisei lançar um patch, empacotei um driver de áudio velho sem querer…
segue a v1.10.1
E ai @Guilherme_Feitoza ! Boa tarde!
Oloko, realmente um monstro esse notebook. E o melhor é que tá 100% funcional com o Linux Mint! Pensei em pegar um notebook excelente igual a esse, no final, acabei montando um desktop mesmo haha. Mas é um desktop bem decente:
SO: Linux Mint
CPU: AMD Ryzen 9 5900XT
GPU: AMD Radeon RX 7800 XT 16 GB
RAM: 64 GB DDR4
Armazenamento: 2 TB NVMe SSD + 4 TB HD + 2 TB HD
Tenho um notebook que uso para trabalho ou quando viajo mas é bem simples:
Notebook: Dell Inspiron 15
SO: Bluefin DX
CPU: Intel Core i5-1135G7
GPU: Intel Iris Xe Graphics
RAM: 16 GB DDR4
Armazenamento: 1 TB NVMe SSD
Fiz uma POC pro uso do Fuzzy para resolver as capas não encontradas, já já eu posto os resultados.
Boa tarde, @mozertdev ! Tudo na paz?
Eita! Uma baita máquina!
Eu queria montar um desktop também, mas infelizmente preciso ficar me deslocando… Aí teve que ser um notebook.
Ah! As specs do notebook:
- CPU: Intel Core Ultra 9
- GPU: RTX 4070 8GB
- RAM: 64GB ddr5 5600mhz
- 1 SSD nvme 1TB; 1 SSD nvme 2TB
- Tela 2k, 240hz
Comprei antes desses aumento maluco de RAM.
Tenho muita vontade de montar um setup AMD, tão excelentes, e o tempo de vida do socket é muito grande… Acho que o atual ainda é o AM5. Muito bom isso que AMD faz…
Fiz uma POC para avaliar aquela idéia do uso do Fuzzy para resolver as capas não encontradas. Fiz esse teste utilizando a v1.10.1 do OpenEmux.
-
Baixei a base de dados do Libretro;
-
Escrevi um script python para gerar um JSON com todas as ocorrências de arquivos “.cht” de cada pasta dentro da pasta “CHT”;
-
Obtive como resultado 1 arquivo JSON com todos os nomes possiveis das ROMS + 1 arquivo JSON com todos os nomes possíveis das ROMS para cada um dos consoles presentes na pasta CHT (em uso real, você pode utilizar os arquivos “.dat” e “.index” fornecidos pelo Libretro);
-
Escrevi um script python usando a biblioteca “rapidfuzz”. Esse script consome as informações dos arquivos JSON e faz a consulta no estilo Fuzzy trazendo os possíveis resultados com porcentagem de chance de acerto de acordo com a string pesquisada;
-
Baixei a build v1.10.1 do OpenEmux (appimage), instalei (appimage pool -instalação limpa), importei as roms do SNES e deixei que o sistema resolvesse as capas;
-
Algumas capas não foram encontradas. Usei o filtro de “Somente sem capa”;
-
Clicando com o botão direito sobre o ícone da rom “Imagem da capa > Gerenciar capa…” aparece o nome original da rom no ambiente de pesquisa avançada de capas. Usei esses nomes como a string de pesquisa inicial para o script Fuzzy pesquisando dentro da base (JSON) específica do SNES (2773 roms listadas);
-
Retornado os resultados do Fuzzy, utilizei a ocorrência que julguei melhor para fazer a pesquisa no ambiente de pesquisa avançada de capas dentro do OpenEmux;
-
Consegui resolver o problema das capas para todas as ROMS em até 2 pesquisas no Fuzzy por capa (quando não era encontrado com o nome do arquivo era feita nova pesquisa com o nome mais óbvio para encontrar a correspondência no Fuzzy);
RESULTADOS:
Adventures of Batman & Robin, The (USA)
Tentativa 1 (ENCONTRADO)
Donald Duck - Maui Mallard in Cold Shadow (E) [!]
Tentativa 1 (NÃO ENCONTRADO)
Tentativa 2 (ENCONTRADO) (Pesquisa: Donald Duck)
Final Fantasy 2 (V1.1) (U)
Tentativa 1 (NÃO ENCONTRADO)
Tentativa 2 (ENCONTRADO) (Pesquisa: Final Fantasy 2)
Great Circus Mystery Starring Mickey & Minnie, The (USA)
Tentativa 1 (ENCONTRADO)

Todas 4 ocorrências de ausência de capa foram resolvidas utilizando o método de pesquisa utilizando Fuzzy:
CONCLUSÃO:
Não viável como busca padrão para as capas. Seria mais eficaz apenas adicionar diretivas como a troca de “caracteres especiais” por “_” e outras diretivas pertinentes no formato de pesquisa já existente. Porém a existência dessa função de busca Fuzzy de forma complementar (manual) poderia ter resultados excelentes na hora de resolver ocorrências mais complexas onde o buscador padrão, mesmo que melhorado, não consegue sucesso.
A implementação utilizando arquivos estáticos é totalmente possível tendo visto que a base de dados do libretro praticamente não tem mudanças nos nomes das roms e toda vez que tem uma nova build do OpenEmux pode carregar esses arquivos atualizados. Também pode ser usado os arquivos “.dat” e “.index” direto da API do libretro ou do espelho do OpenEmux que são totalemente atualizados em tempo real.
Olá, @mozertdev !
vc me deu uma excelente ideia, ao invés de busca fuzzy, acho que um full-text-search talvez resolva… vou usar essa mesma abordagem, com alguma lib que forneça uma implementação de full-txt-search nesses arquovos .dat, ou .json, tentar pre-processar o dicionário.
Fiz aqui outro script utilizando o FTS5 do SQLite, usando a lib “sqlite3” nativa do python. Diminui as dependências de bibliotecas, é mais rápido e mais “limpo” nos resultados quando comparado com o Fuzzy. Entretanto precisei fazer mais uma rodada de tentativas, deixando a string pesquisada mais abrangente, para trazer a resposta correta para o “Donald Duck - Maui Mallard in Cold Shadow (E) [!]” e “Final Fantasy 2 (V1.1) (U)”.
Excelente, @mozertdev ! achei que ficou bem interessante… se quiser abrir PR, pode mandar ver. hehehehe, ou abrir issue. essa semana, vou focar nessas melhorias.
Acabei fazendo o “impensável” hoje hahaha!
Fui lá nas ferramentas que o RetroArch fornece para dev, buildei o libretrodb_tool (uma ferramenta para desempacotar os arquivos “.rdb” que são efetivamente o banco de dados dos nomes, hash e etc dos jogos), fiz o scrapy do nome e adicionei o nome do console para cada ocorrência, construí um banco SQLite com FTS5 e fiz as consultas no banco pelo DBeaver usando as funções do FTS5.
O banco inteiro pesa 97,6 mb (em JSON pesa 79,6 mb), tem 741.817 ocorrências e as consultas são instantâneas.
Fiz todas aquelas consultas que te sinalizei na POC e consegui resolver todas as ocorrências de erro (levando em consideração que a mudança do caractere especial “&” por “_” esteja implementada). Inclusive consegui resolver outras ocorrências que eu estava tendo em jogos que adicionei depois (“Crash - Mind over Mutant (USA) (En,Fr)” e “Ys I & II Chronicles (USA)”).
PS: Já fiz a review da v1.10.1 do OpenEmux e devo postar amanha aqui.
Caramba! Que incrível @mozertdev !!!
Ow! Se quiser fazer pull-request, vou adorar!
Te mandei invite de colaborador para o projeto ![]()
Ah, eu lancei uma v1.10.2, mas por conta de um bug na versão flatpak.
Opa @Guilherme_Feitoza ! Boa tarde!
Acabei dando uma incrementada nessa idéia e fiz um mini projeto baseado nela. Usei customtkinter só pra tirar do papel mesmo e conseguir testar “clicando botãozinho” kkkkkkkk
Basicamente é um buscador com banco de dados local para a consulta dos nomes mas que faz a busca real na API pela capa e também fornece todo tipo de cópia para as diversas necessidades.
Todos os Consoles disponiveis:
Busca Padrão (FTS5) ou Busca Aproximada (Fuzzy):
Exemplo de busca:
Conferir a imagem presente no endpoint (Boxarts, Titles, Snaps):
Modal da boxart:
Várias opções de cópia para diferentes cenários (Nome Orginal no banco de dados, nome para fazer pesquisa ou para salvar como nome do arquivo para reconhecimento pelo Libretro, URLs completas para as “boxarts, titles, e snaps”):
Testei bastante e percebi que o banco de dados atual está muito inflado. Acredito que consigo reduzir cerca de 50% a 75% dele. Assim o tamanho dele fica bom para subir no github, fica mais facil de ofertar na aplicação e tem resultados de pesquisas mais acertivos evitando muita procura manual
Eu subiria esse banco completo… hehehehe
Pelo que entendi, a biblioteca de jogos desses consoles clássicos são estáticas (pelo menos eu acho… Não creio que tenha alguém lançando novos títulos para algum dos 31 consoles do RetroArch), é muito improvável que alguma edição seja feito na base. Para os padrões de hoje, 90mb é bem tranquilo. hehehehe ![]()
Seria um caminho subir essa base num repositório separado, versionado e baixar a base no primeiro bootstrap, e ir atualizado conforme lança versão nova. Seria o mesmo fluxo que uso pra ver se tem atualização disponível,na hora que inicia eu olho a última release do Github e comparo. O que vc acha?
Mas qualquer otimização é sempre bem-vinda, podemos fazer incremental… Não precisa lançar perfeito. ![]()
























