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, 侦查辅助, 关联分析, 刑侦技术, 包管理, 可视化图表, 图形生成, 图谱可视化, 图谱构建, 地理空间定位, 威胁情报, 安全库, 开发者工具, 情报共享, 情报分析, 执法机构, 数据转换, 流量捕获, 网络拓扑, 网络诊断, 脚本编程, 调查取证, 逆向工具