convoviz 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {convoviz-0.3.0 → convoviz-0.3.1}/PKG-INFO +12 -17
- {convoviz-0.3.0 → convoviz-0.3.1}/README.md +8 -12
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/__init__.py +10 -1
- convoviz-0.3.1/convoviz/analysis/__init__.py +22 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/pipeline.py +15 -3
- {convoviz-0.3.0 → convoviz-0.3.1}/pyproject.toml +9 -4
- convoviz-0.3.0/convoviz/analysis/__init__.py +0 -9
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/__main__.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/analysis/graphs.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/analysis/wordcloud.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/colormaps.txt +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/AmaticSC-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/ArchitectsDaughter-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/BebasNeue-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Borel-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Courgette-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/CroissantOne-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Handjet-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/IndieFlower-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Kalam-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Lobster-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/MartianMono-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/MartianMono-Thin.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Montserrat-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Mooli-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Pacifico-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/PlayfairDisplay-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Raleway-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoMono-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoMono-Thin.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoSlab-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoSlab-Thin.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Ruwudu-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Sacramento-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/SedgwickAveDisplay-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/ShadowsIntoLight-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/TitilliumWeb-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Yellowtail-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/YsabeauOffice-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/YsabeauSC-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/YsabeauSC-Thin.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Zeyada-Regular.ttf +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/stopwords.txt +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/cli.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/config.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/exceptions.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/interactive.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/__init__.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/assets.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/loaders.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/writers.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/__init__.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/collection.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/conversation.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/message.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/node.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/py.typed +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/renderers/__init__.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/renderers/markdown.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/renderers/yaml.py +0 -0
- {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: convoviz
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Get analytics and visualizations on your ChatGPT data!
|
|
5
5
|
Keywords: markdown,chatgpt,openai,visualization,analytics,json,export,data-analysis,obsidian
|
|
6
6
|
Author: Mohamed Cheikh Sidiya
|
|
@@ -9,19 +9,18 @@ License-Expression: MIT
|
|
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
-
Requires-Dist: matplotlib>=3.9.4
|
|
13
|
-
Requires-Dist: nltk>=3.9.2
|
|
14
12
|
Requires-Dist: orjson>=3.11.5
|
|
15
|
-
Requires-Dist: pillow>=11.3.0
|
|
16
13
|
Requires-Dist: pydantic>=2.12.5
|
|
17
14
|
Requires-Dist: pydantic-settings>=2.7.0
|
|
18
15
|
Requires-Dist: questionary>=2.1.1
|
|
19
16
|
Requires-Dist: rich>=14.2.0
|
|
20
17
|
Requires-Dist: tqdm>=4.67.1
|
|
21
18
|
Requires-Dist: typer>=0.21.0
|
|
22
|
-
Requires-Dist:
|
|
19
|
+
Requires-Dist: nltk>=3.9.2 ; extra == 'viz'
|
|
20
|
+
Requires-Dist: wordcloud>=1.9.5 ; extra == 'viz'
|
|
23
21
|
Requires-Python: >=3.12
|
|
24
22
|
Project-URL: Repository, https://github.com/mohamed-chs/chatgpt-history-export-to-md
|
|
23
|
+
Provides-Extra: viz
|
|
25
24
|
Description-Content-Type: text/markdown
|
|
26
25
|
|
|
27
26
|
# Convoviz 📊: Visualize your entire ChatGPT data
|
|
@@ -49,23 +48,19 @@ See examples [here](demo).
|
|
|
49
48
|
|
|
50
49
|
### 2. Install the tool 🛠
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
With uv ([astral-sh/uv](https://github.com/astral-sh/uv?tab=readme-ov-file#highlights)):
|
|
53
52
|
|
|
54
53
|
```bash
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
You can install it with uv (Recommended):
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
uv tool install convoviz
|
|
54
|
+
uv tool install convoviz[viz]
|
|
62
55
|
```
|
|
63
56
|
|
|
64
57
|
or pipx:
|
|
65
58
|
```bash
|
|
66
|
-
pipx install convoviz
|
|
59
|
+
pipx install convoviz[viz]
|
|
67
60
|
```
|
|
68
61
|
|
|
62
|
+
The `[viz]` extra includes graphs and word clouds. If you only need markdown conversion, you can skip it for a faster install (`uv tool install convoviz`).
|
|
63
|
+
|
|
69
64
|
### 3. Run the tool 🏃♂️
|
|
70
65
|
|
|
71
66
|
Simply run the command and follow the prompts:
|
|
@@ -137,12 +132,12 @@ It should(?) also work as library, so you can import and use the models and func
|
|
|
137
132
|
|
|
138
133
|
### Offline / reproducible runs
|
|
139
134
|
|
|
140
|
-
|
|
135
|
+
Word clouds use NLTK stopwords. If you're offline and NLTK data isn't installed yet, pre-download it:
|
|
141
136
|
|
|
142
137
|
```bash
|
|
143
|
-
|
|
138
|
+
python -c "import nltk; nltk.download('stopwords')"
|
|
144
139
|
```
|
|
145
140
|
|
|
146
141
|
### Bookmarklet
|
|
147
142
|
|
|
148
|
-
There
|
|
143
|
+
There's also a JavaScript bookmarklet flow under `js/` (experimental) for exporting additional conversation data outside the official ZIP export.
|
|
@@ -23,23 +23,19 @@ See examples [here](demo).
|
|
|
23
23
|
|
|
24
24
|
### 2. Install the tool 🛠
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
With uv ([astral-sh/uv](https://github.com/astral-sh/uv?tab=readme-ov-file#highlights)):
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
You can install it with uv (Recommended):
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
uv tool install convoviz
|
|
29
|
+
uv tool install convoviz[viz]
|
|
36
30
|
```
|
|
37
31
|
|
|
38
32
|
or pipx:
|
|
39
33
|
```bash
|
|
40
|
-
pipx install convoviz
|
|
34
|
+
pipx install convoviz[viz]
|
|
41
35
|
```
|
|
42
36
|
|
|
37
|
+
The `[viz]` extra includes graphs and word clouds. If you only need markdown conversion, you can skip it for a faster install (`uv tool install convoviz`).
|
|
38
|
+
|
|
43
39
|
### 3. Run the tool 🏃♂️
|
|
44
40
|
|
|
45
41
|
Simply run the command and follow the prompts:
|
|
@@ -111,12 +107,12 @@ It should(?) also work as library, so you can import and use the models and func
|
|
|
111
107
|
|
|
112
108
|
### Offline / reproducible runs
|
|
113
109
|
|
|
114
|
-
|
|
110
|
+
Word clouds use NLTK stopwords. If you're offline and NLTK data isn't installed yet, pre-download it:
|
|
115
111
|
|
|
116
112
|
```bash
|
|
117
|
-
|
|
113
|
+
python -c "import nltk; nltk.download('stopwords')"
|
|
118
114
|
```
|
|
119
115
|
|
|
120
116
|
### Bookmarklet
|
|
121
117
|
|
|
122
|
-
There
|
|
118
|
+
There's also a JavaScript bookmarklet flow under `js/` (experimental) for exporting additional conversation data outside the official ZIP export.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Convoviz - ChatGPT data visualization and export tool."""
|
|
2
2
|
|
|
3
|
-
from convoviz import
|
|
3
|
+
from convoviz import config, io, models, renderers, utils
|
|
4
4
|
from convoviz.config import ConvovizConfig, get_default_config
|
|
5
5
|
from convoviz.models import Conversation, ConversationCollection, Message, Node
|
|
6
6
|
from convoviz.pipeline import run_pipeline
|
|
@@ -23,3 +23,12 @@ __all__ = [
|
|
|
23
23
|
"get_default_config",
|
|
24
24
|
"run_pipeline",
|
|
25
25
|
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def __getattr__(name: str):
|
|
29
|
+
"""Lazy import for optional submodules like analysis."""
|
|
30
|
+
if name == "analysis":
|
|
31
|
+
from convoviz import analysis
|
|
32
|
+
|
|
33
|
+
return analysis
|
|
34
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Data analysis and visualization for convoviz.
|
|
2
|
+
|
|
3
|
+
Requires the [viz] extra: pip install convoviz[viz]
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"generate_week_barplot",
|
|
8
|
+
"generate_wordcloud",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def __getattr__(name: str):
|
|
13
|
+
"""Lazy import for visualization functions requiring optional dependencies."""
|
|
14
|
+
if name == "generate_week_barplot":
|
|
15
|
+
from convoviz.analysis.graphs import generate_week_barplot
|
|
16
|
+
|
|
17
|
+
return generate_week_barplot
|
|
18
|
+
if name == "generate_wordcloud":
|
|
19
|
+
from convoviz.analysis.wordcloud import generate_wordcloud
|
|
20
|
+
|
|
21
|
+
return generate_wordcloud
|
|
22
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -6,7 +6,7 @@ from shutil import rmtree
|
|
|
6
6
|
from rich.console import Console
|
|
7
7
|
|
|
8
8
|
from convoviz.config import ConvovizConfig, OutputKind
|
|
9
|
-
from convoviz.exceptions import InvalidZipError
|
|
9
|
+
from convoviz.exceptions import ConfigurationError, InvalidZipError
|
|
10
10
|
from convoviz.io.loaders import (
|
|
11
11
|
find_latest_bookmarklet_json,
|
|
12
12
|
load_collection_from_json,
|
|
@@ -122,7 +122,13 @@ def run_pipeline(config: ConvovizConfig) -> None:
|
|
|
122
122
|
# Generate graphs (if selected)
|
|
123
123
|
if OutputKind.GRAPHS in selected_outputs:
|
|
124
124
|
# Lazy import to allow markdown-only usage without matplotlib
|
|
125
|
-
|
|
125
|
+
try:
|
|
126
|
+
from convoviz.analysis.graphs import generate_graphs
|
|
127
|
+
except ModuleNotFoundError as e:
|
|
128
|
+
raise ConfigurationError(
|
|
129
|
+
"Graph generation requires matplotlib. "
|
|
130
|
+
"Install with: pip install convoviz[viz]"
|
|
131
|
+
) from e
|
|
126
132
|
|
|
127
133
|
graph_folder = output_folder / "Graphs"
|
|
128
134
|
graph_folder.mkdir(parents=True, exist_ok=True)
|
|
@@ -140,7 +146,13 @@ def run_pipeline(config: ConvovizConfig) -> None:
|
|
|
140
146
|
# Generate word clouds (if selected)
|
|
141
147
|
if OutputKind.WORDCLOUDS in selected_outputs:
|
|
142
148
|
# Lazy import to allow markdown-only usage without wordcloud/nltk
|
|
143
|
-
|
|
149
|
+
try:
|
|
150
|
+
from convoviz.analysis.wordcloud import generate_wordclouds
|
|
151
|
+
except ModuleNotFoundError as e:
|
|
152
|
+
raise ConfigurationError(
|
|
153
|
+
"Word cloud generation requires wordcloud and nltk. "
|
|
154
|
+
"Install with: pip install convoviz[viz]"
|
|
155
|
+
) from e
|
|
144
156
|
|
|
145
157
|
wordcloud_folder = output_folder / "Word-Clouds"
|
|
146
158
|
wordcloud_folder.mkdir(parents=True, exist_ok=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "convoviz"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.1"
|
|
4
4
|
description = "Get analytics and visualizations on your ChatGPT data!"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
keywords = [
|
|
@@ -18,16 +18,18 @@ authors = [
|
|
|
18
18
|
{ name = "Mohamed Cheikh Sidiya", email = "mohamedcheikhsidiya77@gmail.com" }
|
|
19
19
|
]
|
|
20
20
|
dependencies = [
|
|
21
|
-
"matplotlib>=3.9.4",
|
|
22
|
-
"nltk>=3.9.2",
|
|
23
21
|
"orjson>=3.11.5",
|
|
24
|
-
"pillow>=11.3.0",
|
|
25
22
|
"pydantic>=2.12.5",
|
|
26
23
|
"pydantic-settings>=2.7.0",
|
|
27
24
|
"questionary>=2.1.1",
|
|
28
25
|
"rich>=14.2.0",
|
|
29
26
|
"tqdm>=4.67.1",
|
|
30
27
|
"typer>=0.21.0",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.optional-dependencies]
|
|
31
|
+
viz = [
|
|
32
|
+
"nltk>=3.9.2",
|
|
31
33
|
"wordcloud>=1.9.5",
|
|
32
34
|
]
|
|
33
35
|
|
|
@@ -66,6 +68,9 @@ dev = [
|
|
|
66
68
|
"ruff>=0.14.10",
|
|
67
69
|
"ty>=0.0.11",
|
|
68
70
|
"types-tqdm>=4.67.0.20250809",
|
|
71
|
+
# Viz extras for testing (wordcloud pulls in matplotlib + pillow)
|
|
72
|
+
"nltk>=3.9.2",
|
|
73
|
+
"wordcloud>=1.9.5",
|
|
69
74
|
]
|
|
70
75
|
|
|
71
76
|
[tool.ruff]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|