blokjutsu 1.0.0rc1__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 (56) hide show
  1. blokjutsu-1.0.0rc1/LICENSE +202 -0
  2. blokjutsu-1.0.0rc1/NOTICE +27 -0
  3. blokjutsu-1.0.0rc1/PKG-INFO +237 -0
  4. blokjutsu-1.0.0rc1/README.md +202 -0
  5. blokjutsu-1.0.0rc1/blokjutsu/__init__.py +3 -0
  6. blokjutsu-1.0.0rc1/blokjutsu/__main__.py +3 -0
  7. blokjutsu-1.0.0rc1/blokjutsu/app.py +148 -0
  8. blokjutsu-1.0.0rc1/blokjutsu/backend.py +531 -0
  9. blokjutsu-1.0.0rc1/blokjutsu/describe.py +228 -0
  10. blokjutsu-1.0.0rc1/blokjutsu/fetch.py +369 -0
  11. blokjutsu-1.0.0rc1/blokjutsu/help_text.py +34 -0
  12. blokjutsu-1.0.0rc1/blokjutsu/img2img.py +188 -0
  13. blokjutsu-1.0.0rc1/blokjutsu/logs.py +55 -0
  14. blokjutsu-1.0.0rc1/blokjutsu/macapp.py +89 -0
  15. blokjutsu-1.0.0rc1/blokjutsu/moss_forward.py +73 -0
  16. blokjutsu-1.0.0rc1/blokjutsu/moss_image.py +445 -0
  17. blokjutsu-1.0.0rc1/blokjutsu/network.py +43 -0
  18. blokjutsu-1.0.0rc1/blokjutsu/params.py +246 -0
  19. blokjutsu-1.0.0rc1/blokjutsu/preview.py +80 -0
  20. blokjutsu-1.0.0rc1/blokjutsu/resources/chevron-down.svg +1 -0
  21. blokjutsu-1.0.0rc1/blokjutsu/resources/chevron-up.svg +1 -0
  22. blokjutsu-1.0.0rc1/blokjutsu/resources/empty.svg +1 -0
  23. blokjutsu-1.0.0rc1/blokjutsu/resources/icon.png +0 -0
  24. blokjutsu-1.0.0rc1/blokjutsu/resources/icon.svg +1 -0
  25. blokjutsu-1.0.0rc1/blokjutsu/samplers.py +72 -0
  26. blokjutsu-1.0.0rc1/blokjutsu/settings.py +94 -0
  27. blokjutsu-1.0.0rc1/blokjutsu/single_instance.py +42 -0
  28. blokjutsu-1.0.0rc1/blokjutsu/sizes.py +73 -0
  29. blokjutsu-1.0.0rc1/blokjutsu/store.py +137 -0
  30. blokjutsu-1.0.0rc1/blokjutsu/ui/__init__.py +0 -0
  31. blokjutsu-1.0.0rc1/blokjutsu/ui/controls.py +694 -0
  32. blokjutsu-1.0.0rc1/blokjutsu/ui/describe_dialog.py +212 -0
  33. blokjutsu-1.0.0rc1/blokjutsu/ui/download_dialog.py +313 -0
  34. blokjutsu-1.0.0rc1/blokjutsu/ui/history.py +463 -0
  35. blokjutsu-1.0.0rc1/blokjutsu/ui/icons.py +78 -0
  36. blokjutsu-1.0.0rc1/blokjutsu/ui/image_cache.py +87 -0
  37. blokjutsu-1.0.0rc1/blokjutsu/ui/image_input.py +115 -0
  38. blokjutsu-1.0.0rc1/blokjutsu/ui/input.py +138 -0
  39. blokjutsu-1.0.0rc1/blokjutsu/ui/main_window.py +678 -0
  40. blokjutsu-1.0.0rc1/blokjutsu/ui/mask_editor.py +412 -0
  41. blokjutsu-1.0.0rc1/blokjutsu/ui/resize_handle.py +44 -0
  42. blokjutsu-1.0.0rc1/blokjutsu/ui/settings_dialog.py +32 -0
  43. blokjutsu-1.0.0rc1/blokjutsu/ui/theme.py +229 -0
  44. blokjutsu-1.0.0rc1/blokjutsu/ui/toggle.py +67 -0
  45. blokjutsu-1.0.0rc1/blokjutsu/ui/widgets.py +45 -0
  46. blokjutsu-1.0.0rc1/blokjutsu/vae_preview.py +80 -0
  47. blokjutsu-1.0.0rc1/blokjutsu/worker.py +113 -0
  48. blokjutsu-1.0.0rc1/blokjutsu.egg-info/PKG-INFO +237 -0
  49. blokjutsu-1.0.0rc1/blokjutsu.egg-info/SOURCES.txt +54 -0
  50. blokjutsu-1.0.0rc1/blokjutsu.egg-info/dependency_links.txt +1 -0
  51. blokjutsu-1.0.0rc1/blokjutsu.egg-info/entry_points.txt +2 -0
  52. blokjutsu-1.0.0rc1/blokjutsu.egg-info/requires.txt +17 -0
  53. blokjutsu-1.0.0rc1/blokjutsu.egg-info/top_level.txt +1 -0
  54. blokjutsu-1.0.0rc1/pyproject.toml +44 -0
  55. blokjutsu-1.0.0rc1/setup.cfg +4 -0
  56. blokjutsu-1.0.0rc1/tests/test_core.py +587 -0
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
@@ -0,0 +1,27 @@
1
+ Blokjutsu
2
+ Copyright 2026 Bob Carpenter
3
+
4
+ This product is licensed under the Apache License, Version 2.0 (see LICENSE).
5
+
6
+ This product is a desktop front end for MOSS-Image, developed by the OpenMOSS Team / MOSI.AI:
7
+ https://github.com/OpenMOSS/MOSS-Image
8
+ MOSS-Image Technical Report, https://arxiv.org/abs/2610.23374
9
+ MOSS-Image's pipeline code and model weights are licensed under the Apache License, Version 2.0.
10
+
11
+ blokjutsu/moss_image.py is MOSS-Image's pipeline code (pipeline_moss_image.py from OpenMOSS-Team/MOSS-Image-SFT),
12
+ copied unchanged; Copyright the OpenMOSS Team / MOSI.AI. The model weights are not included; the app downloads
13
+ them from Hugging Face when the user asks it to.
14
+
15
+ The captioning instructions in blokjutsu/describe.py are adapted from MOSS-Image's USERGUIDE.md (Apache License,
16
+ Version 2.0); the changes are described in that file.
17
+
18
+ blokjutsu/moss_forward.py is adapted from the MOSS-Image transformer's forward pass (Apache License, Version
19
+ 2.0); the changes are described at the top of that file.
20
+
21
+ Models used at run time (downloaded on request, not included):
22
+ MOSS-Image-SFT and MOSS-Image-Base, OpenMOSS Team (Apache-2.0)
23
+ Qwen3.5-9B, Qwen Team, Alibaba Cloud (Apache-2.0): MOSS-Image's text encoder; Blokjutsu also downloads its
24
+ output layer (lm_head) from Qwen/Qwen3.5-9B for Describe image and Enhance prompt
25
+ FLUX.2 VAE, Black Forest Labs (Apache-2.0)
26
+
27
+ Third-party Python libraries are installed separately and keep their own licenses; see README.md.
@@ -0,0 +1,237 @@
1
+ Metadata-Version: 2.4
2
+ Name: blokjutsu
3
+ Version: 1.0.0rc1
4
+ Summary: A local, permissively licensed, open-source Mac app for generating and editing images from text prompts with the open-weight MOSS-Image model
5
+ Author: Bob Carpenter
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://formdo.github.io/blokjutsu/
8
+ Project-URL: Source, https://github.com/formdo/blokjutsu
9
+ Project-URL: Issues, https://github.com/formdo/blokjutsu/issues
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: MacOS X
12
+ Classifier: Intended Audience :: End Users/Desktop
13
+ Classifier: Operating System :: MacOS
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Multimedia :: Graphics
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ License-File: NOTICE
20
+ Requires-Dist: PySide6-Essentials>=6.6
21
+ Requires-Dist: torch>=2.9
22
+ Requires-Dist: torchvision
23
+ Requires-Dist: diffusers>=0.38
24
+ Requires-Dist: transformers>=5.3
25
+ Requires-Dist: accelerate>=1.10
26
+ Requires-Dist: huggingface_hub>=1.0
27
+ Requires-Dist: httpx
28
+ Requires-Dist: safetensors>=0.6
29
+ Requires-Dist: Pillow>=10
30
+ Requires-Dist: numpy
31
+ Requires-Dist: pyobjc-framework-Cocoa; sys_platform == "darwin"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest>=8; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ <p align="center"><img src="blokjutsu/resources/icon.png" width="128" alt="Blokjutsu icon"></p>
37
+
38
+ # Blokjutsu
39
+
40
+ **A local, permissively licensed, open-source Mac app for generating and editing images from text prompts with
41
+ the open-weight [MOSS-Image](https://github.com/OpenMOSS/MOSS-Image) model.**
42
+
43
+ - **Local.** The model runs locally on your Mac. Prompts and images never leave your machine.
44
+ - **Permissive open source ([Apache 2.0](https://en.wikipedia.org/wiki/Apache_License)).** The app, MOSS-Image's
45
+ code, and MOSS-Image's model weights are all under the Apache License 2.0. Use them for anything, commercial or
46
+ not, and change and share them, with no restrictions on what you make.
47
+ - **Download once.** The image model (about 30 GB) and the optional captioning model (2 GB) are downloaded once,
48
+ when you ask. After that, everyday use doesn't go online at all.
49
+
50
+ **Simple on purpose:** a small set of controls designed to work together and to be quick to learn.
51
+
52
+ **Using Blokjutsu?** Start with the [User's Guide](https://formdo.github.io/blokjutsu/): installing, a tour of the
53
+ window, writing prompts, and every control explained.
54
+
55
+ ![The Blokjutsu window: controls on the left; on the right, an image of three bowls of ice cream on a diner counter with handwritten cards reading CHOCOLATE, CHERRY, and PLAIN](docs/assets/screenshots/main-window.webp)
56
+
57
+ ## What Blokjutsu does
58
+
59
+ - Text to image, image to image, variations, inpainting, outpainting, cropping, and upscaling
60
+ - Describe image and Enhance prompt, written by MOSS-Image's own text encoder
61
+ - Live previews, a scrolling history, and each image's settings saved beside it
62
+
63
+ ## Open source all the way down
64
+
65
+ With Blokjutsu, the model, the code that runs it, and the app around it are all yours to run, keep, and adapt.
66
+
67
+ Every part of Blokjutsu is released under the [Apache License 2.0](LICENSE), a
68
+ [permissive](https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses) open-source
69
+ license:
70
+
71
+ - **Blokjutsu's source code**, in this repository
72
+ - **MOSS-Image's code**, the pipeline that turns a prompt into an image
73
+ - **MOSS-Image's model weights**, including the Qwen3.5-9B text encoder and FLUX.2 image decoder they contain
74
+
75
+ Apache 2.0 lets anyone use, study, change, and share all of it, for any purpose, commercial or not, at no cost,
76
+ and with no sign-up. The conditions are light: keep the license and copyright notices, and say what you changed.
77
+ It also grants the patent rights needed to use the code. The libraries Blokjutsu builds on are open source too
78
+ (see [What it uses](#what-it-uses)).
79
+
80
+ ## Requirements
81
+
82
+ - A Mac with Apple silicon (M1 or later) and macOS 12.3 or later
83
+ - 32 GB of memory or more; 48 GB or more is comfortable, and smaller Macs work slowly, if at all
84
+ - About 40 GB of free disk space, mostly for the model
85
+
86
+ ## Install
87
+
88
+ **Mac users:** open Terminal and paste
89
+
90
+ ```sh
91
+ curl -LsSf https://formdo.github.io/blokjutsu/install.sh | sh
92
+ ```
93
+
94
+ This installs Python and Blokjutsu into `~/Library/Application Support/Blokjutsu.noindex/` and puts
95
+ **Blokjutsu** in your Applications folder. Nothing else on your Mac is changed. See the
96
+ [User's Guide](https://formdo.github.io/blokjutsu/install.html) for details and uninstalling.
97
+
98
+ **Python developers:** Blokjutsu needs Python 3.10 or later. We strongly suggest installing it in its own virtual
99
+ environment. The exact library versions it was tested with are in [constraints.txt](constraints.txt), which pip
100
+ can use with `-c constraints.txt`.
101
+
102
+ ```sh
103
+ python3 -m venv .venv
104
+ source .venv/bin/activate
105
+ pip install blokjutsu
106
+ blokjutsu
107
+ ```
108
+
109
+ ## Built on MOSS-Image
110
+
111
+ Blokjutsu is an independent desktop front end for **MOSS-Image**, the text-to-image model and pipeline by the
112
+ [OpenMOSS Team](https://github.com/OpenMOSS) and [MOSI.AI](https://mosi.cn/). Blokjutsu is not affiliated with or
113
+ endorsed by them. All of the image-making is theirs.
114
+
115
+ - Repository: https://github.com/OpenMOSS/MOSS-Image
116
+ - Technical report: https://arxiv.org/abs/2610.23374
117
+ - User guide: https://github.com/OpenMOSS/MOSS-Image/blob/main/USERGUIDE.md
118
+
119
+ If you use images or results from Blokjutsu in research, please cite MOSS-Image:
120
+
121
+ ```bibtex
122
+ @misc{mossimage2026,
123
+ title = {MOSS-Image},
124
+ author = {{OpenMOSS Team}},
125
+ year = {2026},
126
+ howpublished = {\url{https://github.com/OpenMOSS/MOSS-Image}}
127
+ }
128
+ @misc{mossimage2026report,
129
+ title = {MOSS-Image Technical Report},
130
+ author = {{MOSI.AI}},
131
+ year = {2026},
132
+ eprint = {2610.23374},
133
+ archivePrefix = {arXiv},
134
+ url = {https://arxiv.org/abs/2610.23374}
135
+ }
136
+ ```
137
+
138
+ ## What it uses
139
+
140
+ The models are downloaded from [Hugging Face](https://huggingface.co), a site that hosts open AI models, and
141
+ only when you ask. MOSS-Image's model is published there as MOSS-Image-SFT; its text encoder and image decoder
142
+ come from Qwen and FLUX.2 and are included in that download.
143
+
144
+ | model | by | license | role |
145
+ |---|---|---|---|
146
+ | [MOSS-Image-SFT](https://huggingface.co/OpenMOSS-Team/MOSS-Image-SFT) | OpenMOSS Team | Apache-2.0 | MOSS-Image's model, used by default |
147
+ | [MOSS-Image-Base](https://huggingface.co/OpenMOSS-Team/MOSS-Image-Base) | OpenMOSS Team | Apache-2.0 | the untuned model, for people training their own versions (optional) |
148
+ | [Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B) | Qwen Team, Alibaba Cloud | Apache-2.0 | reads prompts (part of MOSS-Image); with its output layer, downloaded separately, writes descriptions |
149
+ | [FLUX.2 VAE](https://github.com/black-forest-labs/flux2) | Black Forest Labs | Apache-2.0 | turns the model's output into pixels (part of MOSS-Image) |
150
+
151
+ Python libraries, installed alongside:
152
+
153
+ | library | license | role |
154
+ |---|---|---|
155
+ | [PyTorch](https://pytorch.org), torchvision | BSD-3-Clause | numerical engine on the Apple GPU |
156
+ | [Diffusers](https://github.com/huggingface/diffusers) | Apache-2.0 | runs the MOSS-Image pipeline |
157
+ | [Transformers](https://github.com/huggingface/transformers), Accelerate | Apache-2.0 | text encoder, describing |
158
+ | [huggingface_hub](https://github.com/huggingface/huggingface_hub), safetensors | Apache-2.0 | model files and downloads |
159
+ | [httpx](https://www.python-httpx.org) | BSD-3-Clause | the confirmed downloads |
160
+ | [PySide6 / Qt](https://www.qt.io/qt-for-python) | LGPL-3.0 | the window and controls |
161
+ | [Pillow](https://python-pillow.org) | MIT-CMU | image files |
162
+ | [NumPy](https://numpy.org) | BSD-3-Clause | arrays |
163
+ | [PyObjC](https://github.com/ronaldoussoren/pyobjc) | MIT | macOS system icons and app name |
164
+
165
+ ## Local by design
166
+
167
+ Blokjutsu runs the model on your Mac's own processor and memory. It uses the internet only once to initially
168
+ download the models, and then, only after a confirmation dialog. After the models are downloaded once, Blokjutsu
169
+ works completely offline. It does not go online to generate, edit, or store images. It does not go online to
170
+ check for updates to itself.
171
+
172
+ Images are saved as plain PNG files that hold only the image. If you want, a setting in Advanced options also
173
+ writes each image's prompt and settings into the PNG.
174
+
175
+ ### What Blokjutsu keeps on your Mac
176
+
177
+ | what | where | Delete all history |
178
+ |---|---|---|
179
+ | your images, each with its settings and any image you started from | the Output folder you choose (by default `~/Library/Application Support/Blokjutsu.noindex/images/`) | deleted, in every Output folder used |
180
+ | the log, for troubleshooting | `~/Library/Application Support/Blokjutsu.noindex/logs/` | emptied |
181
+ | working copies from Select area to change | `…/Blokjutsu.noindex/work/` | deleted |
182
+ | a small file the live preview needs, built from your images | `…/Blokjutsu.noindex/preview/` | deleted |
183
+ | your settings, including the last prompt | `…/Blokjutsu.noindex/settings.json` | prompt reset, preferences kept |
184
+ | the captioning model | `…/Blokjutsu.noindex/caption/` | kept |
185
+ | the image model | `…/Blokjutsu.noindex/models/` | kept |
186
+ | the app and the Python it runs on | `~/Applications/Blokjutsu.app`, `…/Blokjutsu.noindex/tools/`, and `…/Blokjutsu.noindex/runtime/` | kept |
187
+
188
+ The whole `…/Blokjutsu.noindex` folder is kept out of Time Machine backups and Spotlight. To back up your images,
189
+ choose an Output folder elsewhere, such as `~/Pictures/Blokjutsu`.
190
+
191
+ **Delete all history** (in the File menu) removes everything made from your prompts and images and keeps your
192
+ preferences and the models. The [User's Guide](https://formdo.github.io/blokjutsu/local.html) has the details, including what macOS itself
193
+ remembers.
194
+
195
+ ## Contributing
196
+
197
+ [CONTRIBUTING.md](CONTRIBUTING.md) explains how to set up a development environment, run the tests, and build the
198
+ Mac app. Architecture and technical notes are in the [developer pages](https://formdo.github.io/blokjutsu/developers.html).
199
+
200
+ ## Roadmap
201
+
202
+ What comes next is in [ROADMAP.md](ROADMAP.md).
203
+
204
+ ## Bug reports and feature requests
205
+
206
+ Please report bugs and request features as [GitHub issues](https://github.com/formdo/blokjutsu/issues). For help
207
+ using Blokjutsu, see the [User's Guide](https://formdo.github.io/blokjutsu/) and its
208
+ [Troubleshooting](https://formdo.github.io/blokjutsu/troubleshooting.html) page.
209
+
210
+ ## Etymology
211
+
212
+ **Blokjutsu** (BLOK-joot-soo, /ˈblɒk.dʒuː.tsuː/), *noun*. The art of the block.
213
+
214
+ From Danish *blok*, "block," and Japanese *jutsu* (術, じゅつ), "art" or "technique." The name comes from how
215
+ MOSS-Image works: it treats an image as blocks of pixels, each 16 × 16 square one unit for the model, and
216
+ transforms them step by step from noise into the finished image.
217
+
218
+ ## Design inspiration
219
+
220
+ The block designs in the icon and the app draw on
221
+
222
+ - the [Kohs block design test](https://en.wikipedia.org/wiki/Kohs_block_design_test), introduced by Samuel C.
223
+ Kohs in 1920: colored cubes, some faces split diagonally, arranged to match a pattern
224
+ - [Froebel's gifts](https://en.wikipedia.org/wiki/Froebel_gifts), the wooden building blocks of Friedrich
225
+ Fröbel's first kindergartens
226
+ - the primary colors and simple geometry of the [Bauhaus](https://en.wikipedia.org/wiki/Bauhaus)
227
+
228
+ ## Authors
229
+
230
+ Blokjutsu was written by Bob Carpenter together with Claude, Anthropic's AI model.
231
+
232
+ ## License
233
+
234
+ Copyright 2026 Bob Carpenter. Apache License 2.0; see [LICENSE](LICENSE) and [NOTICE](NOTICE).
235
+ `blokjutsu/moss_image.py` is MOSS-Image's pipeline code, copied unchanged, and `blokjutsu/moss_forward.py` is
236
+ adapted from it (both Apache-2.0). "MOSS-Image" is the OpenMOSS Team's name and is used here only to say what
237
+ this app runs.
@@ -0,0 +1,202 @@
1
+ <p align="center"><img src="blokjutsu/resources/icon.png" width="128" alt="Blokjutsu icon"></p>
2
+
3
+ # Blokjutsu
4
+
5
+ **A local, permissively licensed, open-source Mac app for generating and editing images from text prompts with
6
+ the open-weight [MOSS-Image](https://github.com/OpenMOSS/MOSS-Image) model.**
7
+
8
+ - **Local.** The model runs locally on your Mac. Prompts and images never leave your machine.
9
+ - **Permissive open source ([Apache 2.0](https://en.wikipedia.org/wiki/Apache_License)).** The app, MOSS-Image's
10
+ code, and MOSS-Image's model weights are all under the Apache License 2.0. Use them for anything, commercial or
11
+ not, and change and share them, with no restrictions on what you make.
12
+ - **Download once.** The image model (about 30 GB) and the optional captioning model (2 GB) are downloaded once,
13
+ when you ask. After that, everyday use doesn't go online at all.
14
+
15
+ **Simple on purpose:** a small set of controls designed to work together and to be quick to learn.
16
+
17
+ **Using Blokjutsu?** Start with the [User's Guide](https://formdo.github.io/blokjutsu/): installing, a tour of the
18
+ window, writing prompts, and every control explained.
19
+
20
+ ![The Blokjutsu window: controls on the left; on the right, an image of three bowls of ice cream on a diner counter with handwritten cards reading CHOCOLATE, CHERRY, and PLAIN](docs/assets/screenshots/main-window.webp)
21
+
22
+ ## What Blokjutsu does
23
+
24
+ - Text to image, image to image, variations, inpainting, outpainting, cropping, and upscaling
25
+ - Describe image and Enhance prompt, written by MOSS-Image's own text encoder
26
+ - Live previews, a scrolling history, and each image's settings saved beside it
27
+
28
+ ## Open source all the way down
29
+
30
+ With Blokjutsu, the model, the code that runs it, and the app around it are all yours to run, keep, and adapt.
31
+
32
+ Every part of Blokjutsu is released under the [Apache License 2.0](LICENSE), a
33
+ [permissive](https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses) open-source
34
+ license:
35
+
36
+ - **Blokjutsu's source code**, in this repository
37
+ - **MOSS-Image's code**, the pipeline that turns a prompt into an image
38
+ - **MOSS-Image's model weights**, including the Qwen3.5-9B text encoder and FLUX.2 image decoder they contain
39
+
40
+ Apache 2.0 lets anyone use, study, change, and share all of it, for any purpose, commercial or not, at no cost,
41
+ and with no sign-up. The conditions are light: keep the license and copyright notices, and say what you changed.
42
+ It also grants the patent rights needed to use the code. The libraries Blokjutsu builds on are open source too
43
+ (see [What it uses](#what-it-uses)).
44
+
45
+ ## Requirements
46
+
47
+ - A Mac with Apple silicon (M1 or later) and macOS 12.3 or later
48
+ - 32 GB of memory or more; 48 GB or more is comfortable, and smaller Macs work slowly, if at all
49
+ - About 40 GB of free disk space, mostly for the model
50
+
51
+ ## Install
52
+
53
+ **Mac users:** open Terminal and paste
54
+
55
+ ```sh
56
+ curl -LsSf https://formdo.github.io/blokjutsu/install.sh | sh
57
+ ```
58
+
59
+ This installs Python and Blokjutsu into `~/Library/Application Support/Blokjutsu.noindex/` and puts
60
+ **Blokjutsu** in your Applications folder. Nothing else on your Mac is changed. See the
61
+ [User's Guide](https://formdo.github.io/blokjutsu/install.html) for details and uninstalling.
62
+
63
+ **Python developers:** Blokjutsu needs Python 3.10 or later. We strongly suggest installing it in its own virtual
64
+ environment. The exact library versions it was tested with are in [constraints.txt](constraints.txt), which pip
65
+ can use with `-c constraints.txt`.
66
+
67
+ ```sh
68
+ python3 -m venv .venv
69
+ source .venv/bin/activate
70
+ pip install blokjutsu
71
+ blokjutsu
72
+ ```
73
+
74
+ ## Built on MOSS-Image
75
+
76
+ Blokjutsu is an independent desktop front end for **MOSS-Image**, the text-to-image model and pipeline by the
77
+ [OpenMOSS Team](https://github.com/OpenMOSS) and [MOSI.AI](https://mosi.cn/). Blokjutsu is not affiliated with or
78
+ endorsed by them. All of the image-making is theirs.
79
+
80
+ - Repository: https://github.com/OpenMOSS/MOSS-Image
81
+ - Technical report: https://arxiv.org/abs/2610.23374
82
+ - User guide: https://github.com/OpenMOSS/MOSS-Image/blob/main/USERGUIDE.md
83
+
84
+ If you use images or results from Blokjutsu in research, please cite MOSS-Image:
85
+
86
+ ```bibtex
87
+ @misc{mossimage2026,
88
+ title = {MOSS-Image},
89
+ author = {{OpenMOSS Team}},
90
+ year = {2026},
91
+ howpublished = {\url{https://github.com/OpenMOSS/MOSS-Image}}
92
+ }
93
+ @misc{mossimage2026report,
94
+ title = {MOSS-Image Technical Report},
95
+ author = {{MOSI.AI}},
96
+ year = {2026},
97
+ eprint = {2610.23374},
98
+ archivePrefix = {arXiv},
99
+ url = {https://arxiv.org/abs/2610.23374}
100
+ }
101
+ ```
102
+
103
+ ## What it uses
104
+
105
+ The models are downloaded from [Hugging Face](https://huggingface.co), a site that hosts open AI models, and
106
+ only when you ask. MOSS-Image's model is published there as MOSS-Image-SFT; its text encoder and image decoder
107
+ come from Qwen and FLUX.2 and are included in that download.
108
+
109
+ | model | by | license | role |
110
+ |---|---|---|---|
111
+ | [MOSS-Image-SFT](https://huggingface.co/OpenMOSS-Team/MOSS-Image-SFT) | OpenMOSS Team | Apache-2.0 | MOSS-Image's model, used by default |
112
+ | [MOSS-Image-Base](https://huggingface.co/OpenMOSS-Team/MOSS-Image-Base) | OpenMOSS Team | Apache-2.0 | the untuned model, for people training their own versions (optional) |
113
+ | [Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B) | Qwen Team, Alibaba Cloud | Apache-2.0 | reads prompts (part of MOSS-Image); with its output layer, downloaded separately, writes descriptions |
114
+ | [FLUX.2 VAE](https://github.com/black-forest-labs/flux2) | Black Forest Labs | Apache-2.0 | turns the model's output into pixels (part of MOSS-Image) |
115
+
116
+ Python libraries, installed alongside:
117
+
118
+ | library | license | role |
119
+ |---|---|---|
120
+ | [PyTorch](https://pytorch.org), torchvision | BSD-3-Clause | numerical engine on the Apple GPU |
121
+ | [Diffusers](https://github.com/huggingface/diffusers) | Apache-2.0 | runs the MOSS-Image pipeline |
122
+ | [Transformers](https://github.com/huggingface/transformers), Accelerate | Apache-2.0 | text encoder, describing |
123
+ | [huggingface_hub](https://github.com/huggingface/huggingface_hub), safetensors | Apache-2.0 | model files and downloads |
124
+ | [httpx](https://www.python-httpx.org) | BSD-3-Clause | the confirmed downloads |
125
+ | [PySide6 / Qt](https://www.qt.io/qt-for-python) | LGPL-3.0 | the window and controls |
126
+ | [Pillow](https://python-pillow.org) | MIT-CMU | image files |
127
+ | [NumPy](https://numpy.org) | BSD-3-Clause | arrays |
128
+ | [PyObjC](https://github.com/ronaldoussoren/pyobjc) | MIT | macOS system icons and app name |
129
+
130
+ ## Local by design
131
+
132
+ Blokjutsu runs the model on your Mac's own processor and memory. It uses the internet only once to initially
133
+ download the models, and then, only after a confirmation dialog. After the models are downloaded once, Blokjutsu
134
+ works completely offline. It does not go online to generate, edit, or store images. It does not go online to
135
+ check for updates to itself.
136
+
137
+ Images are saved as plain PNG files that hold only the image. If you want, a setting in Advanced options also
138
+ writes each image's prompt and settings into the PNG.
139
+
140
+ ### What Blokjutsu keeps on your Mac
141
+
142
+ | what | where | Delete all history |
143
+ |---|---|---|
144
+ | your images, each with its settings and any image you started from | the Output folder you choose (by default `~/Library/Application Support/Blokjutsu.noindex/images/`) | deleted, in every Output folder used |
145
+ | the log, for troubleshooting | `~/Library/Application Support/Blokjutsu.noindex/logs/` | emptied |
146
+ | working copies from Select area to change | `…/Blokjutsu.noindex/work/` | deleted |
147
+ | a small file the live preview needs, built from your images | `…/Blokjutsu.noindex/preview/` | deleted |
148
+ | your settings, including the last prompt | `…/Blokjutsu.noindex/settings.json` | prompt reset, preferences kept |
149
+ | the captioning model | `…/Blokjutsu.noindex/caption/` | kept |
150
+ | the image model | `…/Blokjutsu.noindex/models/` | kept |
151
+ | the app and the Python it runs on | `~/Applications/Blokjutsu.app`, `…/Blokjutsu.noindex/tools/`, and `…/Blokjutsu.noindex/runtime/` | kept |
152
+
153
+ The whole `…/Blokjutsu.noindex` folder is kept out of Time Machine backups and Spotlight. To back up your images,
154
+ choose an Output folder elsewhere, such as `~/Pictures/Blokjutsu`.
155
+
156
+ **Delete all history** (in the File menu) removes everything made from your prompts and images and keeps your
157
+ preferences and the models. The [User's Guide](https://formdo.github.io/blokjutsu/local.html) has the details, including what macOS itself
158
+ remembers.
159
+
160
+ ## Contributing
161
+
162
+ [CONTRIBUTING.md](CONTRIBUTING.md) explains how to set up a development environment, run the tests, and build the
163
+ Mac app. Architecture and technical notes are in the [developer pages](https://formdo.github.io/blokjutsu/developers.html).
164
+
165
+ ## Roadmap
166
+
167
+ What comes next is in [ROADMAP.md](ROADMAP.md).
168
+
169
+ ## Bug reports and feature requests
170
+
171
+ Please report bugs and request features as [GitHub issues](https://github.com/formdo/blokjutsu/issues). For help
172
+ using Blokjutsu, see the [User's Guide](https://formdo.github.io/blokjutsu/) and its
173
+ [Troubleshooting](https://formdo.github.io/blokjutsu/troubleshooting.html) page.
174
+
175
+ ## Etymology
176
+
177
+ **Blokjutsu** (BLOK-joot-soo, /ˈblɒk.dʒuː.tsuː/), *noun*. The art of the block.
178
+
179
+ From Danish *blok*, "block," and Japanese *jutsu* (術, じゅつ), "art" or "technique." The name comes from how
180
+ MOSS-Image works: it treats an image as blocks of pixels, each 16 × 16 square one unit for the model, and
181
+ transforms them step by step from noise into the finished image.
182
+
183
+ ## Design inspiration
184
+
185
+ The block designs in the icon and the app draw on
186
+
187
+ - the [Kohs block design test](https://en.wikipedia.org/wiki/Kohs_block_design_test), introduced by Samuel C.
188
+ Kohs in 1920: colored cubes, some faces split diagonally, arranged to match a pattern
189
+ - [Froebel's gifts](https://en.wikipedia.org/wiki/Froebel_gifts), the wooden building blocks of Friedrich
190
+ Fröbel's first kindergartens
191
+ - the primary colors and simple geometry of the [Bauhaus](https://en.wikipedia.org/wiki/Bauhaus)
192
+
193
+ ## Authors
194
+
195
+ Blokjutsu was written by Bob Carpenter together with Claude, Anthropic's AI model.
196
+
197
+ ## License
198
+
199
+ Copyright 2026 Bob Carpenter. Apache License 2.0; see [LICENSE](LICENSE) and [NOTICE](NOTICE).
200
+ `blokjutsu/moss_image.py` is MOSS-Image's pipeline code, copied unchanged, and `blokjutsu/moss_forward.py` is
201
+ adapted from it (both Apache-2.0). "MOSS-Image" is the OpenMOSS Team's name and is used here only to say what
202
+ this app runs.