Osintgram

Como instalar o Osintgram em 2026

Seis comandos: clone, cd, criar um ambiente virtual, ativar, pip install -r requirements.txt e então preencher config/credentials.ini. Essa sequência instala sem erro nenhum em um ambiente Python 3.11 novo; o que quebra é o pip rodando fora de um ambiente virtual em distros baseadas no Debian, e o pyreadline no Windows nativo.

19 min de leituraEquipe Osintgram

O Osintgram se instala em seis comandos: git clone, cd Osintgram, python3 -m venv venv, ativar o ambiente, pip install -r requirements.txt e preencher config/credentials.ini. Instalar o requirements.txt em um ambiente virtual Python 3.11 limpo, com o pip atual, funciona sem nenhum erro. As falhas de instalação que as pessoas relatam se concentram em quatro coisas: o pip rodando no sistema inteiro no Debian, no Ubuntu ou no Kali; um prettytable ou urllib3 empacotado pelo sistema atrapalhando; o gnureadline falhando ao compilar; ou o pyreadline quebrando no Windows nativo.

Antes de começar

Você precisa de um interpretador Python 3, do git e de uma decisão sobre como o Osintgram vai se autenticar. A terceira é a parte que todo mundo pula, e é por isso que a instalação parece dar certo e a ferramenta encerra logo na primeira linha da primeira execução.

O README nunca informa uma versão mínima do Python; ele traz um badge Python3 e nada além disso. A única versão fixada no repositório é a primeira linha do Dockerfile, FROM python:3.9.2-alpine3.13, e a dependência mais recente, hikerapi 1.7.1, declara requires_python >=3.8. Instalar o requirements.txt em um ambiente virtual Python 3.11 novo funciona com o pip atual: prettytable 0.7.2, pyreadline 2.1 e hikerapi 1.7.1 são publicados apenas como source distribution, e os três compilam sem reclamar. Trate 3.9-3.11 como faixa ideal, não como requisito.

  • Python 3.9 a 3.11. É no 3.12 e no 3.13 que as quebras relatadas se concentram, e quase sempre é uma colisão de empacotamento, não uma incompatibilidade da linguagem.
  • git, ou um ZIP da branch master. Não existe pacote no PyPI nem script de instalação: o repositório não tem nenhum setup.sh.
  • Um compilador e os headers do ncurses no Linux, mas só se o pip tiver que compilar o gnureadline. Nas distros glibc convencionais ele encontra uma wheel manylinux e pula a compilação.
  • Credenciais. Ou uma conta do Instagram que você esteja disposto a perder, ou um token da HikerAPI. Decida antes do passo seis: são dois caminhos de código diferentes.

Uma plataforma ganhou página própria, porque tanto o interpretador padrão quanto o pip dela se comportam de forma diferente de uma máquina Debian ou Ubuntu comum: Osintgram no Kali Linux.

Os seis comandos

Esta é a sequência do próprio README, sem alteração nenhuma. Rode tudo a partir de um único shell: o ambiente virtual e o diretório de trabalho vão importar mais adiante.

  1. 1

    Clone o repositório

    A branch padrão é a master. Também existem as branches development e v2; ignore as duas, a não ser que você saiba por que quer usá-las.

    git clone https://github.com/Datalux/Osintgram.git
  2. 2

    Entre no diretório

    E não é só por causa deste passo. O Osintgram lê a configuração pelo caminho relativo config/credentials.ini, então a raiz do repositório é o único diretório de onde ele roda corretamente.

    cd Osintgram
  3. 3

    Crie um ambiente virtual

    No Debian, no Ubuntu e no Kali você pode precisar de um sudo apt install python3-venv antes. Pular esse passo é o que produz os três primeiros erros da tabela mais abaixo.

    python3 -m venv venv
  4. 4

    Ative o ambiente

    Seu prompt agora deve estar com o prefixo (venv). Se não estiver, o próximo comando instala tudo no interpretador errado.

    # Linux, macOS, Git Bash
    source venv/bin/activate
    
    # Windows PowerShell
    .\venv\Scripts\activate.ps1
  5. 5

    Instale as dependências

    A flag é -r. Digitar -t no lugar dela te rende ERROR: Target path exists but is not a directory, will not continue., porque -t significa --target.

    pip install -r requirements.txt
  6. 6

    Preencha suas credenciais

    Edite o arquivo INI na mão, ou deixe o Makefile perguntar por você. Não são equivalentes; a próxima seção explica por quê.

    nano config/credentials.ini
    
    # or, with GNU make and bash available:
    make setup
