gustavo-gkmi/anxwritter
GitHub: gustavo-gkmi/anxwritter
一款用于通过 Python、JSON 或 YAML 程序化生成 i2 Analyst's Notebook (.anx) 图表文件的 Python 库,解决手动拖拽实体和 CSV 导入向导带来的效率瓶颈。
Stars: 0 | Forks: 1
# anxwritter
专为执法人员、OSINT 从业者和情报分析师设计,满足他们通过程序化方式从案件数据、爬虫或 ETL pipeline 生成 i2 Analyst's Notebook 图表的需求,提供可复用的组织级默认配置,无需手动拖拽实体。
使用 Python、JSON 或 YAML 编写 i2 Analyst's Notebook Exchange (`.anx`) 文件。
输出文件可通过 **File > Open** 在 i2 ANB 9+ 中直接打开——无需导入向导,无需中间 CSV。`.anx` 文件将整个图表以 XML 形式嵌入。
**状态:** 积极开发中。请参阅 [CHANGELOG.md](https://github.com/gustavo-gkmi/anxwritter/blob/main/CHANGELOG.md) 了解各版本之间的破坏性变更。API 稳定化目标定于 2.0 版本。
## 安装
```
# 作为库 —— 在你自己的代码中导入
pip install anxwritter
# 仅作为命令行工具(隔离的 venv,无环境冲突)
pipx install anxwritter
```
使用 [uv](https://docs.astral.sh/uv/):
```
# 添加到 uv 管理的项目
uv add anxwritter
# 作为 CLI 工具全局安装
uv tool install anxwritter
# 不安装直接运行
uvx anxwritter chart.yaml -o my_chart.anx
```
需要 Python 3.10+。
## 快速示例
```
from anxwritter import ANXChart
chart = ANXChart()
chart.add_icon(id='Alice', type='Person', color='Blue')
chart.add_icon(id='Bob', type='Person', color='Red')
chart.add_link(
from_id='Alice', to_id='Bob',
type='Telephone Call', arrow='->',
date='2024-01-15',
)
chart.to_anx('output/my_chart')
```
这将写入 `output/my_chart.anx`。在 ANB 中打开它即可。
### YAML + CLI
```
# chart.yaml
entities:
icons:
- { id: Alice, type: Person, color: Blue }
- { id: Bob, type: Person, color: Red }
links:
- { from_id: Alice, to_id: Bob, type: Telephone Call, arrow: '->', date: '2024-01-15' }
```
```
anxwritter chart.yaml -o output/my_chart.anx
```
## 功能概览
- **地理位置定位** — 将实体属性映射到经纬度,用于画布布局和/或 ANB Esri Maps
- **组织级配置文件** — 将实体类型、链接类型、属性类和调色板与每张图表的数据分离;支持带有追加并去重或整体替换语义的分层配置
- **语义类型** — 全面支持 `lcx:LibraryCatalogue` 及自定义类型扩展;支持按实例覆盖
- **自动布局** — 几何布局(圆形、网格、径向、随机)以及拓扑感知的力导向布局:Fruchterman-Reingold、ForceAtlas2、整齐树形(Reingold-Tilford)。手动设置的 `x`/`y` 始终优先;被固定的实体充当锚点
- **自动着色** — 在实体间分配 HSV 色相;链接颜色跟随目标实体变化
- **CLI** — `anxwritter [--config org.yaml ...] data.{json,yaml} -o out.anx`,通过 `--show-config` 查看来源,支持 `--geo-data` 进行外部地理查询
- **三种输入形式** — Python 对象、JSON 或 YAML;所有途径均产生相同的输出
- **类型化 dataclass API** — `Icon`、`Box`、`Circle`、`ThemeLine`、`EventFrame`、`TextBlock`、`Label`、`Link`、`Card`
- **数据校验** — 在写入文件前的一次遍历中收集所有错误
## 全面定制 ANB 暴露的配置
没有固定的目录——ANB 中每一个可配置的表面都由您定义:
- **实体类型和链接类型** — 名称、图标、颜色、阴影、语义类型绑定
- **属性类** — 类型、前缀/后缀、小数位数、字体、合并行为、图标、可见性
- **调色板** — 您自己的“从调色板插入”面板,带有分组类型和预填充的属性条目
- **图例** — 8 种项目类型(图标、链接、线条、字体、文本、属性、时区、图标框架),具有完整样式
- **颜色** — 40 种命名颜色、十六进制、COLORREF 或自动分配的 HSV,并带有跟随实体的链接颜色
- **强度、等级、来源类型、日期时间格式、语义类型** — 均可配置
在 `config.yaml` 中定义一次您的默认配置,在其上层叠加覆盖设置,即可在每张图表中复用。
## 文档
- [入门指南](https://github.com/gustavo-gkmi/anxwritter/blob/main/docs/getting-started.md) — 安装、第一张图表、下一步去哪
- [分析师指南](https://github.com/gustavo-gkmi/anxwritter/blob/main/docs/guide/analyst-guide.md) — 通过实用示例介绍每一项功能
- [参考文档](https://github.com/gustavo-gkmi/anxwritter/tree/main/docs/reference) — 逐字段的 API 参考
## 许可证
MIT — 详见 [LICENSE](https://github.com/gustavo-gkmi/anxwritter/blob/main/LICENSE)。版权所有 (c) 2024-2026 [gustavo-gkmi](https://github.com/gustavo-gkmi)。
标签:ESC4, ETL流程, Homebrew安装, i2 Analyst's Notebook, JSON, OSINT, pip, pipx, uv, XML生成, YAML, 侦查辅助, 关联分析, 刑侦技术, 包管理, 可视化图表, 图形生成, 图谱可视化, 图谱构建, 地理空间定位, 威胁情报, 安全库, 开发者工具, 情报共享, 情报分析, 执法机构, 数据转换, 流量捕获, 网络拓扑, 网络诊断, 脚本编程, 调查取证, 逆向工具