flashstudio 0.1.2__tar.gz → 0.1.4__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.

Potentially problematic release.


This version of flashstudio might be problematic. Click here for more details.

Files changed (125) hide show
  1. flashstudio-0.1.4/PKG-INFO +371 -0
  2. flashstudio-0.1.4/README.md +334 -0
  3. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/__init__.py +1 -1
  4. flashstudio-0.1.4/flashstudio/app.py +194 -0
  5. flashstudio-0.1.4/flashstudio/components/project_manager.py +490 -0
  6. flashstudio-0.1.4/flashstudio/components/sidebar.py +87 -0
  7. flashstudio-0.1.4/flashstudio/components/styles.py +341 -0
  8. flashstudio-0.1.4/flashstudio/components/wizard.py +45 -0
  9. flashstudio-0.1.4/flashstudio/components/zone_drawer/__init__.py +177 -0
  10. flashstudio-0.1.4/flashstudio/constants.py +245 -0
  11. flashstudio-0.1.4/flashstudio/core/__init__.py +3 -0
  12. flashstudio-0.1.4/flashstudio/core/constants.py +3 -0
  13. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/launcher.py +33 -7
  14. flashstudio-0.1.4/flashstudio/pages/__init__.py +8 -0
  15. flashstudio-0.1.4/flashstudio/pages/dashboard/__init__.py +3 -0
  16. flashstudio-0.1.4/flashstudio/pages/dashboard/_common.py +10 -0
  17. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/__init__.py +3 -0
  18. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/metrics.py +66 -0
  19. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/pipeline_status.py +35 -0
  20. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/project_banner.py +23 -0
  21. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/quick_actions.py +28 -0
  22. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/recent_runs.py +99 -0
  23. flashstudio-0.1.4/flashstudio/pages/dashboard/overview/tab.py +35 -0
  24. flashstudio-0.1.4/flashstudio/pages/dashboard/page.py +17 -0
  25. flashstudio-0.1.4/flashstudio/pages/data/__init__.py +3 -0
  26. flashstudio-0.1.4/flashstudio/pages/data/_common.py +107 -0
  27. flashstudio-0.1.4/flashstudio/pages/data/download/__init__.py +3 -0
  28. flashstudio-0.1.4/flashstudio/pages/data/download/tab.py +75 -0
  29. flashstudio-0.1.4/flashstudio/pages/data/helpers.py +290 -0
  30. flashstudio-0.1.4/flashstudio/pages/data/page.py +50 -0
  31. flashstudio-0.1.4/flashstudio/pages/data/preview/__init__.py +3 -0
  32. flashstudio-0.1.4/flashstudio/pages/data/preview/tab.py +139 -0
  33. flashstudio-0.1.4/flashstudio/pages/data/upload/__init__.py +3 -0
  34. flashstudio-0.1.4/flashstudio/pages/data/upload/tab.py +160 -0
  35. flashstudio-0.1.4/flashstudio/pages/data/verify/__init__.py +3 -0
  36. flashstudio-0.1.4/flashstudio/pages/data/verify/tab.py +107 -0
  37. flashstudio-0.1.4/flashstudio/pages/export/__init__.py +3 -0
  38. flashstudio-0.1.4/flashstudio/pages/export/page.py +54 -0
  39. flashstudio-0.1.4/flashstudio/pages/export/weights/__init__.py +4 -0
  40. flashstudio-0.1.4/flashstudio/pages/export/weights/exporter.py +60 -0
  41. flashstudio-0.1.4/flashstudio/pages/export/weights/settings.py +75 -0
  42. flashstudio-0.1.4/flashstudio/pages/inference/__init__.py +3 -0
  43. flashstudio-0.1.4/flashstudio/pages/inference/_common.py +76 -0
  44. flashstudio-0.1.4/flashstudio/pages/inference/data/__init__.py +3 -0
  45. flashstudio-0.1.4/flashstudio/pages/inference/data/tab.py +121 -0
  46. flashstudio-0.1.4/flashstudio/pages/inference/model/__init__.py +3 -0
  47. flashstudio-0.1.4/flashstudio/pages/inference/model/tab.py +60 -0
  48. flashstudio-0.1.4/flashstudio/pages/inference/page.py +42 -0
  49. flashstudio-0.1.4/flashstudio/pages/inference/run/__init__.py +3 -0
  50. flashstudio-0.1.4/flashstudio/pages/inference/run/detection.py +133 -0
  51. flashstudio-0.1.4/flashstudio/pages/inference/run/tab.py +159 -0
  52. flashstudio-0.1.4/flashstudio/pages/inference/run/video.py +195 -0
  53. flashstudio-0.1.4/flashstudio/pages/inference/solution/__init__.py +3 -0
  54. flashstudio-0.1.4/flashstudio/pages/inference/solution/tab.py +121 -0
  55. flashstudio-0.1.4/flashstudio/pages/model/__init__.py +3 -0
  56. flashstudio-0.1.4/flashstudio/pages/model/_common.py +3 -0
  57. flashstudio-0.1.4/flashstudio/pages/model/advanced/__init__.py +3 -0
  58. flashstudio-0.1.4/flashstudio/pages/model/advanced/tab.py +54 -0
  59. flashstudio-0.1.4/flashstudio/pages/model/architecture/__init__.py +3 -0
  60. flashstudio-0.1.4/flashstudio/pages/model/architecture/tab.py +90 -0
  61. flashstudio-0.1.4/flashstudio/pages/model/augment/__init__.py +3 -0
  62. flashstudio-0.1.4/flashstudio/pages/model/augment/tab.py +18 -0
  63. flashstudio-0.1.4/flashstudio/pages/model/hyperparams/__init__.py +4 -0
  64. flashstudio-0.1.4/flashstudio/pages/model/hyperparams/tab.py +89 -0
  65. flashstudio-0.1.4/flashstudio/pages/model/page.py +30 -0
  66. flashstudio-0.1.4/flashstudio/pages/model/utils/__init__.py +3 -0
  67. flashstudio-0.1.4/flashstudio/pages/model/utils/config.py +27 -0
  68. flashstudio-0.1.4/flashstudio/pages/training/__init__.py +3 -0
  69. flashstudio-0.1.4/flashstudio/pages/training/_common.py +24 -0
  70. flashstudio-0.1.4/flashstudio/pages/training/launch/__init__.py +3 -0
  71. flashstudio-0.1.4/flashstudio/pages/training/launch/controls.py +84 -0
  72. flashstudio-0.1.4/flashstudio/pages/training/launch/dialogs.py +247 -0
  73. flashstudio-0.1.4/flashstudio/pages/training/launch/preflight.py +66 -0
  74. flashstudio-0.1.4/flashstudio/pages/training/launch/runner.py +429 -0
  75. flashstudio-0.1.4/flashstudio/pages/training/launch/tab.py +130 -0
  76. flashstudio-0.1.4/flashstudio/pages/training/monitor/__init__.py +3 -0
  77. flashstudio-0.1.4/flashstudio/pages/training/monitor/checkpoints.py +96 -0
  78. flashstudio-0.1.4/flashstudio/pages/training/monitor/curves.py +113 -0
  79. flashstudio-0.1.4/flashstudio/pages/training/monitor/dashboard.py +129 -0
  80. flashstudio-0.1.4/flashstudio/pages/training/monitor/gt_verification.py +122 -0
  81. flashstudio-0.1.4/flashstudio/pages/training/monitor/log_viewer.py +43 -0
  82. flashstudio-0.1.4/flashstudio/pages/training/monitor/parsers.py +253 -0
  83. flashstudio-0.1.4/flashstudio/pages/training/monitor/run_meta.py +165 -0
  84. flashstudio-0.1.4/flashstudio/pages/training/monitor/tab.py +142 -0
  85. flashstudio-0.1.4/flashstudio/pages/training/monitor/visualizations.py +52 -0
  86. flashstudio-0.1.4/flashstudio/pages/training/page.py +128 -0
  87. flashstudio-0.1.4/flashstudio/utils/__init__.py +152 -0
  88. flashstudio-0.1.4/flashstudio/utils/config.py +104 -0
  89. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/utils/device.py +12 -3
  90. flashstudio-0.1.4/flashstudio/utils/filesystem.py +67 -0
  91. flashstudio-0.1.4/flashstudio/utils/jobs.py +95 -0
  92. flashstudio-0.1.4/flashstudio/utils/training_hooks.py +266 -0
  93. flashstudio-0.1.4/flashstudio.egg-info/PKG-INFO +371 -0
  94. flashstudio-0.1.4/flashstudio.egg-info/SOURCES.txt +106 -0
  95. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio.egg-info/requires.txt +5 -0
  96. flashstudio-0.1.4/flashstudio.egg-info/top_level.txt +2 -0
  97. {flashstudio-0.1.2 → flashstudio-0.1.4}/pyproject.toml +20 -5
  98. flashstudio-0.1.4/tests/test_app.py +120 -0
  99. flashstudio-0.1.4/tests/test_cli.py +37 -0
  100. flashstudio-0.1.4/tests/test_constants.py +172 -0
  101. flashstudio-0.1.4/tests/test_launcher.py +60 -0
  102. flashstudio-0.1.4/tests/test_pipeline_flow.py +771 -0
  103. flashstudio-0.1.4/tests/test_save_dir_compat.py +685 -0
  104. flashstudio-0.1.2/PKG-INFO +0 -159
  105. flashstudio-0.1.2/README.md +0 -127
  106. flashstudio-0.1.2/flashstudio/app.py +0 -64
  107. flashstudio-0.1.2/flashstudio/components/sidebar.py +0 -45
  108. flashstudio-0.1.2/flashstudio/components/styles.py +0 -273
  109. flashstudio-0.1.2/flashstudio/components/wizard.py +0 -46
  110. flashstudio-0.1.2/flashstudio/pages/__init__.py +0 -0
  111. flashstudio-0.1.2/flashstudio/pages/dashboard.py +0 -168
  112. flashstudio-0.1.2/flashstudio/pages/data.py +0 -272
  113. flashstudio-0.1.2/flashstudio/pages/export.py +0 -212
  114. flashstudio-0.1.2/flashstudio/pages/inference.py +0 -1112
  115. flashstudio-0.1.2/flashstudio/pages/model.py +0 -370
  116. flashstudio-0.1.2/flashstudio/pages/training.py +0 -672
  117. flashstudio-0.1.2/flashstudio/utils/__init__.py +0 -0
  118. flashstudio-0.1.2/flashstudio.egg-info/PKG-INFO +0 -159
  119. flashstudio-0.1.2/flashstudio.egg-info/SOURCES.txt +0 -25
  120. flashstudio-0.1.2/flashstudio.egg-info/top_level.txt +0 -1
  121. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/cli.py +0 -0
  122. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/components/__init__.py +0 -0
  123. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio.egg-info/dependency_links.txt +0 -0
  124. {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio.egg-info/entry_points.txt +0 -0
  125. {flashstudio-0.1.2 → flashstudio-0.1.4}/setup.cfg +0 -0
@@ -0,0 +1,371 @@
1
+ Metadata-Version: 2.4
2
+ Name: flashstudio
3
+ Version: 0.1.4
4
+ Summary: Interactive Training & Inference UI for FlashDet — runs on Google Colab
5
+ Author: Gaurav14cs17
6
+ License: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/FlashVision/FlashStudio
8
+ Project-URL: Repository, https://github.com/FlashVision/FlashStudio
9
+ Keywords: object-detection,flashdet,training,inference,ui,colab
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
15
+ Requires-Python: >=3.10
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: streamlit>=1.28.0
18
+ Requires-Dist: plotly>=5.0
19
+ Requires-Dist: pandas>=1.5
20
+ Requires-Dist: pillow>=9.0
21
+ Requires-Dist: numpy>=1.21
22
+ Requires-Dist: pyngrok>=6.0
23
+ Requires-Dist: opencv-python>=4.5
24
+ Requires-Dist: pyyaml>=6.0
25
+ Requires-Dist: flashdet
26
+ Provides-Extra: full
27
+ Requires-Dist: pyngrok>=6.0; extra == "full"
28
+ Requires-Dist: torch>=2.0; extra == "full"
29
+ Requires-Dist: opencv-python>=4.5; extra == "full"
30
+ Requires-Dist: flashdet[export]; extra == "full"
31
+ Provides-Extra: colab
32
+ Requires-Dist: pyngrok>=6.0; extra == "colab"
33
+ Provides-Extra: dev
34
+ Requires-Dist: ruff; extra == "dev"
35
+ Requires-Dist: pytest; extra == "dev"
36
+ Requires-Dist: pytest-cov; extra == "dev"
37
+
38
+ <p align="center">
39
+ <img src="https://raw.githubusercontent.com/FlashVision/FlashStudio/main/assets/logo.png" width="200" alt="FlashStudio Logo">
40
+ </p>
41
+
42
+ <h1 align="center">FlashStudio</h1>
43
+
44
+ <p align="center">
45
+ <a href="https://pypi.org/project/flashstudio/"><img src="https://badge.fury.io/py/flashstudio.svg" alt="PyPI version"></a>
46
+ <img src="https://img.shields.io/badge/python-3.9+-blue.svg?logo=python&logoColor=white" alt="Python 3.9+">
47
+ <img src="https://img.shields.io/badge/Streamlit-UI-FF4B4B?logo=streamlit&logoColor=white" alt="Streamlit">
48
+ <img src="https://img.shields.io/badge/FlashDet-Powered-00CCFF?logo=lightning&logoColor=white" alt="FlashDet">
49
+ <img src="https://img.shields.io/badge/License-Apache%202.0-green.svg" alt="License">
50
+ </p>
51
+
52
+ <p align="center">
53
+ <b>Interactive Training & Inference UI for FlashDet — runs locally or on Google Colab with a Streamlit interface.</b>
54
+ </p>
55
+
56
+ <p align="center">
57
+ <img src="docs/mockups/flashstudio_streamlit_mockup.png" width="800" alt="FlashStudio UI"/>
58
+ </p>
59
+
60
+ ## Features
61
+
62
+ - 🏋️ **Training Dashboard** — Real-time monitoring with live loss curves, per-epoch visualizations, GT verification
63
+ - 🧠 **Model Config** — All 6 FlashDet sizes + YOLOv8/v9/v10/v11/YOLOX with accurate params
64
+ - 🔍 **Inference Pipeline** — 4-step wizard: Model → Data → Zone → Run (17 solutions, 6 trackers)
65
+ - 📤 **Export** — ONNX export with FP16 auto-generated weights
66
+ - 📦 **Data** — Native `flashdet download` datasets + custom upload (COCO/VOC/YOLO formats)
67
+ - 📊 **Dashboard** — Overview with recent training runs from workspace
68
+ - 🚀 **Colab Support** — ngrok tunneling for remote access
69
+
70
+ ---
71
+
72
+ ## UI Tour
73
+
74
+ ### Dashboard
75
+ Project overview with key metrics (GPU, Dataset, Model, mAP), pipeline status, quick actions, and recent training runs.
76
+
77
+ <p align="center">
78
+ <img src="demos/01_dashboard.gif" width="800" alt="Dashboard"/>
79
+ </p>
80
+
81
+ ### Data Management
82
+ Upload datasets (ZIP/TAR), download from `flashdet` registry, preview images with navigation, and verify annotations.
83
+
84
+ <p align="center">
85
+ <img src="demos/02_data.gif" width="800" alt="Data Management"/>
86
+ </p>
87
+
88
+ ### Model Configuration
89
+ Choose from 6 FlashDet sizes + YOLO variants. Configure hyperparameters, augmentations, and advanced settings (memory optimization, distributed training).
90
+
91
+ <p align="center">
92
+ <img src="demos/03_model.gif" width="800" alt="Model Configuration"/>
93
+ </p>
94
+
95
+ ### Training
96
+ Create experiments, launch training with preflight checks, and monitor runs with real-time curves, visualizations, ground truth, logs, and file browser.
97
+
98
+ <p align="center">
99
+ <img src="demos/04_training.gif" width="800" alt="Training"/>
100
+ </p>
101
+
102
+ ### Export
103
+ Export trained models to ONNX format with configurable opset, image size, and dynamic batching. Auto-detects saved weights from training.
104
+
105
+ <p align="center">
106
+ <img src="demos/05_export.gif" width="800" alt="Export"/>
107
+ </p>
108
+
109
+ ### Inference
110
+ Full inference pipeline with 17 built-in solutions (object counting, speed estimation, heatmaps, security alarms, etc.). Interactive zone drawing with Polygon, Rectangle, and Line tools.
111
+
112
+ <p align="center">
113
+ <img src="demos/06_inference.gif" width="800" alt="Inference"/>
114
+ </p>
115
+
116
+ ---
117
+
118
+ ## Installation
119
+
120
+ ### Step 1: Install FlashStudio
121
+
122
+ ```bash
123
+ pip install flashstudio
124
+ ```
125
+
126
+ ### Step 2: Install FlashDet (required for training/inference)
127
+
128
+ ```bash
129
+ pip install git+https://github.com/FlashVision/FlashDet.git
130
+ ```
131
+
132
+ ### Development install (from source)
133
+
134
+ ```bash
135
+ git clone https://github.com/FlashVision/FlashStudio.git
136
+ cd FlashStudio
137
+ pip install -e .
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Usage — Local Machine
143
+
144
+ ### Option 1: CLI
145
+
146
+ ```bash
147
+ flashstudio --port 8501
148
+ ```
149
+
150
+ ### Option 2: Streamlit directly
151
+
152
+ ```bash
153
+ cd FlashStudio
154
+ streamlit run flashstudio/app.py
155
+ ```
156
+
157
+ Then open **http://localhost:8501** in your browser.
158
+
159
+ ---
160
+
161
+ ## Usage — Google Colab
162
+
163
+ ### Step 1: Install packages
164
+
165
+ ```python
166
+ !pip install flashstudio
167
+ !pip install git+https://github.com/FlashVision/FlashDet.git
168
+ ```
169
+
170
+ ### Step 2: Get ngrok token (free, one-time setup)
171
+
172
+ FlashStudio uses [ngrok](https://ngrok.com) to create a public URL for the Streamlit UI in Colab.
173
+
174
+ 1. **Sign up** (free): https://dashboard.ngrok.com/signup
175
+ 2. **Get your auth token**: https://dashboard.ngrok.com/get-started/your-authtoken
176
+ 3. Copy the token (looks like `2xAbC1234_something...`)
177
+
178
+ ### Step 3: Launch
179
+
180
+ ```python
181
+ from flashstudio import launch
182
+
183
+ # Pass your ngrok token
184
+ launch(ngrok_token="YOUR_NGROK_TOKEN_HERE")
185
+ ```
186
+
187
+ Or set it as an environment variable:
188
+
189
+ ```python
190
+ import os
191
+ os.environ["NGROK_TOKEN"] = "YOUR_NGROK_TOKEN_HERE"
192
+
193
+ from flashstudio import launch
194
+ launch()
195
+ ```
196
+
197
+ ### Step 4: Open the URL
198
+
199
+ After launching, you'll see output like:
200
+
201
+ ```
202
+ ============================================================
203
+ FlashStudio is running!
204
+ Local: http://localhost:8501
205
+ Public: https://abc123.ngrok-free.app
206
+ ============================================================
207
+ ```
208
+
209
+ Click the **Public URL** to open FlashStudio in a new tab.
210
+
211
+ ---
212
+
213
+ ## Google Colab Notebooks (Ready to Use)
214
+
215
+ | Notebook | Description | Link |
216
+ |----------|-------------|------|
217
+ | Training | Train FlashDet models | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/FlashVision/FlashStudio/blob/main/notebooks/FlashStudio_Train.ipynb) |
218
+ | Inference | Run detection on images/video | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/FlashVision/FlashStudio/blob/main/notebooks/FlashStudio_Inference.ipynb) |
219
+
220
+ ---
221
+
222
+ ## Supported Models
223
+
224
+ | Model | Params | Best For |
225
+ |-------|--------|----------|
226
+ | FlashDet-Pico | ~298K | Edge / MCU |
227
+ | FlashDet-Nano | ~790K | Embedded / IoT |
228
+ | FlashDet-Small | ~1.8M | General purpose |
229
+ | FlashDet-Medium | ~3.6M | High accuracy |
230
+ | FlashDet-Large | ~5.8M | High accuracy |
231
+ | FlashDet-X | ~9.0M | Max accuracy / Server |
232
+ | YOLOv8/v9/v10/v11/YOLOX | Varies | General YOLO |
233
+
234
+ ---
235
+
236
+ ## Architecture
237
+
238
+ ```
239
+ FlashStudio/
240
+ ├── flashstudio/
241
+ │ ├── __init__.py # Package init + launch() export
242
+ │ ├── app.py # Main Streamlit app (wizard flow)
243
+ │ ├── launcher.py # Colab/local launcher with ngrok
244
+ │ ├── cli.py # CLI entrypoint
245
+ │ ├── constants.py # Centralized constants (paths, defaults, models)
246
+ │ │
247
+ │ ├── pages/ # Each page is a sub-package
248
+ │ │ ├── dashboard/
249
+ │ │ │ ├── page.py # Main dashboard render
250
+ │ │ │ ├── pipeline_status.py # Pipeline status cards
251
+ │ │ │ └── recent_runs.py # Recent training runs table
252
+ │ │ ├── data/
253
+ │ │ │ ├── page.py # Main data page render
254
+ │ │ │ ├── upload.py # Upload tab (ZIP/TAR + class config)
255
+ │ │ │ ├── download.py # Download tab (quick start + registries)
256
+ │ │ │ ├── preview.py # Preview tab (image grid + annotations)
257
+ │ │ │ ├── verify.py # Verify tab (dataset validation)
258
+ │ │ │ └── helpers.py # Shared helpers (extract, detect, convert)
259
+ │ │ ├── model/
260
+ │ │ │ ├── page.py # Main model page render
261
+ │ │ │ ├── architecture.py # Architecture tab (FlashDet/YOLO selection)
262
+ │ │ │ ├── hyperparams.py # Hyperparameters tab
263
+ │ │ │ ├── augmentation.py # Augmentation tab
264
+ │ │ │ ├── advanced.py # Advanced tab (memory, distributed)
265
+ │ │ │ └── summary.py # Config summary bar + YAML save/load
266
+ │ │ ├── training/
267
+ │ │ │ ├── page.py # Main training page render
268
+ │ │ │ ├── _common.py # Shared utilities (_get_save_dir)
269
+ │ │ │ ├── launch/ # Launch sub-package
270
+ │ │ │ │ ├── tab.py # Launch tab entry point
271
+ │ │ │ │ ├── preflight.py # Pre-flight checks
272
+ │ │ │ │ ├── runner.py # FlashDet Trainer subprocess
273
+ │ │ │ │ ├── controls.py # Start/stop/pause/resume buttons
274
+ │ │ │ │ └── dialogs.py # Clean/resume/config dialogs
275
+ │ │ │ └── monitor/ # Monitor sub-package
276
+ │ │ │ ├── tab.py # Monitor tab entry point
277
+ │ │ │ ├── run_meta.py # Run metadata extraction
278
+ │ │ │ ├── parsers.py # CSV/log parsing
279
+ │ │ │ ├── dashboard.py # Run dashboard + metrics
280
+ │ │ │ ├── curves.py # Plotly training curves
281
+ │ │ │ ├── visualizations.py # Epoch visualizations
282
+ │ │ │ ├── gt_verification.py # Ground truth verification
283
+ │ │ │ ├── log_viewer.py # Full log viewer
284
+ │ │ │ └── checkpoints.py # File browser + checkpoints
285
+ │ │ ├── export/
286
+ │ │ │ └── page.py # Export page (ONNX/TorchScript)
287
+ │ │ └── inference/
288
+ │ │ ├── page.py # Main inference page render
289
+ │ │ ├── model_tab.py # Model selection tab
290
+ │ │ ├── data_tab.py # Data input tab (images/video/RTSP)
291
+ │ │ ├── solution_tab.py # Solution selection + zone drawing
292
+ │ │ ├── run_tab.py # Run tab + results display
293
+ │ │ ├── detection.py # Detection utilities (real + demo)
294
+ │ │ └── video.py # Video/image inference runners
295
+ │ │
296
+ │ ├── components/
297
+ │ │ ├── sidebar.py # Navigation sidebar
298
+ │ │ ├── styles.py # Custom CSS + UI helpers
299
+ │ │ ├── wizard.py # Step indicator + navigation
300
+ │ │ ├── project_manager.py # Project CRUD + state persistence
301
+ │ │ └── zone_drawer/ # Interactive canvas zone drawing
302
+ │ │
303
+ │ └── utils/
304
+ │ ├── __init__.py # Shared helpers (defaults, state, flash)
305
+ │ ├── device.py # GPU/environment detection
306
+ │ ├── jobs.py # Background process tracking
307
+ │ ├── filesystem.py # Directory size/listing utilities
308
+ │ ├── config.py # Training config build/save/load
309
+ │ └── training_hooks.py # FlashDet training callbacks
310
+ │
311
+ ├── tests/ # Pytest test suite
312
+ │ ├── conftest.py # Shared fixtures
313
+ │ ├── test_constants.py # Constants validation
314
+ │ ├── test_cli.py # CLI tests
315
+ │ ├── test_utils/ # Utils sub-package tests
316
+ │ │ ├── test_init.py
317
+ │ │ ├── test_device.py
318
+ │ │ ├── test_filesystem.py
319
+ │ │ ├── test_config.py
320
+ │ │ └── test_jobs.py
321
+ │ ├── test_pages/ # Page logic tests
322
+ │ │ └── test_training_parsers.py
323
+ │ └── test_components/
324
+ │ └── test_project_manager.py
325
+ │
326
+ ├── .github/workflows/ci.yml # GitHub Actions CI
327
+ ├── notebooks/
328
+ ├── .streamlit/config.toml
329
+ ├── pyproject.toml
330
+ └── README.md
331
+ ```
332
+
333
+ ---
334
+
335
+ ## Troubleshooting
336
+
337
+ ### `ModuleNotFoundError: No module named 'pyngrok'`
338
+
339
+ ```bash
340
+ pip install --upgrade flashstudio
341
+ ```
342
+
343
+ ### ngrok authentication error (`ERR_NGROK_4018`)
344
+
345
+ You need an ngrok auth token. Get one free at:
346
+ https://dashboard.ngrok.com/get-started/your-authtoken
347
+
348
+ Then pass it to `launch(ngrok_token="your_token")`.
349
+
350
+ ### Streamlit port already in use
351
+
352
+ ```bash
353
+ # Kill existing Streamlit processes
354
+ pkill -f "streamlit run"
355
+
356
+ # Then restart
357
+ flashstudio --port 8501
358
+ ```
359
+
360
+ ---
361
+
362
+ ## Requirements
363
+
364
+ - Python >= 3.9
365
+ - FlashDet (`pip install git+https://github.com/FlashVision/FlashDet.git`)
366
+ - ngrok account (free) for Google Colab usage
367
+ - GPU recommended for training (T4 or better)
368
+
369
+ ## License
370
+
371
+ Apache-2.0