imagehearth-mcp 0.1.0b1__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.
Files changed (75) hide show
  1. imagehearth_mcp-0.1.0b1/.gitignore +10 -0
  2. imagehearth_mcp-0.1.0b1/CHANGELOG.md +17 -0
  3. imagehearth_mcp-0.1.0b1/LICENSE +21 -0
  4. imagehearth_mcp-0.1.0b1/PKG-INFO +278 -0
  5. imagehearth_mcp-0.1.0b1/README.es.md +240 -0
  6. imagehearth_mcp-0.1.0b1/README.md +242 -0
  7. imagehearth_mcp-0.1.0b1/THIRD_PARTY_NOTICES.md +39 -0
  8. imagehearth_mcp-0.1.0b1/pyproject.toml +95 -0
  9. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/__init__.py +0 -0
  10. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/cli.py +172 -0
  11. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/imagehearth_status/LICENSE +674 -0
  12. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/imagehearth_status/__init__.py +28 -0
  13. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/models.toml +251 -0
  14. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/skill/SKILL.md +250 -0
  15. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/workflows/flux_dev.json +81 -0
  16. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/workflows/flux_dev_gguf.json +109 -0
  17. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/workflows/flux_kontext_dev_basic.json +227 -0
  18. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/workflows/flux_kontext_dev_gguf.json +221 -0
  19. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/data/workflows/sdxl_turbo.json +59 -0
  20. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/__init__.py +0 -0
  21. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/catalog.py +103 -0
  22. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/comfyui_client.py +258 -0
  23. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/comfyui_manager.py +187 -0
  24. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/config.py +211 -0
  25. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/errors.py +2 -0
  26. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/gpu.py +55 -0
  27. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/image_router.py +97 -0
  28. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/kontext.py +302 -0
  29. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/log.py +75 -0
  30. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/memory.py +136 -0
  31. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/memory_servers.py +318 -0
  32. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/ollama_manager.py +172 -0
  33. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/orchestrator.py +470 -0
  34. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/progress.py +45 -0
  35. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/result.py +13 -0
  36. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/state.py +47 -0
  37. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/status.py +118 -0
  38. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/validation.py +96 -0
  39. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/engine/workflow_runner.py +138 -0
  40. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/platform/__init__.py +1 -0
  41. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/platform/files.py +18 -0
  42. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/platform/locks.py +55 -0
  43. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/platform/paths.py +20 -0
  44. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/platform/processes.py +79 -0
  45. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/platform/spawn.py +14 -0
  46. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/__init__.py +2 -0
  47. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/agent_setup.py +280 -0
  48. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/comfyui.py +338 -0
  49. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/connect.py +744 -0
  50. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/detect.py +455 -0
  51. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/doctor.py +421 -0
  52. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/install_manifest.py +123 -0
  53. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/maintenance.py +324 -0
  54. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/manifest.py +243 -0
  55. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/models.py +239 -0
  56. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/preflight.py +183 -0
  57. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/settings.py +88 -0
  58. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/setup.py +356 -0
  59. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/provisioner/smoke.py +95 -0
  60. imagehearth_mcp-0.1.0b1/src/imagehearth_mcp/server.py +234 -0
  61. imagehearth_mcp-0.1.0b1/tests/__init__.py +0 -0
  62. imagehearth_mcp-0.1.0b1/tests/data/kontext_many_reference.json +279 -0
  63. imagehearth_mcp-0.1.0b1/tests/data/kontext_one_reference.json +197 -0
  64. imagehearth_mcp-0.1.0b1/tests/data/server.schema.json +574 -0
  65. imagehearth_mcp-0.1.0b1/tests/harness.py +361 -0
  66. imagehearth_mcp-0.1.0b1/tests/test_agent_setup.py +237 -0
  67. imagehearth_mcp-0.1.0b1/tests/test_catalog.py +651 -0
  68. imagehearth_mcp-0.1.0b1/tests/test_config.py +138 -0
  69. imagehearth_mcp-0.1.0b1/tests/test_connect.py +362 -0
  70. imagehearth_mcp-0.1.0b1/tests/test_memory_servers.py +451 -0
  71. imagehearth_mcp-0.1.0b1/tests/test_platform.py +285 -0
  72. imagehearth_mcp-0.1.0b1/tests/test_provisioner.py +1601 -0
  73. imagehearth_mcp-0.1.0b1/tests/test_release.py +178 -0
  74. imagehearth_mcp-0.1.0b1/tests/test_requests.py +273 -0
  75. imagehearth_mcp-0.1.0b1/tests/test_session.py +500 -0
@@ -0,0 +1,10 @@
1
+ __pycache__/
2
+ .venv/
3
+ *.pyc
4
+ engine.lock
5
+ state/
6
+ logs/
7
+ output/
8
+ .pytest_cache/
9
+ .ruff_cache/
10
+ dist
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ ## 2026-10-31
4
+
5
+ - Prepared the public beta `0.1.0b1`: `install.sh` and `install.ps1`, package metadata, `server.json` for the MCP Registry, rewritten READMEs, troubleshooting, release and beta testing guides, contribution and security policies, and issue templates.
6
+ - Connected agents with `connect`, with `connect --print` for any other client and `docs/agents.md`, and reported progress so long generations aren't cut off.
7
+ - Replaced `generate_image` and `edit_image` with a single `create_image`, and made the essential instructions part of the server, for agents without skills.
8
+ - Added `setup_status` and `setup_start`, so an agent can run the installation after asking the user.
9
+ - Added `memory_mode` and memory providers for LM Studio, llama.cpp and vLLM, alongside Ollama.
10
+ - Made the catalog depend on what's installed: errors name the exact `setup` command, never another model. Added measured profiles, and macOS prepared without testing behind `--experimental`.
11
+ - Added `setup`, `doctor`, `update` and `uninstall`: pinned ComfyUI, resumable and verified model downloads, consent before downloading, and checks before starting.
12
+ - Made the core portable to Windows and macOS, and made Ollama optional. Fixed the status node, and never restarts a ComfyUI it didn't start.
13
+ - Packaged the project as `imagehearth-mcp`, with its configuration in `config.toml`. Added the licenses and third-party notices, and local checks with `scripts/check.sh`.
14
+
15
+ ## 2026-10-30
16
+
17
+ - First state of the project as ImageEngine: session recovery, deadlines and validation, configuration, rotating logs, persistent state and the status node.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hemoglobin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,278 @@
1
+ Metadata-Version: 2.5
2
+ Name: imagehearth-mcp
3
+ Version: 0.1.0b1
4
+ Summary: MCP server that lets AI agents generate and edit images locally through ComfyUI
5
+ Project-URL: Homepage, https://github.com/RealHemoglobin/ImageHearth
6
+ Project-URL: Documentation, https://github.com/RealHemoglobin/ImageHearth#readme
7
+ Project-URL: Issues, https://github.com/RealHemoglobin/ImageHearth/issues
8
+ Project-URL: Changelog, https://github.com/RealHemoglobin/ImageHearth/blob/main/CHANGELOG.md
9
+ Author: Hemoglobin
10
+ License-Expression: MIT AND GPL-3.0-only
11
+ License-File: LICENSE
12
+ License-File: THIRD_PARTY_NOTICES.md
13
+ License-File: src/imagehearth_mcp/data/imagehearth_status/LICENSE
14
+ Keywords: ai-agents,comfyui,flux,image-generation,mcp,model-context-protocol
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Environment :: Console
17
+ Classifier: Environment :: GPU :: NVIDIA CUDA
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: Intended Audience :: End Users/Desktop
20
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 11
21
+ Classifier: Operating System :: POSIX :: Linux
22
+ Classifier: Programming Language :: Python :: 3
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Multimedia :: Graphics
25
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
+ Requires-Python: >=3.13
27
+ Requires-Dist: filelock>=4.2.5
28
+ Requires-Dist: huggingface-hub<3,>=1
29
+ Requires-Dist: mcp<2,>=1.30
30
+ Requires-Dist: pillow<14,>=13
31
+ Requires-Dist: platformdirs<5,>=4
32
+ Requires-Dist: psutil>=7.2.2
33
+ Requires-Dist: pyyaml<7,>=6
34
+ Requires-Dist: requests<3,>=2.34
35
+ Description-Content-Type: text/markdown
36
+
37
+ # ImageHearth
38
+
39
+ **Give any AI agent the ability to generate and edit images on your own PC.** No subscription, no cloud: your prompts and images stay on your machine.
40
+
41
+ ImageHearth is an [MCP](https://modelcontextprotocol.io) server that connects agents such as Claude Code or Codex to [ComfyUI](https://github.com/Comfy-Org/ComfyUI).
42
+
43
+ <!-- mcp-name: io.github.RealHemoglobin/imagehearth -->
44
+
45
+ [Leer en español](https://github.com/RealHemoglobin/ImageHearth/blob/main/README.es.md)
46
+
47
+ **Public beta.** Install it with one command, and if something fails, [tell us](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/troubleshooting.md#reporting-a-problem).
48
+
49
+ ```bash
50
+ # Linux
51
+ curl -LsSf https://raw.githubusercontent.com/RealHemoglobin/ImageHearth/main/install.sh | sh
52
+ ```
53
+
54
+ ```powershell
55
+ # Windows
56
+ irm https://raw.githubusercontent.com/RealHemoglobin/ImageHearth/main/install.ps1 | iex
57
+ ```
58
+
59
+ ## What you can ask your agent
60
+
61
+ - *"Generate a poster of a futuristic city at night"*: quick draft with SDXL Turbo.
62
+ - *"Make a high-quality 1536x1024 image of a medieval castle"*: FLUX Dev.
63
+ - *"Change the background of `photo.png` to a snowy mountain"*: FLUX Kontext.
64
+ - *"Combine these three pictures into one scene"*: up to six reference images.
65
+
66
+ If you also run local language models, ImageHearth frees them from GPU memory while generating and restores them afterwards. Ollama has been tested for real; LM Studio, llama.cpp and vLLM only against simulated servers.
67
+
68
+ ## Requirements
69
+
70
+ | | |
71
+ |---|---|
72
+ | **GPU** | NVIDIA series 20 or newer with a current driver. Only measured on an RTX 4090 with 24 GB; see the [measurements](#measured-requirements). Less memory may be slow or fail with the FLUX models |
73
+ | **Disk** | 7.2 GB for ComfyUI and its environment, plus the profile you choose |
74
+ | **Software** | Nothing to install first: the script installs [uv](https://docs.astral.sh/uv/), which brings its own Python. Git isn't needed. [Ollama](https://ollama.com/download) is optional |
75
+
76
+ ### Support
77
+
78
+ Only what has run on real hardware is announced as supported.
79
+
80
+ | System and GPU | Level |
81
+ |---|---|
82
+ | Linux, NVIDIA series 20 or newer | **Supported.** Tested on real hardware |
83
+ | Windows 11, NVIDIA series 20 or newer | **Target of this beta.** Its verification on clean machines is pending |
84
+ | NVIDIA series 10 or older, AMD, Intel Arc, CPU only | **Experimental.** Detected and offered with a warning, never tested. CPU only runs `fast` |
85
+ | macOS on Apple Silicon | **Untested.** Prepared behind `--experimental`: see [below](#macos-untested) |
86
+
87
+ ### Measured requirements
88
+
89
+ Measured with `scripts/measure_profiles.py` at 1024x1024 (Kontext with one reference): RTX 4090 24 GB, driver 580.178, Linux, ComfyUI 0.43.0, on 2026-10-31.
90
+
91
+ | Workflow | Profile | Peak VRAM | Peak RAM | First generation | Next generations |
92
+ |---|---|---|---|---|---|
93
+ | SDXL Turbo | `fast` | 7.0 GB | 2.6 GB | 3.6 s | 1.0 s |
94
+ | FLUX Dev | `quality` | 17.8 GB | 2.3 GB | 13.8 s | 10.4 s |
95
+ | FLUX Kontext | `full` | 19.3 GB | 2.4 GB | 21.0 s | 18.6 s |
96
+
97
+ - These are peaks on a 24 GB card, not minimums: ComfyUI uses the memory it finds and can offload on smaller cards. The minimums for other GPUs are only a guide.
98
+ - "First generation" comes after unloading the models from the GPU, with the files still in the system's disk cache. Loading from a cold disk takes longer.
99
+ - The Windows measurements are still pending.
100
+
101
+ > **Note:** local model servers are optional. If one isn't running, ImageHearth skips it and the status stays `ready`. See `memory_mode` in the [settings](#settings-optional).
102
+
103
+ ### A language model and images on the same GPU
104
+
105
+ Measured on the same RTX 4090 with `qwen3.5:9b`, which needs 14.3 GB with Ollama's default context and 5.9 GB with `num_ctx` 8192. With `memory_mode = "auto"` it doesn't matter: the model is unloaded while generating and comes back afterwards. To keep both loaded (`manual` or `off`), the card must hold the language model plus the workflow's peak: with 5.9 GB and SDXL Turbo, the GPU peaked at 19.2 GB, about 3 GB of it from the desktop. With 5.9 GB and FLUX Dev it filled the 24 GB and worked, in 14-16 s, with `memory_mode = "off"`. In `manual`, generation is refused if free memory is below 8 GB for SDXL Turbo or 16 GB for FLUX, so that same case is refused there.
106
+
107
+ ## Installation
108
+
109
+ ### 1. Run the installer
110
+
111
+ Pick the level you prefer. All three end the same way: uv, `imagehearth-mcp`, `setup` and `connect --detect`.
112
+
113
+ **Simplest: one command.** Use the one for your system from the [top of this page](#imagehearth).
114
+
115
+ **From a cloned repository.** Download the code and run `install`, so you can read what it will do first:
116
+
117
+ ```bash
118
+ # Linux
119
+ git clone https://github.com/RealHemoglobin/ImageHearth.git
120
+ cd ImageHearth
121
+ ./install.sh
122
+ ```
123
+
124
+ ```powershell
125
+ # Windows
126
+ git clone https://github.com/RealHemoglobin/ImageHearth.git
127
+ cd ImageHearth
128
+ .\install.ps1
129
+ ```
130
+
131
+ Without Git, download the ZIP from GitHub and run the same script inside the folder. From a clone, it installs that code, not the published package. If PowerShell blocks the script, run `powershell -ExecutionPolicy Bypass -File .\install.ps1`.
132
+
133
+ **Most advanced: by hand.** With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
134
+
135
+ ```bash
136
+ uv tool install imagehearth-mcp==0.1.0b1
137
+ imagehearth-mcp setup
138
+ imagehearth-mcp connect --detect
139
+ ```
140
+
141
+ The scripts are short: [`install.sh`](https://github.com/RealHemoglobin/ImageHearth/blob/main/install.sh) and [`install.ps1`](https://github.com/RealHemoglobin/ImageHearth/blob/main/install.ps1). They:
142
+
143
+ 1. Install uv with its official installer, if it's missing.
144
+ 2. Install `imagehearth-mcp`: at a pinned version, or the clone's code if run from one.
145
+ 3. Run `setup` and `connect --detect`, which ask you before downloading or changing anything.
146
+
147
+ They never ask for `sudo` or administrator rights, and never accept a license for you. You can run them again safely.
148
+
149
+ ### 2. What setup does
150
+
151
+ Setup detects your hardware and any existing ComfyUI, proposes a profile, and shows the disk space and licenses **before downloading anything**. Then it installs ComfyUI and the models and generates a test image. If it's interrupted, run it again and it continues where it stopped.
152
+
153
+ | Profile | What you get | Models |
154
+ |---|---|---|
155
+ | `fast` | Quick generation with SDXL Turbo | 6.9 GB |
156
+ | `quality` | `fast` + FLUX Dev | 24.6 GB |
157
+ | `full` | `quality` + editing with FLUX Kontext | 36.5 GB |
158
+
159
+ You can start with `fast` and run `setup --profile full` later: what's already there isn't downloaded again. ImageHearth only offers what's installed: `list_workflows` shows it, a later `setup` is noticed without restarting anything, and asking for something missing fails with the exact `setup` command, never with another model instead.
160
+
161
+ | Option | Use |
162
+ |---|---|
163
+ | `--profile fast\|quality\|full` | Choose the profile without asking. On macOS: `mac-fast\|mac-quality\|mac-full` |
164
+ | `--experimental` | Required on macOS, which is untested |
165
+ | `--accept-licenses` | Accept the licenses without asking. Required with `--non-interactive` |
166
+ | `--non-interactive` | Never ask: fail if a decision is missing |
167
+ | `--managed` | Install a ComfyUI of its own, even if another exists |
168
+ | `--attach PATH` | Use the existing ComfyUI in `PATH` |
169
+ | `--install-node` | Allow installing the status node in an attached ComfyUI |
170
+ | `--models-dir PATH` | Keep the models in `PATH`, shared through `extra_model_paths.yaml` |
171
+ | `--port PORT` | Port ComfyUI listens on |
172
+ | `--skip-smoke-test` | Don't generate the test image |
173
+
174
+ Set `HF_TOKEN` if Hugging Face restricts access to a model.
175
+
176
+ #### macOS (untested)
177
+
178
+ **ImageHearth has never been run on a Mac, and macOS is not supported.** To try it, add the flag to the installer: `curl -LsSf https://raw.githubusercontent.com/RealHemoglobin/ImageHearth/main/install.sh | sh -s -- --experimental`. Setup is prepared for Apple Silicon, with GGUF models (`mac-fast` 6.9 GB, `mac-quality` 19.2 GB, `mac-full` 27.6 GB) and the `ComfyUI-GGUF` node. The GGUF workflows were run on an NVIDIA GPU, which checks the graph and the files but not MPS. Macs with Intel aren't supported. If you try it, please report how it went, with the output of `imagehearth-mcp doctor --json`.
179
+
180
+ **Using a ComfyUI you already have.** With `--attach`, or by choosing it when asked, ImageHearth uses it instead of installing another, and doesn't download the models it already has. Your ComfyUI is only changed if you allow the status node to be installed. ComfyUI Desktop has to be open, since ImageHearth can't start it.
181
+
182
+ ### 3. Check, update or remove it
183
+
184
+ The installer doesn't change your `PATH`. If `imagehearth-mcp` isn't found, run `uv tool update-shell` and open a new terminal.
185
+
186
+ ```bash
187
+ imagehearth-mcp doctor
188
+ ```
189
+
190
+ It checks each layer and says how to fix what fails. Add `--json` for a stable format, or `--verify-hashes` to compare the SHA-256 of each model instead of its size. It exits with a non-zero code if something fails.
191
+
192
+ ```bash
193
+ imagehearth-mcp update
194
+ ```
195
+
196
+ It applies the ComfyUI version and models pinned by this version of ImageHearth. An attached ComfyUI is left alone, except for a status node that setup installed.
197
+
198
+ ```bash
199
+ imagehearth-mcp uninstall
200
+ ```
201
+
202
+ It shows what it will remove and removes only what setup and `connect` installed. Models need a separate confirmation (`--remove-models` or `--keep-models` to decide in advance, `--yes` to skip the first question). A ComfyUI or models that were already there are never touched. To remove the command itself, run `uv tool uninstall imagehearth-mcp`.
203
+
204
+ ### Settings (optional)
205
+
206
+ `setup` writes what it needs in `~/.config/imagehearth/config.toml` on Linux and `%APPDATA%\imagehearth\config.toml` on Windows. You can also edit it:
207
+
208
+ ```toml
209
+ comfy_dir = "~/AI/ComfyUI" # where ComfyUI is installed
210
+ comfy_port = 8188 # port ComfyUI listens on
211
+ output_dir = "~/Pictures/ImageHearth"
212
+ ollama_url = "http://127.0.0.1:11434"
213
+ memory_mode = "auto" # "auto", "off" or "manual", see below
214
+ lmstudio_url = "http://127.0.0.1:1234"
215
+ llamacpp_url = "http://127.0.0.1:8080"
216
+ vllm_url = "http://127.0.0.1:8000"
217
+ ```
218
+
219
+ Each key can also be set with an environment variable: `IMAGEHEARTH_COMFY_DIR`, `IMAGEHEARTH_COMFY_PORT`, `IMAGEHEARTH_OUTPUT_DIR`, `IMAGEHEARTH_OLLAMA_URL`, `IMAGEHEARTH_LMSTUDIO_URL`, `IMAGEHEARTH_LLAMACPP_URL`, `IMAGEHEARTH_VLLM_URL` and `IMAGEHEARTH_MEMORY_MODE`. Variables win over the file, and the file wins over the defaults.
220
+
221
+ | `memory_mode` | What happens to your language models |
222
+ |---|---|
223
+ | `auto` | Unloaded before generating and restored afterwards. If a server can't unload (see below), you get a warning with what to do, or an error before starting if the memory isn't enough |
224
+ | `manual` | Never touched. Generation fails with an explanation if the free memory isn't enough |
225
+ | `off` | Never touched, and memory isn't checked |
226
+
227
+ The older `ollama_mode` still works as an alias for `auto` or `off`; `memory_mode` wins if both are set.
228
+
229
+ | Server | Can ImageHearth free its memory? |
230
+ |---|---|
231
+ | Ollama | Yes |
232
+ | LM Studio | Yes, with its REST API v1. Older versions: warning only |
233
+ | llama.cpp | Only in router mode. A single-model `llama-server` can't unload: warning only |
234
+ | vLLM | Only when started with `VLLM_SERVER_DEV_MODE=1` and `--enable-sleep-mode`. Otherwise: warning only |
235
+
236
+ ### 4. Connect your agent
237
+
238
+ The installer already ran `imagehearth-mcp connect --detect`, which finds the installed clients and offers to connect them. Run it again after installing a new one. You can also run `connect <client>`, or `connect --print <client>` to see the snippet without changing anything. It makes a backup, keeps your other entries and can be repeated.
239
+
240
+ **Tested:** Claude Code, Codex, opencode, Hermes and pi. **Untested**, checked against their documentation only: Claude Desktop, Gemini CLI, Cursor, VS Code and JetBrains. Details and snippets are in [`docs/agents.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/agents.md). You can also ask an agent to do the installation with [`llms-install.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/llms-install.md).
241
+
242
+ ### 5. Try it
243
+
244
+ Restart your agent and ask:
245
+
246
+ > Generate an image of a red bicycle on a beach, using the fast quality.
247
+
248
+ ComfyUI starts on its own. The first image takes longer because the model has to load. Images are saved in `~/Pictures/ImageHearth/`.
249
+
250
+ ## Troubleshooting
251
+
252
+ Run `imagehearth-mcp doctor`, or ask your agent to *"check the ImageHearth status"*. Common problems and how to report one are in [`docs/troubleshooting.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/troubleshooting.md).
253
+
254
+ ImageHearth only restarts or stops a ComfyUI it started itself (it records its PID in the data folder). If you run ComfyUI on the same port, ImageHearth uses it but never restarts it.
255
+
256
+ ## Model licenses
257
+
258
+ The models are not part of this project and have their own terms. **By downloading them, you accept those terms.** This summary is not legal advice; see [`THIRD_PARTY_NOTICES.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/THIRD_PARTY_NOTICES.md) for details.
259
+
260
+ | Model | License | Short version |
261
+ |---|---|---|
262
+ | FLUX.1 Dev | [FLUX.1 [dev] Non-Commercial](https://bfl.ai/legal/non-commercial-license-terms) | Non-commercial use of the model |
263
+ | FLUX.1 Kontext Dev | [FLUX.1 [dev] Non-Commercial](https://bfl.ai/legal/non-commercial-license-terms) | Non-commercial use of the model |
264
+ | SDXL Turbo | [Stability AI Community](https://huggingface.co/stabilityai/sdxl-turbo/blob/main/LICENSE.md) | Commercial use requires registration and has a revenue limit |
265
+
266
+ ## Development
267
+
268
+ ```bash
269
+ uv sync
270
+ uv run ruff check .
271
+ uv run pytest
272
+ ```
273
+
274
+ This needs [uv](https://docs.astral.sh/uv/getting-started/installation/), which creates its own environment in `.venv`, separate from ComfyUI's. The tests use simulated servers and don't need a GPU. See [`CONTRIBUTING.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/CONTRIBUTING.md) to contribute, and the [roadmap](https://github.com/RealHemoglobin/ImageHearth/blob/main/specs/roadmap.md) for what's planned. To help test the beta, see [`docs/beta-testing.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/beta-testing.md). To report a vulnerability, see [`SECURITY.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/SECURITY.md).
275
+
276
+ ## License
277
+
278
+ [MIT](https://github.com/RealHemoglobin/ImageHearth/blob/main/LICENSE), except the ComfyUI custom node in [`src/imagehearth_mcp/data/imagehearth_status/`](https://github.com/RealHemoglobin/ImageHearth/blob/main/src/imagehearth_mcp/data/imagehearth_status/LICENSE), which is GPL-3.0. Third-party components and models are listed in [`THIRD_PARTY_NOTICES.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/THIRD_PARTY_NOTICES.md).
@@ -0,0 +1,240 @@
1
+ # ImageHearth
2
+
3
+ **Dale a cualquier agente de IA la capacidad de generar y editar imágenes en tu propio PC.** Sin suscripciones ni nube: tus prompts e imágenes se quedan en tu equipo.
4
+
5
+ ImageHearth es un servidor [MCP](https://modelcontextprotocol.io) que conecta agentes como Claude Code o Codex con [ComfyUI](https://github.com/Comfy-Org/ComfyUI).
6
+
7
+ [Read in English](https://github.com/RealHemoglobin/ImageHearth/blob/main/README.md)
8
+
9
+ **Beta pública.** Se instala con un comando y, si algo falla, [cuéntanoslo](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/troubleshooting.md#reporting-a-problem).
10
+
11
+ ```bash
12
+ # Linux
13
+ curl -LsSf https://raw.githubusercontent.com/RealHemoglobin/ImageHearth/main/install.sh | sh
14
+ ```
15
+
16
+ ```powershell
17
+ # Windows
18
+ irm https://raw.githubusercontent.com/RealHemoglobin/ImageHearth/main/install.ps1 | iex
19
+ ```
20
+
21
+ ## Qué le puedes pedir a tu agente
22
+
23
+ - *"Genera un póster de una ciudad futurista de noche"*: borrador rápido con SDXL Turbo.
24
+ - *"Haz una imagen de alta calidad de 1536x1024 de un castillo medieval"*: FLUX Dev.
25
+ - *"Cambia el fondo de `foto.png` por una montaña nevada"*: FLUX Kontext.
26
+ - *"Combina estas tres fotos en una sola escena"*: hasta seis imágenes de referencia.
27
+
28
+ Si también usas modelos de lenguaje locales, ImageHearth los libera de la memoria de la GPU mientras genera y los restaura después. Ollama se ha probado de verdad; LM Studio, llama.cpp y vLLM, solo con servidores simulados.
29
+
30
+ ## Requisitos
31
+
32
+ | | |
33
+ |---|---|
34
+ | **GPU** | NVIDIA serie 20 o posterior con un controlador actual. Solo medido en una RTX 4090 de 24 GB; consulta las [mediciones](#requisitos-medidos). Con menos memoria puede ir lento o fallar con los modelos FLUX |
35
+ | **Disco** | 7,2 GB para ComfyUI y su entorno, más el perfil que elijas |
36
+ | **Software** | Nada que instalar antes: el script instala [uv](https://docs.astral.sh/uv/), que trae su propio Python. No hace falta Git. [Ollama](https://ollama.com/download) es opcional |
37
+
38
+ ### Soporte
39
+
40
+ Solo se anuncia como soportado lo que se ha ejecutado en hardware real.
41
+
42
+ | Sistema y GPU | Nivel |
43
+ |---|---|
44
+ | Linux, NVIDIA serie 20 o posterior | **Soportado.** Probado en hardware real |
45
+ | Windows 11, NVIDIA serie 20 o posterior | **Objetivo de esta beta.** Falta verificarlo en máquinas limpias |
46
+ | NVIDIA serie 10 o anterior, AMD, Intel Arc, solo CPU | **Experimental.** Se detecta y se ofrece con un aviso, sin haberse probado. Solo con CPU funciona `fast` |
47
+ | macOS con Apple Silicon | **Sin probar.** Preparado tras `--experimental`: consulta [más abajo](#macos-sin-probar) |
48
+
49
+ ### Requisitos medidos
50
+
51
+ Medido con `scripts/measure_profiles.py` a 1024x1024 (Kontext con una referencia): RTX 4090 de 24 GB, controlador 580.178, Linux, ComfyUI 0.43.0, el 2026-10-31.
52
+
53
+ | Workflow | Perfil | Pico de VRAM | Pico de RAM | Primera generación | Siguientes |
54
+ |---|---|---|---|---|---|
55
+ | SDXL Turbo | `fast` | 7,0 GB | 2,6 GB | 3,6 s | 1,0 s |
56
+ | FLUX Dev | `quality` | 17,8 GB | 2,3 GB | 13,8 s | 10,4 s |
57
+ | FLUX Kontext | `full` | 19,3 GB | 2,4 GB | 21,0 s | 18,6 s |
58
+
59
+ - Son picos en una tarjeta de 24 GB, no mínimos: ComfyUI usa la memoria que encuentra y puede descargar parte en tarjetas menores. Los mínimos para otras GPU son solo orientativos.
60
+ - La «primera generación» es tras descargar los modelos de la GPU, con los archivos aún en la caché de disco del sistema. Cargar desde un disco en frío tarda más.
61
+ - Las mediciones de Windows siguen pendientes.
62
+
63
+ > **Nota:** los servidores de modelos locales son opcionales. Si uno no está en marcha, ImageHearth lo ignora y el estado sigue siendo `ready`. Consulta `memory_mode` en los ajustes.
64
+
65
+ ### Un modelo de lenguaje e imágenes en la misma GPU
66
+
67
+ Medido en la misma RTX 4090 con `qwen3.5:9b`, que necesita 14,3 GB con el contexto por defecto de Ollama y 5,9 GB con `num_ctx` 8192. Con `memory_mode = "auto"` da igual: el modelo se descarga mientras se genera y vuelve después. Para tener los dos cargados (`manual` u `off`), la tarjeta debe albergar el modelo de lenguaje más el pico del workflow: con 5,9 GB y SDXL Turbo, la GPU llegó a 19,2 GB, unos 3 GB de ellos del escritorio. Con 5,9 GB y FLUX Dev llenó los 24 GB y funcionó, en 14-16 s, con `memory_mode = "off"`. En `manual`, la generación se rechaza si hay menos de 8 GB libres para SDXL Turbo o de 16 GB para FLUX, así que ese mismo caso se rechaza ahí.
68
+
69
+ ## Instalación
70
+
71
+ ### 1. Ejecuta el instalador
72
+
73
+ Elige el nivel que prefieras. Los tres terminan igual: uv, `imagehearth-mcp`, `setup` y `connect --detect`.
74
+
75
+ **Lo más simple: un comando.** Usa el de tu sistema del [principio de esta página](#imagehearth).
76
+
77
+ **Con el repositorio clonado.** Descarga el código y ejecuta `install`; así puedes leer antes lo que va a hacer:
78
+
79
+ ```bash
80
+ # Linux
81
+ git clone https://github.com/RealHemoglobin/ImageHearth.git
82
+ cd ImageHearth
83
+ ./install.sh
84
+ ```
85
+
86
+ ```powershell
87
+ # Windows
88
+ git clone https://github.com/RealHemoglobin/ImageHearth.git
89
+ cd ImageHearth
90
+ .\install.ps1
91
+ ```
92
+
93
+ Sin Git, descarga el ZIP desde GitHub y ejecuta el mismo script dentro de la carpeta. Desde un clon se instala ese código, no el paquete publicado. Si PowerShell bloquea el script, ejecuta `powershell -ExecutionPolicy Bypass -File .\install.ps1`.
94
+
95
+ **Lo más avanzado: a mano.** Con [uv](https://docs.astral.sh/uv/getting-started/installation/) instalado:
96
+
97
+ ```bash
98
+ uv tool install imagehearth-mcp==0.1.0b1
99
+ imagehearth-mcp setup
100
+ imagehearth-mcp connect --detect
101
+ ```
102
+
103
+ Los scripts son breves: [`install.sh`](https://github.com/RealHemoglobin/ImageHearth/blob/main/install.sh) e [`install.ps1`](https://github.com/RealHemoglobin/ImageHearth/blob/main/install.ps1). Hacen esto:
104
+
105
+ 1. Instalan uv con su instalador oficial, si falta.
106
+ 2. Instalan `imagehearth-mcp`: en una versión fijada, o el código del clon si lo ejecutas desde uno.
107
+ 3. Ejecutan `setup` y `connect --detect`, que te preguntan antes de descargar o cambiar nada.
108
+
109
+ Nunca piden `sudo` ni permisos de administrador, ni aceptan una licencia por ti. Puedes repetirlos sin problema.
110
+
111
+ ### 2. Qué hace setup
112
+
113
+ Setup detecta tu hardware y cualquier ComfyUI existente, propone un perfil y muestra el espacio y las licencias **antes de descargar nada**. Después instala ComfyUI y los modelos y genera una imagen de prueba. Si se interrumpe, vuelve a ejecutarlo y continúa donde se quedó.
114
+
115
+ | Perfil | Qué incluye | Modelos |
116
+ |---|---|---|
117
+ | `fast` | Generación rápida con SDXL Turbo | 6,9 GB |
118
+ | `quality` | `fast` + FLUX Dev | 24,6 GB |
119
+ | `full` | `quality` + edición con FLUX Kontext | 36,5 GB |
120
+
121
+ Puedes empezar con `fast` y ejecutar `setup --profile full` más adelante: lo que ya está no se vuelve a descargar. ImageHearth solo ofrece lo instalado: `list_workflows` lo muestra, un `setup` posterior se nota sin reiniciar nada, y pedir algo que falta da un error con el comando de `setup` exacto, nunca otro modelo en su lugar.
122
+
123
+ | Opción | Uso |
124
+ |---|---|
125
+ | `--profile fast\|quality\|full` | Elige el perfil sin preguntar. En macOS: `mac-fast\|mac-quality\|mac-full` |
126
+ | `--experimental` | Obligatorio en macOS, que está sin probar |
127
+ | `--accept-licenses` | Acepta las licencias sin preguntar. Obligatoria con `--non-interactive` |
128
+ | `--non-interactive` | No pregunta nunca: falla si falta una decisión |
129
+ | `--managed` | Instala un ComfyUI propio, aunque exista otro |
130
+ | `--attach RUTA` | Usa el ComfyUI que hay en `RUTA` |
131
+ | `--install-node` | Permite instalar el nodo de estado en un ComfyUI adjunto |
132
+ | `--models-dir RUTA` | Guarda los modelos en `RUTA` y los comparte con `extra_model_paths.yaml` |
133
+ | `--port PUERTO` | Puerto en el que escucha ComfyUI |
134
+ | `--skip-smoke-test` | No genera la imagen de prueba |
135
+
136
+ Define `HF_TOKEN` si Hugging Face restringe el acceso a un modelo.
137
+
138
+ #### macOS (sin probar)
139
+
140
+ **ImageHearth nunca se ha ejecutado en un Mac, y macOS no tiene soporte.** Para probarlo, añade la opción al instalador: `curl -LsSf https://raw.githubusercontent.com/RealHemoglobin/ImageHearth/main/install.sh | sh -s -- --experimental`. `setup` está preparado para Apple Silicon, con modelos GGUF (`mac-fast` 6,9 GB, `mac-quality` 19,2 GB, `mac-full` 27,6 GB) y el nodo `ComfyUI-GGUF`. Los workflows GGUF se han ejecutado en una GPU NVIDIA, lo que comprueba el grafo y los archivos pero no MPS. Los Mac con Intel no tienen soporte. Si lo pruebas, cuéntanos cómo ha ido, con la salida de `imagehearth-mcp doctor --json`.
141
+
142
+ **Usar un ComfyUI que ya tienes.** Con `--attach`, o eligiéndolo cuando te pregunte, ImageHearth lo usa en lugar de instalar otro y no descarga los modelos que ya tiene. Tu ComfyUI solo cambia si permites instalar el nodo de estado. ComfyUI Desktop debe estar abierto, porque ImageHearth no puede arrancarlo.
143
+
144
+ ### 3. Compruébalo, actualízalo o elimínalo
145
+
146
+ El instalador no cambia tu `PATH`. Si no encuentra `imagehearth-mcp`, ejecuta `uv tool update-shell` y abre otra terminal.
147
+
148
+ ```bash
149
+ imagehearth-mcp doctor
150
+ ```
151
+
152
+ Comprueba cada capa e indica cómo arreglar lo que falle. Añade `--json` para un formato estable, o `--verify-hashes` para comparar el SHA-256 de cada modelo en lugar de su tamaño. Termina con un código distinto de cero si algo falla.
153
+
154
+ ```bash
155
+ imagehearth-mcp update
156
+ ```
157
+
158
+ Aplica la versión de ComfyUI y los modelos que fija esta versión de ImageHearth. Un ComfyUI adjunto no se toca, salvo el nodo de estado que haya instalado setup.
159
+
160
+ ```bash
161
+ imagehearth-mcp uninstall
162
+ ```
163
+
164
+ Muestra qué va a borrar y borra solo lo que instaló setup. Los modelos necesitan una confirmación aparte (`--remove-models` o `--keep-models` para decidirlo de antemano, `--yes` para saltar la primera pregunta). Un ComfyUI o unos modelos que ya estaban nunca se tocan. Para quitar el propio comando, ejecuta `uv tool uninstall imagehearth-mcp`.
165
+
166
+ ### Configuración (opcional)
167
+
168
+ `setup` escribe lo que necesita en `~/.config/imagehearth/config.toml` en Linux y en `%APPDATA%\imagehearth\config.toml` en Windows. También puedes editarlo:
169
+
170
+ ```toml
171
+ comfy_dir = "~/AI/ComfyUI" # dónde está instalado ComfyUI
172
+ comfy_port = 8188 # puerto en el que escucha ComfyUI
173
+ output_dir = "~/Pictures/ImageHearth"
174
+ ollama_url = "http://127.0.0.1:11434"
175
+ memory_mode = "auto" # "auto", "off" o "manual", ver abajo
176
+ lmstudio_url = "http://127.0.0.1:1234"
177
+ llamacpp_url = "http://127.0.0.1:8080"
178
+ vllm_url = "http://127.0.0.1:8000"
179
+ ```
180
+
181
+ Cada clave se puede definir también con una variable de entorno: `IMAGEHEARTH_COMFY_DIR`, `IMAGEHEARTH_COMFY_PORT`, `IMAGEHEARTH_OUTPUT_DIR`, `IMAGEHEARTH_OLLAMA_URL`, `IMAGEHEARTH_LMSTUDIO_URL`, `IMAGEHEARTH_LLAMACPP_URL`, `IMAGEHEARTH_VLLM_URL` e `IMAGEHEARTH_MEMORY_MODE`. Las variables ganan al archivo, y el archivo a los valores por defecto.
182
+
183
+ | `memory_mode` | Qué pasa con tus modelos de lenguaje |
184
+ |---|---|
185
+ | `auto` | Se descargan antes de generar y se restauran después. Si un servidor no puede descargar (ver abajo), recibes un aviso con qué hacer, o un error antes de empezar si la memoria no basta |
186
+ | `manual` | No se tocan. La generación falla con una explicación si la memoria libre no basta |
187
+ | `off` | No se tocan y no se comprueba la memoria |
188
+
189
+ El antiguo `ollama_mode` sigue funcionando como alias de `auto` u `off`; si están los dos, gana `memory_mode`.
190
+
191
+ | Servidor | ¿Puede ImageHearth liberar su memoria? |
192
+ |---|---|
193
+ | Ollama | Sí |
194
+ | LM Studio | Sí, con su API REST v1. Versiones anteriores: solo aviso |
195
+ | llama.cpp | Solo en modo router. Un `llama-server` de un solo modelo no puede descargar: solo aviso |
196
+ | vLLM | Solo si arranca con `VLLM_SERVER_DEV_MODE=1` y `--enable-sleep-mode`. Si no: solo aviso |
197
+
198
+ ### 4. Conecta tu agente
199
+
200
+ El instalador ya ha ejecutado `imagehearth-mcp connect --detect`, que busca los clientes instalados y ofrece conectarlos. Vuelve a ejecutarlo si instalas otro. También puedes usar `connect <cliente>`, o `connect --print <cliente>` para ver el fragmento sin tocar nada. Hace copia de seguridad, conserva tus demás entradas y se puede repetir.
201
+
202
+ **Probados:** Claude Code, Codex, opencode, Hermes y pi. **Sin probar**, contrastados solo con su documentación: Claude Desktop, Gemini CLI, Cursor, VS Code y JetBrains. Detalles y fragmentos en [`docs/agents.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/agents.md). También puedes pedirle la instalación a un agente con [`llms-install.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/llms-install.md).
203
+
204
+ ### 5. Pruébalo
205
+
206
+ Reinicia tu agente y pídele:
207
+
208
+ > Genera una imagen de una bicicleta roja en una playa, con calidad rápida.
209
+
210
+ ComfyUI arranca solo. La primera imagen tarda más porque tiene que cargar el modelo. Las imágenes se guardan en `~/Pictures/ImageHearth/`.
211
+
212
+ ## Solución de problemas
213
+
214
+ Ejecuta `imagehearth-mcp doctor`, o pide a tu agente que *"compruebe el estado de ImageHearth"*. Los problemas frecuentes y cómo informar de uno están en [`docs/troubleshooting.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/troubleshooting.md), en inglés.
215
+
216
+ ImageHearth solo reinicia o detiene un ComfyUI que haya lanzado él mismo (guarda su PID en la carpeta de datos). Si ejecutas ComfyUI en el mismo puerto, lo usa pero nunca lo reinicia.
217
+
218
+ ## Licencias de los modelos
219
+
220
+ Los modelos no forman parte de este proyecto y tienen sus propias condiciones. **Al descargarlos, las aceptas.** Este resumen no es asesoramiento legal; los detalles están en [`THIRD_PARTY_NOTICES.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/THIRD_PARTY_NOTICES.md).
221
+
222
+ | Modelo | Licencia | En resumen |
223
+ |---|---|---|
224
+ | FLUX.1 Dev | [FLUX.1 [dev] Non-Commercial](https://bfl.ai/legal/non-commercial-license-terms) | Uso no comercial del modelo |
225
+ | FLUX.1 Kontext Dev | [FLUX.1 [dev] Non-Commercial](https://bfl.ai/legal/non-commercial-license-terms) | Uso no comercial del modelo |
226
+ | SDXL Turbo | [Stability AI Community](https://huggingface.co/stabilityai/sdxl-turbo/blob/main/LICENSE.md) | El uso comercial exige registro y tiene un límite de ingresos |
227
+
228
+ ## Desarrollo
229
+
230
+ ```bash
231
+ uv sync
232
+ uv run ruff check .
233
+ uv run pytest
234
+ ```
235
+
236
+ Hace falta [uv](https://docs.astral.sh/uv/getting-started/installation/), que crea su propio entorno en `.venv`, separado del de ComfyUI. Los tests usan servidores simulados y no necesitan GPU. Consulta [`CONTRIBUTING.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/CONTRIBUTING.md) para contribuir y el [roadmap](https://github.com/RealHemoglobin/ImageHearth/blob/main/specs/roadmap.md) para ver qué está previsto. Para ayudar a probar la beta, consulta [`docs/beta-testing.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/docs/beta-testing.md). Para avisar de una vulnerabilidad, consulta [`SECURITY.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/SECURITY.md).
237
+
238
+ ## Licencia
239
+
240
+ [MIT](https://github.com/RealHemoglobin/ImageHearth/blob/main/LICENSE), salvo el nodo personalizado de ComfyUI en [`src/imagehearth_mcp/data/imagehearth_status/`](https://github.com/RealHemoglobin/ImageHearth/blob/main/src/imagehearth_mcp/data/imagehearth_status/LICENSE), que es GPL-3.0. Los componentes y modelos de terceros figuran en [`THIRD_PARTY_NOTICES.md`](https://github.com/RealHemoglobin/ImageHearth/blob/main/THIRD_PARTY_NOTICES.md).