requests-toolbelt==0.9.1
geopy>=2.0.0
prettytable==0.7.2
instagram-private-api==1.6.0
gnureadline>=8.0.0; platform_system != "Windows"
pyreadline==2.1; platform_system == "Windows"
hikerapi==1.7.1
O requirements.txt da master, na íntegra. Repare nos dois environment markers: gnureadline em todo lugar menos no Windows, pyreadline só no Windows.

Duas ausências nesse arquivo vão te confundir depois. requests não está listado; ele chega por transitividade. httpx também não, e src/Osintgram.py o importa na linha 9; só resolve porque hikerapi depende dele.

Configurando as credenciais

O repositório já vem com config/credentials.ini criado e em branco. Três campos, uma seção:

[Credentials]
username =
password =
hikerapi_token =
config/credentials.ini exatamente como ele chega em um clone novo.

src/config.py carrega o arquivo com o configparser e a chamada literal config.read("config/credentials.ini"). Esse caminho relativo é o motivo de o passo dois existir: rode python3 ~/Osintgram/main.py sometarget a partir da sua home e o configparser lê exatamente nada, em silêncio.

Deixe o arquivo do jeito que ele vem e a primeira execução para na hora. Com o credentials.ini em branco de um clone novo, o main.py imprime uma linha e mais nada: Error: "username" field cannot be blank in "config/credentials.ini". Ao lado dela estão hardcoded a mesma mensagem para password, mais Error: missing "username" field in "config/credentials.ini" e Error: file "config/credentials.ini" not found!.

Ele imprime um erro e sai com código 0

Toda verificação de credencial em src/config.py chama sys.exit(0) (status de sucesso). Se você controla o Osintgram por um shell script ou por CI, um arquivo de credenciais mal configurado fica idêntico a uma execução limpa para qualquer coisa que olhe o código de saída. Verifique a saída, não o status.

O que o `make setup` realmente escreve

O target setup do Makefile é curto e faz mais do que anuncia. Ele pergunta Instagram Username: com read -p e Instagram Password: com read -sp, ou seja, só a senha fica oculta, e depois escreve o arquivo por conta própria. Três consequências não documentadas. Ele sobrescreve o credentials.ini apenas com [Credentials], username e password, então qualquer hikerapi_token que você tinha desaparece. Ele roda echo -n "{}" > config/settings.json antes disso, apagando qualquer sessão em cache. E ele declara SHELL := /bin/bash e usa read -sp, então precisa do GNU make e do bash: não vai rodar no cmd nem no PowerShell.

O campo hikerapi_token

Esse terceiro campo muda qual programa você está rodando. src/config.py expõe getHikerToken(), que devolve o valor de hikerapi_token ou a variável de ambiente HIKERAPI_TOKEN. O main.py se ramifica a partir disso: com um token ele constrói o HikerCLI, e só na ausência dele o cliente Osintgram clássico. Com um token definido, a ferramenta nunca monta um cliente do Instagram e nunca envia senha para lugar nenhum. Você não precisa de conta no Instagram. A linha de inicialização vira Connect to HikerAPI... em vez de Attempt to login....

HIKERAPI_TOKEN=<hikerapi token> python3 main.py <target> -c info
A forma com variável de ambiente que o README documenta, já com um comando preenchido. Campo e variável são intercambiáveis.

O README aponta para hikerapi.com/tokens e diz que as "first 100 requests are free after registration and confirmation of your tg" (as 100 primeiras requisições são gratuitas após o registro e a confirmação do seu tg). Depois disso é uma API paga de terceiros, e todo nome de usuário que você consultar passa por ela. É essa a troca. É o caminho que ainda foi projetado para funcionar, e os usuários relatam que funciona, mas a issue aberta #2664 (21 de junho de 2026) existe justamente para lidar com formatos alternativos de resposta da HikerAPI.

