AltarDocker
Deploy MongoDB, MinIO, Omniboard, and AltarExtractor with Docker Compose.
A desktop GUI to map experiment folders and send runs to Sacred (MongoDB) and artifacts to MinIO or local storage.
Select folders and map files to Sacred data types: config, results, metrics, artifacts.
Push experiment metadata, configs, results, and metrics to MongoDB Sacred.
Send large raw data files to S3-compatible MinIO storage.
Send multiple experiments with the same folder structure in one go.
Supports JSON, CSV, and Excel files for configs, results, and metrics.
Optionally save raw data to local or network paths instead of MinIO.
cd AltarSender
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/macOS
pip install -r requirements.txt
python app.py
The GUI window will open.
Enter your MongoDB credentials. Optionally configure MinIO for large file storage.
Choose an experiment folder, map files to data types, and click Send experiment.
Send multiple experiments at once when they share the same folder structure. Configure one experiment, enable batch mode, and all sibling folders will be processed.
Parent folder/
βββ 2023-04-17_Experiment1/
β βββ config.json
β βββ results.csv
β βββ raw_data/
β βββ video.tiff
β
βββ 2023-04-17_Experiment2/
βββ config.json
βββ results.csv
βββ raw_data/
βββ video.tiff
Deploy MongoDB, MinIO, Omniboard, and AltarExtractor with Docker Compose.
Browse and filter Sacred experiments with a modern web UI.
A graphical user interface (GUI) built with Python and CustomTkinter to send experiment results to a MongoDB Sacred database. Optionally upload heavy files to MinIO or a local/network file path.
Deployment instructions: See AltarDocker for setting up MongoDB, MinIO, and Omniboard.
git clone https://github.com/DreamRepo/AltarSender.git
cd AltarSender
python -m venv .venv
Windows:
.venv\Scripts\activate
Linux/macOS:
source .venv/bin/activate
pip install -r requirements.txt
python app.py
If you see ModuleNotFoundError: No module named 'XXXX', run:
pip install XXXX
The app window should open.
Enter your database credentials in the app. Use the Test Connection button to verify connectivity.
If uploading raw data to MinIO, enter your MinIO credentials (endpoint, access key, secret key, bucket name).
Each experiment should have its own folder. The folder name becomes the experiment name.
The experiment configuration (name, conditions, instrument settings, etc.).
Supported formats: JSON, CSV, Excel
JSON example:
{
"experiment": {
"name": "Experiment1",
"duration": {
"time": 3200,
"unit": "seconds"
}
}
}
With βFlatten JSONβ enabled, this becomes:
{
"experiment_name": "Experiment1",
"experiment_duration_time": 3200,
"experiment_duration_unit": "seconds"
}
CSV/Excel format (no header, key-value pairs):
| param1 | value1 |
|---|---|
| param2 | value2 |
| param3 | value3 |
Experiment result values. Same format as Config (JSON, CSV, or Excel).
Time series data for plotting. Supported formats: CSV, Excel.
Large files to upload to MinIO or a filesystem path.
Naming convention:
video.tiff β video/[hash]_[datetime]_video.tiff (if folder name contains datetime)video.tiff β video/[hash]_video.tiff (otherwise)The hash is generated from the experiment folder name (7 alphanumeric characters).
Small files (< 50MB) stored directly in MongoDB. Same organization as raw data. These files can be accessed directly from Omniboard.
Warning: Storing large artifacts impacts database performance.
For experiments with identical folder structures:
Example structure:
Parent folder/
βββ 2023-04-17_18_13_Experiment1/
β βββ config.json
β βββ results.csv
β βββ metrics.xlsx
β βββ capture.png
β βββ raw_data/
β βββ frames.tiff
β βββ video.mp4
β
βββ 2023-04-17_18_18_Experiment2/
βββ config.json
βββ results.csv
βββ metrics.xlsx
βββ capture.png
βββ raw_data/
βββ frames.tiff
βββ video.mp4
Configure Experiment1, enable batch mode, and both experiments will be sent.
Access your experiments in Omniboard:
| Data type | Location in Omniboard |
|---|---|
| Config | Config (last menu item) |
| Results | Run Info β root β result |
| Metrics | Metrics plot |
| Artifacts | Artifacts |
| Raw data | Run Info β dataFiles (paths) |
You can build a standalone executable that doesnβt require Python to be installed. The executable will include all dependencies.
Ensure you have the development environment set up:
# Create and activate virtual environment
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
pip install pyinstaller
# Option 1: Use the build script (recommended)
python build_exe.py
# Option 2: Use PyInstaller directly with the spec file
pyinstaller AltarSender.spec
# Option 3: Build manually
pyinstaller --name=AltarSender --onefile --windowed --noconfirm ^
--add-data=".venv\Lib\site-packages\customtkinter;customtkinter" ^
--hidden-import=customtkinter --hidden-import=sacred ^
--hidden-import=sacred.observers --hidden-import=pymongo ^
--hidden-import=pandas --hidden-import=numpy --hidden-import=openpyxl ^
--hidden-import=boto3 --hidden-import=botocore ^
--collect-all=customtkinter --collect-all=sacred ^
app.py
The executable will be in the dist/ folder: dist/AltarSender.exe
# Option 1: Use the build script (recommended)
python build_exe.py
# Option 2: Use PyInstaller directly with the spec file
pyinstaller AltarSender.spec
# Option 3: Build manually
pyinstaller --name=AltarSender --onefile --windowed --noconfirm \
--add-data=".venv/lib/python3.*/site-packages/customtkinter:customtkinter" \
--hidden-import=customtkinter --hidden-import=sacred \
--hidden-import=sacred.observers --hidden-import=pymongo \
--hidden-import=pandas --hidden-import=numpy --hidden-import=openpyxl \
--hidden-import=boto3 --hidden-import=botocore \
--collect-all=customtkinter --collect-all=sacred \
app.py
The executable will be in the dist/ folder: dist/AltarSender
Make it executable if needed:
chmod +x dist/AltarSender
# Option 1: Use the build script (recommended)
python build_exe.py
# Option 2: Use PyInstaller directly with the spec file
pyinstaller AltarSender.spec
# Option 3: Build manually
pyinstaller --name=AltarSender --onefile --windowed --noconfirm \
--add-data=".venv/lib/python3.*/site-packages/customtkinter:customtkinter" \
--hidden-import=customtkinter --hidden-import=sacred \
--hidden-import=sacred.observers --hidden-import=pymongo \
--hidden-import=pandas --hidden-import=numpy --hidden-import=openpyxl \
--hidden-import=boto3 --hidden-import=botocore \
--collect-all=customtkinter --collect-all=sacred \
app.py
The executable will be in the dist/ folder: dist/AltarSender.app (or dist/AltarSender binary)
Note: On macOS, you may need to right-click and select βOpenβ the first time to bypass Gatekeeper, or run
xattr -cr dist/AltarSender.appto remove quarantine attributes.
| Platform | Output Location | Output Name |
|---|---|---|
| Windows | dist/ |
AltarSender.exe |
| Linux | dist/ |
AltarSender |
| macOS | dist/ |
AltarSender.app or AltarSender |
--hidden-import flag--add-data to include necessary filesThis repository includes a GitHub Actions workflow that automatically builds executables for Windows, Linux, and macOS.
Note: On Linux/macOS, you may need to make the file executable:
chmod +x AltarSender-Linux # or AltarSender-macOS
To publish a versioned release with executables attached:
v1.0.0) and give the release a titleThe GitHub Action will automatically:
Users can then download the executable for their platform directly from the release page.
You can also manually trigger a build: