Community transforms for OGI, an open source OSINT and link analysis tool.
Each directory under transforms/ is an independently installable transform. The OGI CLI and Transform Hub UI read index.json (auto-generated on each merge) to discover what's available.
Use the CLI from the OGI backend project:
cd backend
uv sync
uv run ogi transform search shodan
uv run ogi transform install shodan-host-lookupOr use the Transform Hub UI inside OGI.
Community transforms in this registry inherit OGI's host-side transform cap overrides. Operators can centrally clamp or remove common max settings such as max_results, max_urls, max_links, max_content_chars, or timeout_seconds with the backend env var:
OGI_TRANSFORM_SETTING_MAX_OVERRIDES=max_results=50,max_urls=25,max_links=40To remove a cap in a local deployment:
OGI_TRANSFORM_SETTING_MAX_OVERRIDES=max_results=none,max_content_chars=noneThis is configured in the main OGI app, not in this registry repo.
| Category | Transforms |
|---|---|
| DNS | domain-to-ip, domain-to-mx, domain-to-ns, ip-to-domain, whois-lookup |
| Certificates | domain-to-certs, cert-transparency |
| domain-to-emails, email-to-domain | |
| IP | ip-to-asn, ip-to-geolocation |
| Social | username-search |
| Hash | hash-lookup |
| Web | domain-to-urls, url-to-headers, url-to-links, url-to-content, content-to-iocs |
| Infrastructure | organization-to-team-members |
- Fork this repo
- Add your transform under
transforms/<category>/<slug>/ - Include
plugin.yaml,README.md, andtransforms/*.py - Declare required secrets in
api_keys_required, nottransform_settings - Describe the transform with
long_description,when_to_use,limitations, andexample_use_cases - Open a PR - CI validates automatically
OGI shows an info icon beside every transform in its sidebar. Clicking it opens a dialog built from four optional manifest fields, so analysts can tell whether a transform fits their investigation before spending an API credit on it:
| Field | What belongs there |
|---|---|
long_description |
What the transform actually does and which entities it emits |
when_to_use |
The situation it is right for, and which transform to reach for instead when it is not |
limitations |
Rate limits, staleness, coverage gaps, false positives - whatever would otherwise surprise someone reading the results |
example_use_cases |
Up to eight short, concrete scenarios |
Your README.md is installed alongside the transform and offered in the same
dialog as the deeper reference, so the manifest fields should still stand on
their own.
When adding capped settings, prefer common names like max_results, max_urls, max_links, max_content_chars, or timeout_seconds unless the setting is genuinely transform-specific. That keeps operator-side overrides predictable across the ecosystem.
See CONTRIBUTING.md for the full guide.
AGPLv3