Caminho de credencialO que vai parar no credentials.iniPrecisa de conta no Instagram
Editar o arquivo na mãoOs campos, entre os três, que você preencherSó se você preencher username e password
make setupusername e password; a linha do token é descartadaSim, e ele ainda reseta o config/settings.json
hikerapi_token ou variável de ambienteUm token; username e password nunca são lidosNão: o main.py constrói o HikerCLI
O que cada rota de configuração realmente escreve no arquivo.

Use uma conta descartável, e mantenha ela fora do git

O README traz isto em vermelho: "It is advisable to not use your own/primary account when using this tool." (é aconselhável não usar sua própria conta principal ao usar esta ferramenta). Um segundo aviso em vermelho diz para você não subir suas credenciais para o GitHub caso faça um fork do projeto. Esse importa mais do que parece: config/credentials.ini está commitado no repositório, então, embora o .gitignore cite o arquivo, o Git não ignora nada que já esteja rastreando. Confira o git status antes de dar push em um fork. O Osintgram se autentica como você e se comporta como um cliente automatizado; seja lá o que o Instagram decidir sobre isso, quem paga é a conta que está nesse arquivo.

Confira se deu certo

Duas verificações, nesta ordem: a primeira prova que a árvore de dependências resolveu, a segunda prova que a ferramenta consegue ler a sua configuração. Rode as duas a partir da raiz do repositório, com o venv ativo.

cd Osintgram
source venv/bin/activate

# 1. does the package tree import?
python -c "from src.Osintgram import Osintgram; print('ok')"

# 2. does it read your credentials and reach login?
python3 main.py <target username> --command info
A verificação de import é a que pega um venv instalado pela metade. É o mesmo import que o main.py roda antes de o argparse sequer ver os seus argumentos.

Se a primeira imprimir ok, sua instalação acabou. Se a segunda imprimir um erro de campo em branco, volte para a seção de credenciais. Se ela imprimir Attempt to login... ou Connect to HikerAPI..., a instalação está pronta e tudo depois dessa linha é problema do Instagram.

Mais um para você já antecipar: ModuleNotFoundError: No module named 'src.Osintgram' quer dizer que você iniciou o main.py de algum lugar que não é a raiz do repositório. Essa é a issue #105, e a correção é cd Osintgram, sempre.

Erros de instalação e o que eles realmente significam

Toda string da coluna da esquerda veio do issue tracker do projeto ou foi reproduzida localmente em um clone limpo. Nenhuma delas é do lado do Instagram; todas acontecem antes de uma única requisição sair da sua máquina.

