| --- |
| license: mit |
| tags: |
| - desktop-application |
| - ai-tools |
| - dataset-management |
| - lora-training |
| - windows |
| --- |
| |
| # ADAM — AI Development and Automation Manager |
|
|
| ADAM is a local, safety-first desktop hub for orchestrating AI project tools. |
| It includes registered dataset, DDPM, and SDXL LoRA workflows with background |
| planning, approval gates, progress reporting, and persistent asset history. |
|
|
|  |
|
|
| Dataset preparation, captioning, and preview placeholders remain clearly marked |
| as demo tools. The connected Dataset Collector, DDPM trainer, and Local SDXL |
| LoRA Trainer use real adapters and never fall back to simulated training. |
|
|
| Existing program folders can be connected from **Settings → Tool folders**. |
| ADAM stores only the path and scans for likely entry points; it does not copy or |
| modify the external project. Folder assignments can also be pasted into chat: |
|
|
| ```text |
| DDPM Trainer: D:\AI\DDPM |
| Flow Matching Trainer: D:\AI\FlowMatchImageGenerator |
| ``` |
|
|
| On a new computer, install `requirements.txt` in your chosen Python environment |
| before running `Launch ADAM.bat`. The launcher checks desktop dependencies and |
| does not install packages automatically or depend on the developer's personal |
| trainer folders. Install each optional trainer's dependencies according to that |
| tool's setup instructions before using its ADAM workflow. |
|
|
| Remote access is disabled by default. Devices with an access token can browse |
| datasets, edit captions/review marks and submit work. Only enable it for trusted |
| devices. The desktop **Allow remote job controls and approval changes** setting |
| also permits remote confirmation, stopping and retrying jobs. A remote browser |
| can enable training auto-approval only after that desktop permission is granted; |
| it can always turn auto-approval off. Saved token changes and disabled access |
| take effect for new requests without restarting the server. |
|
|
| Use private Tailscale access for connections beyond a trusted local network; |
| the built-in HTTP listener does not provide transport encryption by itself. |
| Phone URLs and QR codes contain the access token and should be treated as |
| credentials. Remote commands require JSON, have bounded request sizes and |
| connection counts, and reject cross-site browser submissions. These controls |
| do not sandbox installed Python plugins or connected trainers: install only |
| code you trust. |
|
|
| Detection does not automatically authorize training. A real training adapter |
| remains gated until its dataset, model name, run settings, and output location |
| are explicit. |
|
|
| ## Training agents |
|
|
|  |
|
|
| ADAM's training lifecycle is divided into four explainable responsibilities: |
|
|
| - **EVE** reviews dataset membership and leaves uncertain images for the user. |
| - **ORION** reviews planned epochs, batch size, resolution, image exposures, and |
| estimated optimizer steps. He can require approval but never silently changes |
| the requested settings. In the Model Creation Assistant, **ORION: apply a |
| starting recipe** fills a conservative, editable draft from the image count |
| and selected resolution before a plan is built. |
| - **ATLAS** watches active training for non-finite loss, sustained critical GPU |
| temperature, critically low disk space, stalls, and large runtime overruns. |
| Critical conditions pause the trainer process tree so the user can inspect it. |
| - **NOVA** examines available post-training previews and samples for unreadable |
| files and exact-looking duplicate collapse. Her report explicitly separates |
| technical sample health from subjective or subject-quality review. |
|
|
| ORION, ATLAS, and NOVA reports are stored with each durable job record and are |
| shown in Current Plan, Active Job, and Jobs / History respectively. ATLAS's |
| default thresholds can be overridden in `config/settings.json` with the |
| `atlas_*` settings defined in `adam/config.py`. |
|
|
| Every new job passes through the shared preflight and ORION review before its |
| queue state is chosen. Desktop plans, Remote prompts, and Remote training forms |
| use the same review. Remote training auto-approval still applies to ordinary |
| plans, but an ORION warning leaves the job awaiting explicit approval. Reviewing |
| a plan does not change the requested training settings. |
|
|
| ## Real image collection |
|
|
| When a valid Dataset Collector folder is connected, the `dataset_collector` |
| registry entry uses ADAM's real visible-browser adapter. After plan approval it: |
|
|
| - opens Bing Images in a normal visible Chrome window; |
| - waits when consent/CAPTCHA/human-verification text is detected; |
| - resumes automatically after the user resolves the page; |
| - downloads valid images at least 256×256; |
| - removes exact duplicate downloads; |
| - writes a matching `.txt` caption beside every image; and |
| - records URLs, captions, sources, and dimensions in `metadata.csv`. |
|
|
| No CAPTCHA or website restriction is bypassed. Closing Chrome or stopping the |
| job ends collection safely. A new timestamped dataset folder is used rather |
| than overwriting an existing collection. |
|
|
| ADAM keeps an incomplete DDPM request in conversation memory. A follow-up such |
| as `dataset folder Mario, model name Mario V2, epoch count 100, output D:\Runs` |
| fills the pending fields and validates named datasets against the connected |
| collector. It will not start if the dataset cannot be found. |
|
|
| ## Showcase videos |
|
|
| The **Showcase Video** workspace creates a finished MP4 directly from completed |
| DDPM and Flow Matching models. Select and reorder the models, choose 12–24 |
| images per model, a 3-, 4-, or 5-second image duration, shared steps and aspect |
| ratio, provider-compatible samplers, seed, and 720p or 1080p output. ADAM runs |
| the image batches sequentially and then renders a request-list interface that |
| tracks the active model, image number, trainer, steps, sampler, and aspect ratio. |
| LoRA models are intentionally excluded from this streamlined workflow. |
|
|
| When Ollama is reachable, messages that are not workflow commands receive a |
| short conversational answer. Ollama may explain or plan, but it still cannot |
| bypass the registry or confirmation gates. |
|
|
| ## Web search in Chat Mode |
|
|
| Chat Mode can give local Ollama current web context without an API key. Enable |
| it in **Settings → Planning model**, then ask naturally, for example: |
|
|
| ```text |
| Search the web for Dandy's World character ideas. |
| What are the latest Ollama release notes? |
| Look up a reference for a cyberpunk city character. |
| ``` |
|
|
| ADAM sends only that search query to Bing's public results feed, reads the |
| result titles and snippets, |
| and passes up to five titles, snippets, and links to Ollama. It does not open |
| the result pages, download anything, or let web content run tools. Results are |
| untrusted reference material, so ADAM is instructed to cite the links and flag |
| uncertainty. Disable the setting to keep Chat Mode fully local. |
|
|
| When you explicitly ask ADAM to **read**, **open**, or **research** result links, |
| it can read up to three public HTML/text pages and give Ollama short extracts. |
| For example: `Search the web for Undertale character ideas and read the most |
| relevant links.` Direct links can be read with `Read https://example.com/ and |
| summarize it.` Private/local addresses, non-web protocols, oversized pages, |
| downloads, and more than three pages are blocked. This control can be disabled |
| in Settings. |
|
|
| Planning runs away from the interface thread, and conversational Ollama output |
| is streamed into the chat. ADAM validates training commands against a strict |
| schema and each registered trainer's declared capabilities before offering a |
| job. |
|
|
| In **Settings → Planning model**, **Chat response length** sets the maximum |
| number of generated tokens for a Chat Mode reply. Higher values allow longer |
| research summaries but use more time and GPU memory. The default is 1,024, |
| which gives Qwen3 enough room to reason and still produce a visible response. |
|
|
| ADAM stores friendly dataset/model names, paths, trainer types, epochs, and |
| resume checkpoints in `data/assets.json`. Requests such as: |
|
|
| ```text |
| From the Mario dataset, train it on a DDPM for 300 epochs. |
| With the Mario dataset, train it on a LoRA for 100 epochs. |
| Continue the Mario model from the DDPM for 50 epochs. |
| ``` |
|
|
| are resolved to real paths before approval. Continuation is offered only when a |
| compatible checkpoint exists. New DDPM runs retain the latest resume checkpoint. |
|
|
| ## Run |
|
|
| ```powershell |
| python main.py |
| ``` |
|
|
| On Windows, you can also double-click `Launch ADAM.bat`. |
|
|
| The app requires Python 3.10+ and PySide6. Optional integrations use `psutil` |
| for system information and `pynvml` for NVIDIA GPU information. |
|
|
| ```powershell |
| python -m pip install -r requirements.txt |
| ``` |
|
|
| Try: |
|
|
| - Click **Create a model…** in Trainer Mode for the guided Model Creation Assistant. |
| - `Adam, train a LoRA of Hatsune Miku` |
| - `Adam, collect a dataset of liminal spaces` |
| - `Adam, generate previews` |
| - `Adam, check GPU status` |
| - `From the Mario dataset, train it on a DDPM for 300 epochs` |
| - `With the Mario dataset, train it on a LoRA for 100 epochs` |
|
|
| Training and large collection plans are never started until you approve the |
| plan. All actions are recorded in `logs/adam.log`, while project artifacts live |
| under `data/projects/`. |
|
|
| The Model Creation Assistant can start from a built-in Character LoRA, Style |
| LoRA, DDPM, or Flow Matching preset. It can create a dataset or select a |
| registered one, recommends starting values, and saves personal presets. The |
| result still goes through ADAM's normal validated planner and approval gate. |
| Use **+ Add model** to build a multi-model training batch. Each wide model tab |
| keeps its own dataset, trainer, name, and settings; the minus button removes an |
| unwanted model, and tabs can be dragged to change the run order. ADAM validates |
| all models, presents one combined approval plan, and runs them sequentially so |
| only one training workflow uses the GPU at a time. A failed step stops the batch |
| before a later model starts. |
| Before approval, ADAM adds checks for connected tools, dataset contents, the |
| LoRA base model, and output-drive free space. Completed dataset and training |
| jobs also include a suggested next step. |
|
|
| ### Model Batch Builder |
|
|
| Use **Create model batch…** to paste one requested subject per line. ADAM turns |
| the list into editable model tabs, removes duplicate names, and lets the current |
| trainer recipe be applied to any multi-selection of models. The batch is saved |
| as a draft so it can be closed and resumed later. |
|
|
| For a review-first workflow, choose **Collect missing datasets first**. This |
| queues only sequential dataset collection and leaves training in the saved |
| draft. After collection, reopen the draft, use **Find collected datasets**, and |
| review each dataset in Training Studio. **Exclude rejected** moves rejected |
| images out of the training folder into a recoverable quarantine, and **Restore |
| excluded** reverses it. **Keep all images** marks the whole selected dataset as |
| accepted in one action, after which individual bad images can still be rejected. |
| Training remains locked until each model is explicitly |
| marked as reviewed and ready. If every linked dataset is acceptable as-is, |
| **Approve all datasets** marks the entire batch ready after one confirmation; |
| it does not inspect individual images or apply pending rejection decisions. |
|
|
| Completed Flow Matching models can be selected in **Fine-tune**. ADAM uses the |
| saved Flow model folder as the continuation source, locks the continuation to |
| the model's original resolution, and writes the fine-tuned result to a new |
| output folder. This continues the saved weights while starting a fresh optimizer |
| and learning-rate schedule; it does not overwrite the original model. |
|
|
| ## Training Studio |
|
|
| The **Training Studio** turns completed work into a reviewable experiment loop: |
|
|
| - **Datasets** provides an image gallery, keep/reject decisions, caption editing, |
| exact duplicate detection, and visually similar duplicate candidates. |
| - **Experiments** compares job settings and outcomes, opens outputs, marks a |
| preferred model, and converts successful settings into reusable recipes. |
| - **Checkpoint Lab** browses model checkpoints and output images, records |
| consistent prompt/seed evaluations, and sends preview requests through the |
| normal approval-aware planner. |
| - **Recipes** preserves training starting points and can import or export |
| portable JSON recipe files. |
|
|
| ### EVE AI Dataset Review |
|
|
| In Training Studio → Datasets, **EVE AI Review…** performs a local reference- |
| guided visual review. Add one or more good reference images and optional bad |
| references, then choose Keep and Reject confidence thresholds. EVE uses a small |
| DINOv2 vision model to divide the selected dataset into **Keep**, **Reject**, and |
| **Uncertain** galleries with confidence scores. The model is downloaded once on |
| first use and subsequent analysis stays local. |
|
|
| Nothing is applied automatically. Inspect both sides, double-click images for a |
| full view, and move selected results between the three groups before choosing |
| **Apply EVE review**. EVE's decisions remain ordinary Training Studio review |
| marks: they can be manually changed, and rejected files are not moved until |
| **Exclude rejected** is selected. The latest proposal is also saved under |
| `data/eve_reviews/` for auditing. Use **Select all in current group** (or |
| Ctrl/Shift selection) to move many images at once; EVE transfers only the |
| chosen thumbnails so manual sorting stays responsive on large datasets. |
|
|
| Training panels show elapsed time, a progress-based ETA, recent logs, and a |
| loss sparkline when the connected trainer reports `loss`. Preflight summaries |
| include clearly labelled workload, duration, VRAM, and disk estimates. These |
| estimates are planning hints rather than hardware guarantees. |
|
|
| Create a Model also supports live training previews with a configurable |
| epoch interval, prompt, and reproducible seed for each model tab. While a |
| training job is active, its newest 256×256 preview appears in the right sidebar |
| with the source epoch and next scheduled preview. The full-size trainer output |
| can be opened from the card. Built-in adapters may publish previews directly; |
| registered DDPM, Flow, LoRA, APVD, MaskGit, and other trainers can also |
| participate by writing conventionally named `preview`, `sample`, or `epoch` |
| images beneath their declared output folder. |
|
|
| ## Generations |
|
|
| The **Generations** workspace runs compatible registered image generators |
| without opening their separate desktop interfaces. The connected DDPM and Flow |
| Matching projects can generate from completed models with a reproducible seed, |
| sampler or ODE method, step count, image count, and aspect ratio. Generation |
| work uses the normal ADAM job queue, progress reporting, cancellation, and |
| logging. |
|
|
| Every completed batch is stored under `data/generations/` with its images and a |
| `generation.json` sidecar. The history gallery can open an image or batch folder |
| and restore the exact settings for another run. DDPM creative notes are stored |
| with a batch for organization; they are not presented as text conditioning for |
| an unconditional DDPM model. |
|
|
| Generation history opens as automatic model folders. Each folder uses the |
| registered model name and a recent generated image as its cover. Double-clicking |
| a folder filters history to that model and selects its provider and model in the |
| generation controls, so the next batch is generated into the same existing model |
| directory. This view does not move or rewrite older generation files. |
|
|
| **Generation Cycle…** selects multiple compatible completed models and queues |
| one generation step per model. Choose images per model, a shared prompt or |
| creative note, starting seed, slideshow duration, looping, fullscreen playback, |
| and an optional model/trainer label. When the cycle finishes, ADAM opens the |
| results as a local slideshow while preserving every ordinary generation record |
| in history. |
|
|
| If ADAM discovers a job interrupted by an unexpected shutdown, it offers to |
| open Jobs & History. The previous record remains intact and can be retried as a |
| new approval-gated job. Job logs can also be exported for troubleshooting. |
|
|
| ## Connect an existing tool |
|
|
| ADAM supports importable Python functions and command-line Python scripts. |
| For a no-code setup, open **Settings → External Tools → Add external tool**. |
| Choose the program folder, select its training entry script and important |
| configuration files, then review ADAM's static compatibility and safety report. |
| The report covers: |
|
|
| - detected command-line options and required inputs; |
| - likely dataset formats; |
| - output and checkpoint behavior; |
| - progress reporting; |
| - resume-training support; and |
| - potentially risky operations visible in the selected entry script. |
|
|
| The 1–10 rating measures how clearly the script fits ADAM's safe command-line |
| contract. It is not a guarantee that third-party code is harmless. ADAM does |
| not execute a script while scanning it, external tools cannot replace built-in |
| registry entries, and every external-tool run requires explicit approval. |
|
|
| After registration, a tool can be planned with a request such as: |
|
|
| ```text |
| Run APVD Model Trainer with dataset=D:\DreamData, epochs=20, output=D:\APVD\output |
| ``` |
|
|
| ADAM will ask for any required inputs that were omitted before it offers the |
| approval plan. |
|
|
| For manual registry configuration, edit the relevant item in |
| `config/tools.json`: |
|
|
| ```json |
| { |
| "backend": { |
| "type": "python", |
| "module": "my_tools.lora", |
| "function": "train" |
| }, |
| "demo": false |
| } |
| ``` |
|
|
| The function receives a `ToolContext` as its first argument and keyword |
| arguments from the approved plan. This keeps training code in one place: your |
| existing GUI and ADAM can both call the same backend. |
|
|
| For scripts: |
|
|
| ```json |
| { |
| "backend": { |
| "type": "script", |
| "path": "D:/AI/LoRATrainer/train.py" |
| }, |
| "demo": false |
| } |
| ``` |
|
|
| ADAM invokes scripts directly with the current Python interpreter, captures |
| stdout/stderr, and never drives another GUI with mouse clicks. |
|
|
| ## Safety model |
|
|
| - Plans are shown before execution. |
| - Long, destructive, or high-volume work requires confirmation. |
| - Unregistered tools cannot be invoked. |
| - External paths and arguments are validated before execution. |
| - The LLM may propose a plan, but only registered tools can execute it. |
| - Pause, resume, and cancel controls are available for active jobs. |
| - Every tool action and state transition is logged. |
|
|
| ## Tests |
|
|
| ```powershell |
| python -m pytest -q |
| ``` |
|
|