MProcs 8.3.5__tar.gz → 8.8__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.
- mprocs-8.8/PKG-INFO +16 -0
- mprocs-8.8/README.md +3 -0
- mprocs-8.8/pyproject.toml +37 -0
- mprocs-8.8/src/MProcs/scripts/__init__.py +5 -0
- mprocs-8.8/src/MProcs/scripts/ai_image.py +255 -0
- mprocs-8.8/src/MProcs/scripts/bible.txt +1 -0
- mprocs-8.8/src/MProcs/scripts/data/acadlist.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/bible1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/biology1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/chemistry1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/chi_chars.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/degrees1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/dhammapada1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/diction.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/fcci.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/hospitals.json +3652 -0
- mprocs-8.8/src/MProcs/scripts/data/jamo.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/katakana.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/koran1.json +6238 -0
- mprocs-8.8/src/MProcs/scripts/data/legal_terms1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/medicals1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/mims.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/proverbs.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/psychology1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/science1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/strains.json +2209 -0
- mprocs-8.8/src/MProcs/scripts/data/tracks.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data/verses1.json +1 -0
- mprocs-8.8/src/MProcs/scripts/data_loader.py +34 -0
- mprocs-8.8/src/MProcs/scripts/deepseek_ai.py +493 -0
- mprocs-8.8/src/MProcs/scripts/keys.py +97 -0
- mprocs-8.8/src/MProcs/scripts/lpro.py +9579 -0
- mprocs-8.8/src/MProcs/scripts/lpro_s.py +7223 -0
- mprocs-8.8/src/MProcs/scripts/main.py +42 -0
- mprocs-8.8/src/MProcs/scripts/scmpy.py +2567 -0
- mprocs-8.8/src/MProcs/scripts/session.py +2 -0
- mprocs-8.8/src/MProcs/scripts/tui.py +942 -0
- mprocs-8.8/src/MProcs/scripts/version_checker.py +76 -0
- mprocs-8.8/src/MProcs/scripts/wrappers.py +102 -0
- mprocs-8.8/src/MProcs.egg-info/PKG-INFO +16 -0
- mprocs-8.8/src/MProcs.egg-info/SOURCES.txt +45 -0
- mprocs-8.8/src/MProcs.egg-info/entry_points.txt +5 -0
- mprocs-8.8/src/MProcs.egg-info/requires.txt +5 -0
- mprocs-8.3.5/LICENSE +0 -19
- mprocs-8.3.5/PKG-INFO +0 -32
- mprocs-8.3.5/pyproject.toml +0 -24
- mprocs-8.3.5/src/MProcs/scripts/MProcs.py +0 -7896
- mprocs-8.3.5/src/MProcs/scripts/__init__.py +0 -0
- mprocs-8.3.5/src/MProcs.egg-info/PKG-INFO +0 -32
- mprocs-8.3.5/src/MProcs.egg-info/SOURCES.txt +0 -10
- mprocs-8.3.5/src/MProcs.egg-info/entry_points.txt +0 -2
- {mprocs-8.3.5 → mprocs-8.8}/setup.cfg +0 -0
- {mprocs-8.3.5 → mprocs-8.8}/src/MProcs/__init__.py +0 -0
- {mprocs-8.3.5 → mprocs-8.8}/src/MProcs.egg-info/dependency_links.txt +0 -0
- {mprocs-8.3.5 → mprocs-8.8}/src/MProcs.egg-info/top_level.txt +0 -0
mprocs-8.8/PKG-INFO
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: MProcs
|
|
3
|
+
Version: 8.8
|
|
4
|
+
Summary: MProcs - derived from NeonBunny
|
|
5
|
+
Author-email: tderk <usvu.tech@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.8
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Provides-Extra: dev
|
|
10
|
+
Requires-Dist: pytest; extra == "dev"
|
|
11
|
+
Requires-Dist: black; extra == "dev"
|
|
12
|
+
Requires-Dist: flake8; extra == "dev"
|
|
13
|
+
|
|
14
|
+
# MProcs
|
|
15
|
+
|
|
16
|
+
Derived from NeonBunny. A Life program by tderk, originally LPro.py and Destiny [2024].
|
mprocs-8.8/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "MProcs"
|
|
7
|
+
version = "8.8"
|
|
8
|
+
description = "MProcs - derived from NeonBunny"
|
|
9
|
+
requires-python = ">=3.8"
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "tderk", email = "usvu.tech@gmail.com" }
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
[project.scripts]
|
|
17
|
+
MProcs = "MProcs.scripts.main:run"
|
|
18
|
+
mprocs = "MProcs.scripts.main:run"
|
|
19
|
+
lpro = "MProcs.scripts.lpro:main"
|
|
20
|
+
lpro-s = "MProcs.scripts.lpro_s:main"
|
|
21
|
+
|
|
22
|
+
[tool.setuptools]
|
|
23
|
+
package-dir = {"" = "src"}
|
|
24
|
+
|
|
25
|
+
[tool.setuptools.packages.find]
|
|
26
|
+
where = ["src"]
|
|
27
|
+
include = ["MProcs*", "MProcs.*"]
|
|
28
|
+
exclude = ["tests*", "docs*", "venv*", "build*", "dist*", "*test*"]
|
|
29
|
+
|
|
30
|
+
[tool.setuptools.package-data]
|
|
31
|
+
"MProcs" = ["py.typed"]
|
|
32
|
+
"MProcs.scripts" = ["*.txt", "*.md", "*.json", "data/*", "logs/*"]
|
|
33
|
+
|
|
34
|
+
dependencies = ["requests", "ddgs"]
|
|
35
|
+
|
|
36
|
+
[project.optional-dependencies]
|
|
37
|
+
dev = ["pytest", "black", "flake8"]
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
import time
|
|
4
|
+
import logging
|
|
5
|
+
import subprocess
|
|
6
|
+
import glob
|
|
7
|
+
|
|
8
|
+
logging.getLogger("huggingface_hub").setLevel(logging.ERROR)
|
|
9
|
+
|
|
10
|
+
os.environ.setdefault("HF_TOKEN", "0")
|
|
11
|
+
os.environ["HF_HUB_DISABLE_TELEMETRY"] = "1"
|
|
12
|
+
os.environ.setdefault("TRANSFORMERS_VERBOSITY", "error")
|
|
13
|
+
|
|
14
|
+
MODELS = {
|
|
15
|
+
"LCM Dreamshaper": ("SimianLuo/LCM_Dreamshaper_v7", 4, "4-step fast generation (default)"),
|
|
16
|
+
"Balanced": ("nota-ai/bk-sdm-small", 15, "Lightweight general purpose"),
|
|
17
|
+
"Anime": ("gsdf/Counterfeit-V2.5", 15, "Public anime / illustration style"),
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
SIZE_OPTIONS = [
|
|
21
|
+
("256x256", 256, 256),
|
|
22
|
+
("320x320", 320, 320),
|
|
23
|
+
("384x384", 384, 384),
|
|
24
|
+
("448x448", 448, 448),
|
|
25
|
+
("512x512", 512, 512),
|
|
26
|
+
("512x768", 512, 768),
|
|
27
|
+
("768x512", 768, 512),
|
|
28
|
+
("768x768", 768, 768),
|
|
29
|
+
("1024x1024", 1024, 1024),
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
def is_termux():
|
|
33
|
+
if not os.path.exists('/data/data/com.termux/files/usr/bin/termux-open'):
|
|
34
|
+
return False
|
|
35
|
+
if os.path.exists('/etc/debian_version') or os.path.exists('/etc/lsb-release'):
|
|
36
|
+
return False
|
|
37
|
+
return True
|
|
38
|
+
|
|
39
|
+
def ensure_deps():
|
|
40
|
+
if is_termux():
|
|
41
|
+
print("\nAI image generation requires PyTorch, which is not available on Termux (Android).")
|
|
42
|
+
print("Use this feature on a desktop Linux system instead.")
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
deps = [
|
|
46
|
+
("torch", "torch", ["--extra-index-url", "https://download.pytorch.org/whl/cpu"]),
|
|
47
|
+
("diffusers", "diffusers", []),
|
|
48
|
+
("transformers", "transformers", []),
|
|
49
|
+
("PIL", "Pillow", []),
|
|
50
|
+
("tqdm", "tqdm", []),
|
|
51
|
+
("huggingface_hub", "huggingface-hub", []),
|
|
52
|
+
]
|
|
53
|
+
missing = []
|
|
54
|
+
for mod_name, pkg_name, extra_args in deps:
|
|
55
|
+
try:
|
|
56
|
+
__import__(mod_name)
|
|
57
|
+
except ImportError:
|
|
58
|
+
missing.append((mod_name, pkg_name, extra_args))
|
|
59
|
+
|
|
60
|
+
if not missing:
|
|
61
|
+
return True
|
|
62
|
+
|
|
63
|
+
print("\n=== Missing Dependencies for AI Image Generation ===")
|
|
64
|
+
for _, pkg_name, _ in missing:
|
|
65
|
+
print(f" - {pkg_name}")
|
|
66
|
+
print()
|
|
67
|
+
print(" 1. Install dependencies (recommended)")
|
|
68
|
+
print(" 2. Cancel")
|
|
69
|
+
resp = input("Choose (1-2): ").strip()
|
|
70
|
+
if resp != "1":
|
|
71
|
+
print("Cancelled.")
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
for mod_name, pkg_name, extra_args in missing:
|
|
75
|
+
print(f"\nInstalling {pkg_name}...", flush=True)
|
|
76
|
+
cmd = [sys.executable, '-m', 'pip', 'install', pkg_name]
|
|
77
|
+
cmd.extend(extra_args)
|
|
78
|
+
result = subprocess.run(cmd)
|
|
79
|
+
if result.returncode == 0:
|
|
80
|
+
print(f"{pkg_name} installed.", flush=True)
|
|
81
|
+
else:
|
|
82
|
+
print(f"Failed to install {pkg_name}.", flush=True)
|
|
83
|
+
resp = input("Retry with --break-system-packages? (y/N): ").strip().lower()
|
|
84
|
+
if resp == "y":
|
|
85
|
+
cmd = [sys.executable, '-m', 'pip', 'install', '--break-system-packages', pkg_name]
|
|
86
|
+
cmd.extend(extra_args)
|
|
87
|
+
result = subprocess.run(cmd)
|
|
88
|
+
if result.returncode == 0:
|
|
89
|
+
print(f"{pkg_name} installed.", flush=True)
|
|
90
|
+
else:
|
|
91
|
+
print(f"Still failed to install {pkg_name}.", flush=True)
|
|
92
|
+
return False
|
|
93
|
+
else:
|
|
94
|
+
return False
|
|
95
|
+
|
|
96
|
+
for mod_name, pkg_name, _ in missing:
|
|
97
|
+
__import__(mod_name)
|
|
98
|
+
|
|
99
|
+
return True
|
|
100
|
+
|
|
101
|
+
CLIP_MAX_TOKENS = 77
|
|
102
|
+
|
|
103
|
+
def _pre_truncate(text):
|
|
104
|
+
words = text.split()
|
|
105
|
+
if len(words) <= CLIP_MAX_TOKENS - 2:
|
|
106
|
+
return text
|
|
107
|
+
return " ".join(words[:CLIP_MAX_TOKENS - 2])
|
|
108
|
+
|
|
109
|
+
def clean_cache(model_id):
|
|
110
|
+
from huggingface_hub import constants
|
|
111
|
+
|
|
112
|
+
model_cache = os.path.join(constants.default_cache_path, "models--" + model_id.replace("/", "--"))
|
|
113
|
+
for f in glob.glob(os.path.join(model_cache, "blobs", "*.incomplete")):
|
|
114
|
+
os.remove(f)
|
|
115
|
+
for f in glob.glob(os.path.join(constants.default_cache_path, ".locks", "models--" + model_id.replace("/", "--"), "*.lock")):
|
|
116
|
+
os.remove(f)
|
|
117
|
+
|
|
118
|
+
def run(default_prompt=""):
|
|
119
|
+
if not ensure_deps():
|
|
120
|
+
return
|
|
121
|
+
|
|
122
|
+
import torch
|
|
123
|
+
from tqdm import tqdm
|
|
124
|
+
from diffusers import DiffusionPipeline
|
|
125
|
+
|
|
126
|
+
save_dir = os.path.join(os.getcwd(), "ai_images")
|
|
127
|
+
os.makedirs(save_dir, exist_ok=True)
|
|
128
|
+
|
|
129
|
+
print()
|
|
130
|
+
print("=== AI Image Generation ===")
|
|
131
|
+
print()
|
|
132
|
+
|
|
133
|
+
if default_prompt:
|
|
134
|
+
truncated_prompt = _pre_truncate(default_prompt)
|
|
135
|
+
prompt = input(f"Image prompt [Default= {truncated_prompt}]: ").strip()
|
|
136
|
+
if not prompt:
|
|
137
|
+
prompt = truncated_prompt
|
|
138
|
+
else:
|
|
139
|
+
prompt = input("Image prompt: ").strip()
|
|
140
|
+
if not prompt:
|
|
141
|
+
print("No prompt entered.")
|
|
142
|
+
return
|
|
143
|
+
|
|
144
|
+
print()
|
|
145
|
+
print("Models:")
|
|
146
|
+
model_keys = list(MODELS.keys())
|
|
147
|
+
for i, name in enumerate(model_keys, 1):
|
|
148
|
+
_, _, desc = MODELS[name]
|
|
149
|
+
default_mark = " (default)" if i == 1 else ""
|
|
150
|
+
print(f" {i}. {name}{default_mark}")
|
|
151
|
+
model_choice = input(f"Model (1-{len(model_keys)}, Enter=1): ").strip()
|
|
152
|
+
if not model_choice:
|
|
153
|
+
model_idx = 0
|
|
154
|
+
else:
|
|
155
|
+
try:
|
|
156
|
+
model_idx = int(model_choice) - 1
|
|
157
|
+
model_idx = max(0, min(model_idx, len(model_keys) - 1))
|
|
158
|
+
except ValueError:
|
|
159
|
+
model_idx = 0
|
|
160
|
+
model_name = model_keys[model_idx]
|
|
161
|
+
model_id, default_steps, _ = MODELS[model_name]
|
|
162
|
+
|
|
163
|
+
steps_input = input(f"Steps (Enter={default_steps}): ").strip()
|
|
164
|
+
steps = int(steps_input) if steps_input else default_steps
|
|
165
|
+
|
|
166
|
+
guidance_input = input(f"Guidance (Enter=7.5): ").strip()
|
|
167
|
+
guidance = float(guidance_input) if guidance_input else 7.5
|
|
168
|
+
|
|
169
|
+
print()
|
|
170
|
+
print("Image sizes:")
|
|
171
|
+
for i, (label, w, h) in enumerate(SIZE_OPTIONS, 1):
|
|
172
|
+
default_mark = " (default)" if i == 5 else ""
|
|
173
|
+
print(f" {i}. {label}{default_mark}")
|
|
174
|
+
size_choice = input(f"Size (1-{len(SIZE_OPTIONS)}, Enter=5): ").strip()
|
|
175
|
+
if not size_choice:
|
|
176
|
+
size_idx = 4
|
|
177
|
+
else:
|
|
178
|
+
try:
|
|
179
|
+
size_idx = int(size_choice) - 1
|
|
180
|
+
size_idx = max(0, min(size_idx, len(SIZE_OPTIONS) - 1))
|
|
181
|
+
except ValueError:
|
|
182
|
+
size_idx = 4
|
|
183
|
+
_, width, height = SIZE_OPTIONS[size_idx]
|
|
184
|
+
|
|
185
|
+
seed_input = input(f"Seed (Enter=-1 for random): ").strip()
|
|
186
|
+
seed = int(seed_input) if seed_input else -1
|
|
187
|
+
|
|
188
|
+
print()
|
|
189
|
+
print(f"Model: {model_name} ({model_id})")
|
|
190
|
+
print(f"Steps: {steps}")
|
|
191
|
+
print(f"Guidance: {guidance}")
|
|
192
|
+
print(f"Size: {width}x{height}")
|
|
193
|
+
print(f"Seed: {'random' if seed == -1 else seed}")
|
|
194
|
+
print(f"Output folder: {save_dir}/")
|
|
195
|
+
print()
|
|
196
|
+
|
|
197
|
+
confirm = input("Generate? (Y/n): ").strip().lower()
|
|
198
|
+
if confirm == "n":
|
|
199
|
+
print("Cancelled.")
|
|
200
|
+
return
|
|
201
|
+
|
|
202
|
+
print(f"\nLoading model {model_name}...", flush=True)
|
|
203
|
+
start = time.time()
|
|
204
|
+
|
|
205
|
+
clean_cache(model_id)
|
|
206
|
+
|
|
207
|
+
pipe = DiffusionPipeline.from_pretrained(
|
|
208
|
+
model_id, safety_checker=None, requires_safety_checker=False
|
|
209
|
+
)
|
|
210
|
+
pipe.to("cpu")
|
|
211
|
+
pipe.enable_attention_slicing()
|
|
212
|
+
|
|
213
|
+
print(f"Model loaded in {time.time()-start:.1f}s", flush=True)
|
|
214
|
+
|
|
215
|
+
gen = torch.Generator("cpu").manual_seed(seed) if seed != -1 else None
|
|
216
|
+
|
|
217
|
+
bar = tqdm(total=steps, desc="Generating", unit="step")
|
|
218
|
+
|
|
219
|
+
def cb(_, step, ___, cb_kwargs):
|
|
220
|
+
bar.update(1)
|
|
221
|
+
return cb_kwargs
|
|
222
|
+
|
|
223
|
+
tokens = pipe.tokenizer(prompt, truncation=True, max_length=77, return_tensors="pt")
|
|
224
|
+
truncated = pipe.tokenizer.decode(tokens.input_ids[0], skip_special_tokens=True)
|
|
225
|
+
if truncated != prompt:
|
|
226
|
+
print(f"Prompt truncated to {len(tokens.input_ids[0])} CLIP tokens.")
|
|
227
|
+
prompt = truncated
|
|
228
|
+
|
|
229
|
+
gen_start = time.time()
|
|
230
|
+
image = pipe(
|
|
231
|
+
prompt,
|
|
232
|
+
num_inference_steps=steps,
|
|
233
|
+
guidance_scale=guidance,
|
|
234
|
+
width=width,
|
|
235
|
+
height=height,
|
|
236
|
+
generator=gen,
|
|
237
|
+
callback_on_step_end=cb,
|
|
238
|
+
).images[0]
|
|
239
|
+
bar.close()
|
|
240
|
+
gen_time = time.time() - gen_start
|
|
241
|
+
|
|
242
|
+
timestamp = int(time.time())
|
|
243
|
+
filename = f"ai_image_{timestamp}.png"
|
|
244
|
+
filepath = os.path.join(save_dir, filename)
|
|
245
|
+
image.save(filepath)
|
|
246
|
+
|
|
247
|
+
print()
|
|
248
|
+
print(f"Prompt: {prompt}")
|
|
249
|
+
print(f"Generated in {gen_time:.1f}s")
|
|
250
|
+
print(f"Saved: {filepath}")
|
|
251
|
+
print(f"file://{filepath}")
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
if __name__ == "__main__":
|
|
255
|
+
run()
|