Texto do erroO que isso realmente significaCorreção
error: externally-managed-environmentPEP 668. Debian 12+, Ubuntu 23.04+ e Kali recusam instalações do pip no sistema inteiro.Faça o passo do venv. O Kali documenta isso; sudo apt install python3-venv se o venv estiver faltando.
ModuleNotFoundError: No module named 'urllib3.packages.six.moves'O python3-requests do apt misturado com o urllib3 2.x do pip. O sinal claro é um caminho dentro de ~/.local/lib/python3.12/site-packages/, que denuncia um --break-system-packages.Apague os pacotes do user-site e reinstale em um venv limpo (#1766).
Cannot uninstall prettytable 3.10.1 / no RECORD file was found for prettytableO pip tentando remover o python3-prettytable do apt para atender ao pin prettytable==0.7.2.Um venv sem --system-site-packages evita o problema (#1126).
/usr/bin/ld: cannot find -lncursesO gnureadline compilando do código-fonte sem os headers do ncurses presentes.sudo apt install -y build-essential libncurses-dev (#183).
ModuleNotFoundError: No module named 'pyreadline' no LinuxEnganoso. O main.py captura um import gnureadline que falhou com um except pelado e cai no pyreadline, que o requirements.txt só instala no Windows.Ignore o pyreadline; corrija a compilação do gnureadline acima.
AttributeError: module 'collections' has no attribute 'Callable'pyreadline 2.1 no Python 3.10+ em Windows nativo. Quebra na linha 108 do main.py.Veja a seção de Windows: pip install pyreadline3 não é a correção (#2668).
AttributeError: 'HTMLParser' object has no attribute 'unescape'prettytable 0.7.2 sendo compilado contra um setuptools antigo; HTMLParser.unescape() deixou de existir no Python 3.9.pip install --upgrade pip setuptools wheel antes de tudo (issue #334).
ModuleNotFoundError: No module named 'src.Osintgram'main.py iniciado de fora da raiz do repositório.cd Osintgram primeiro.
ERROR: Target path exists but is not a directory, will not continue.pip install -t requirements.txt; -t é --target, um destino de instalação.A flag é -r (#2666).
O inventário completo de falhas de instalação, com as strings reais em vez de paráfrases.

As três primeiras linhas só acontecem quando o pip roda contra o interpretador do sistema, então elas somem no instante em que você de fato usa o venv. É por isso que o passo três não é cerimônia.

Windows e WSL

No Windows nativo, a instalação das dependências vai bem. Clonar a master e instalar o requirements.txt em um venv com Python 3.11 funciona, e o pyreadline 2.1, exclusivo do Windows, compila do código-fonte sem erro. O que falha é a coisa logo em seguida, antes de o argparse ter lido um único argumento seu:

File "...\Osintgram\main.py", line 108, in <module>
    pyreadline.Readline().parse_and_bind("tab: complete")
  File "...\pyreadline\py3k_compat.py", line 8, in callable
    return isinstance(x, collections.Callable)
AttributeError: module 'collections' has no attribute 'Callable'
Reproduzido no Windows com Python 3.11; esse mesmo traceback é a issue #2668, aberta em 28 de julho de 2026.

collections.Callable foi removido no Python 3.10 e movido para collections.abc; o pyreadline 2.1 teve sua última versão publicada em 2020. O main.py chega nessa linha porque o import de readline dele é um try: import gnureadline / except: import pyreadline, e o requirements.txt instala o pyreadline só no Windows. Ou seja, o Windows é o único caminho que encosta no módulo quebrado.

pyreadline3 não é um substituto direto

Esse é o conselho de toda thread de fórum, e ele não funciona aqui. Em um venv limpo, depois de um pip install pyreadline3, python -c "import pyreadline" continua levantando ModuleNotFoundError: No module named 'pyreadline', enquanto import pyreadline3 funciona. O pacote instala sob outro nome de módulo, e o main.py tem import pyreadline hardcoded.

Quatro coisas que funcionam de verdade:

  1. Corrija o pyreadline. Em venv\Lib\site-packages\pyreadline\py3k_compat.py, troque collections.Callable na linha 8 por collections.abc.Callable. Verificado: o main.py então roda até a verificação de credenciais.
  2. Ou corrija o main.py. Mude o fallback para import pyreadline3 as pyreadline. Mesmo resultado, mas é uma alteração em código rastreado, e o git pull vai brigar com você por causa dela.
  3. Use o WSL. Dentro de um shell WSL com Ubuntu ou Debian você está no caminho Linux: o environment marker seleciona o gnureadline, o pyreadline nunca é instalado, e os mesmos seis comandos valem sem uma vírgula de mudança. A PEP 668 também vale ali, então mantenha o venv.
  4. Use Python 3.9 no Windows, onde collections.Callable ainda existe. Funciona, envelhece mal.

O WSL é a recomendação honesta: todo caminho de código, todo traceback do tracker e o próprio contêiner do projeto pressupõem Linux. O Git Bash é um meio-termo parcial (o README documenta source venv/bin/activate para ele), mas ele ainda roda o interpretador do Windows, então ainda bate na linha 108.

Docker

O repositório traz um Dockerfile, um docker-compose.yml e um Makefile. O Docker é o único caminho que contorna por completo a questão da versão do Python, porque a imagem fixa o próprio interpretador.

make setup
docker build -t osintgram .
docker run --rm -it \
  -v "$PWD/output:/home/osintgram/output" osintgram <target>
O make setup tem que vir primeiro, e não por conveniência.

A imagem contém a sua senha do Instagram

O terceiro COPY do Dockerfile é COPY --chown=osintgram:osintgram config/ /home/osintgram/config, então o credentials.ini fica embutido nas camadas da imagem no momento do build. É isso que o README quer dizer com "Your container will fail if you do not do step #3 and configure your credentials" (seu contêiner vai falhar se você não fizer o passo #3 e configurar suas credenciais). Trate o build como um artefato que carrega credenciais: nunca dê push dele em um registry, nunca compartilhe o tar exportado.

Mais dois fatos sobre o Docker. A imagem base é python:3.9.2-alpine3.13, um build de março de 2021. É exatamente por isso que o contêiner escapa das colisões do 3.12 e do 3.13, e também por isso que ele é a coisa menos atualizada da sua máquina. E os targets run, build-run-testing e cleanup-testing do Makefile chamam todos o docker-compose, o binário v1 com hífen que as instalações modernas do Docker não fornecem mais.

Mitos que fazem você perder tempo

Quatro afirmações aparecem sem parar nos guias de instalação do Osintgram. Todas as quatro dá para conferir direto no código-fonte, e todas as quatro estão erradas.

  • "O Python 3.12 removeu o distutils, então o Osintgram não instala." O setup.py do prettytable 0.7.2 começa com from setuptools import setup. Não há import de distutils em lugar nenhum dele, e o build isolation padrão do pip provisiona o próprio setuptools. O issue tracker inteiro tem uma única menção a distutils, e o traceback real daquela issue é um erro de expiração de cookie.
  • "Você precisa de geckodriver, Selenium ou Pillow." Fazer grep em src/Osintgram.py (o motor inteiro, todos os seus 60.586 bytes) por selenium, geckodriver, webdriver, Pillow ou PIL retorna zero resultados. Não existe camada de automação de navegador: a ferramenta fala HTTP com a API mobile privada do Instagram, e com a HikerAPI via httpx. Os downloads usam urllib.request.urlretrieve.
  • "É só rodar sudo apt install osintgram." O Debian não empacota o Osintgram, e o catálogo de ferramentas do Kali também não. Não existe pacote no PyPI tampouco, então clonar o repositório é o único canal de distribuição.
  • "Edite o config.py e coloque suas credenciais lá." Não existe config.py na raiz do repositório. Existe o src/config.py, que é código e você não edita; as credenciais moram em config/credentials.ini.

Tem um quinto: python3 main.py sozinho não inicia nada. O argparse declara id como posicional obrigatório, então o que você recebe é usage: main.py [-h] [-C] [-j] [-f] [-c COMMAND] [-o OUTPUT] id e uma saída. O Osintgram não pode ser iniciado sem um nome de usuário alvo.

Instalou, mas o login falha

A falha de login é o maior bloqueio prático em 2026, e ela não é um problema de instalação. Sua instalação terminou no momento em que o pip concluiu e a verificação de import passou. Tudo que é impresso depois de Attempt to login... pertence ao Instagram.

A issue #2627, aberta em 4 de março de 2026, relata ClientError checkpoint_required com um checkpoint_url apontando para https://i.instagram.com/web/unsupported_version/: é o Instagram rejeitando a versão de API da biblioteca, não a sua senha. A issue #2630 (2 de abril de 2026) relata ClientError Bad Request: block_eu_user_login_in_old_app. O autor do PR #2660 descreve a resposta bad_password como "actually a bot detection, not wrong password" (na verdade uma detecção de bot, não senha errada). Nenhum comando do pip conserta nada disso; o quadro completo está em O Osintgram ainda funciona em 2026?.

Se em vez disso você conseguiu um shell funcionando, a próxima coisa que você quer é a referência de comandos: o que cada comando devolve, onde a saída vai parar e quais deles te fazem levar throttling. Isso está em como usar o Osintgram. Se o seu alvo for privado, leia antes o que o Osintgram pode e não pode fazer nesse caso.

Perguntas frequentes

O Osintgram é uma ferramenta OSINT independente e não tem qualquer vínculo com o Instagram ou a Meta. Estes guias descrevem apenas software de código aberto publicamente documentado e pesquisa em fontes abertas. Use essas técnicas de forma legal, sobre alvos que você esteja autorizado a investigar, e nunca para assediar ou vigiar pessoas.