| Requirement | Notes |
|---|---|
| Docker | Recommended for production-like use; Docker Desktop for scripts/up-desktop.sh |
| Python 3.11 | For local dev without Docker |
| Poetry | Dependency management (pyproject.toml) |
| pre-commit | Optional; linters and formatters on commit |
git clone https://github.com/OSINT-for-Ukraine/groupint.git
cd groupintCopy the example file and fill in your values:
cp .env.example .envRequired for Telegram scraping:
TELEGRAM_PHONE— international format, e.g.+1234567890TELEGRAM_API_ID— from my.telegram.org/appsTELEGRAM_API_HASH
Required for the incident LLM pipeline (optional if you only use the main scraper):
ANTHROPIC_API_KEYorOPENAI_API_KEY(seeINCIDENT_LLM_PROVIDER)GOOGLE_MAPS_API_KEY— optional; Nominatim used as fallback for geocoding
See Configuration for the full variable list.
Create .streamlit/secrets.toml in the project root (do not commit to git):
[telegram]
phone = "+1234567890"
api_id = "12345678"
api_hash = "your_api_hash_here"The main UI pre-fills these fields. The incident worker can use the same values via .env or shared Docker volumes.
Optional [incidents] and [atlos] sections are documented in Configuration.
Groupint only:
chmod +x scripts/up-desktop.sh
./scripts/up-desktop.shGroupint + local Atlos (for incident export):
chmod +x scripts/up-full.sh
./scripts/up-full.shSee Docker: desktop stack and Docker: full stack with Atlos.
poetry install
poetry run streamlit run interface.pyDefault URL: http://localhost:8501 (unless you configure another port).
You need a running Neo4j instance and matching NEO4J_URI / credentials in .env.
Before first use, obtain api_id and api_hash for your phone number. See Credentials and API keys.
docker ps --filter name=groupint
curl -sf http://localhost:18501/_stcore/healthThen connect Telegram in the UI: Sessions and authentication.
- Main application — scrape your first group
- Troubleshooting — if ports or auth fail