genmodelfit 0.2.0__tar.gz → 0.4.0__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.
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/CHANGELOG.md +99 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/CONTRIBUTING.md +74 -37
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/PKG-INFO +142 -6
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/README.md +141 -5
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/accuracy.md +58 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/license_requests.md +1 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/release.md +100 -2
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/schema.md +251 -9
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/sources.md +14 -5
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/__init__.py +39 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/_version.py +1 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/calibrate.py +97 -4
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/cli.py +921 -1
- genmodelfit-0.4.0/src/genmodelfit/contrib.py +1357 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/data/calibration.json +51 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/data/db.json +2079 -1729
- genmodelfit-0.4.0/src/genmodelfit/data/measurements_community.json +8 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/db.py +8 -1
- genmodelfit-0.4.0/src/genmodelfit/diff.py +277 -0
- genmodelfit-0.4.0/src/genmodelfit/downloader.py +1167 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/estimate.py +123 -10
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/models.py +21 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/recommend.py +9 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/safety.py +8 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/update.py +65 -11
- genmodelfit-0.4.0/src/genmodelfit/weekly.py +587 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/clihelp.py +7 -0
- genmodelfit-0.4.0/tests/fixtures/contrib/rtx-3070/2026-10-20-5bedb2da.json +37 -0
- genmodelfit-0.4.0/tests/fixtures/contrib/rtx-3070/2026-10-20-78740c83.json +37 -0
- genmodelfit-0.4.0/tests/fixtures/contrib/rtx-3070/2026-10-20-ccef2c3e.json +37 -0
- genmodelfit-0.4.0/tests/fixtures/contrib/rtx-4060/2026-10-21-e361ba52.json +37 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_search/direction_-1_filter_not-for-all-audiences_limit_100_pipeline_tag_text-to-image_sort_downloads.json +23 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_search/direction_-1_limit_100_pipeline_tag_text-to-speech_sort_trendingScore.json +19 -4
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_cli_casual.py +27 -5
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_cli_json.py +15 -4
- genmodelfit-0.4.0/tests/test_contrib.py +1036 -0
- genmodelfit-0.4.0/tests/test_diff.py +219 -0
- genmodelfit-0.4.0/tests/test_download.py +1063 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_groups.py +1 -1
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_license_sources.py +18 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_privacy_pc.py +36 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_release.py +1 -1
- genmodelfit-0.4.0/tests/test_safety_dataset.py +31 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_status.py +25 -10
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_update.py +36 -2
- genmodelfit-0.4.0/tests/test_weekly.py +364 -0
- genmodelfit-0.4.0/tests/test_workflows.py +125 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/.gitignore +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/LICENSE +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/THIRD_PARTY_NOTICES +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/gate.md +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/docs/hardware.md +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/pyproject.toml +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/__main__.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/bench.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/data/__init__.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/data/measurements.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/data/signing_keys/2026-10.pub +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/families.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/fetch.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/gate.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/groups.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/hardware.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/headers.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/hf.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/license_sources.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/py.typed +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/remote.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/repo_precision.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/signing.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/status.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/table.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/tasks.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/src/genmodelfit/workflow.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/conftest.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/3d_hunyuan3d_image_to_model.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/audio_ace_step_1_5_checkpoint.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/lspci_amd_nvidia.txt +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_garbage.txt +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_multi.csv +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_na.csv +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_no_devices.txt +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_no_driver.txt +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_old_error.txt +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_old_kepler.csv +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_old_maxwell.csv +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_rtx3070_win.csv +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/registry_amd_stale.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/registry_this_pc.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_amd_single.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_basic_nvidia.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_intel_nvidia.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_this_pc.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/image_sdxl_simple.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/image_z_image_turbo_int8.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/object_info_subset.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/text_to_video_wan.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/ACE-Step__Ace-Step1.5.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/AtomicChat__Qwen-Image-2.1-Turbo-Uncensored-GGUF.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__Wan_2.1_ComfyUI_repackaged.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__ace_step_1.5_ComfyUI_files.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__hunyuan3D_2.0_repackaged.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__stable-audio-open-1.0_repackaged.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__z_image_turbo.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/ComfyUI-Wiki__t5-base.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/MeiGen-AI__InfiniteTalk.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Noctaluna__Noct-Q-Uncensored-Qwen-Image-2.1.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Qwen__Qwen-Image-2.1.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Qwen__Qwen3-VL-8B-Instruct.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Tongyi-MAI__Z-Image-Turbo.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-FLF2V-14B-720P.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-I2V-14B-480P.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-I2V-14B-720P.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-T2V-1.3B.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-T2V-14B.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-VACE-1.3B.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-VACE-14B.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-1.3B-Control-Camera.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-1.3B-Control.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-1.3B-InP.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-14B-Control-Camera.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/example-org__plain-nsfw-xl.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/hexgrad__Kokoro-82M.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/htdong__Wan-Alpha.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/stabilityai__stable-audio-open-1.0.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/tencent__Hunyuan3D-2.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/tencent__Hunyuan3D-2mv.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/yl4579__StyleTTS2-LJSpeech.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/AtomicChat__Qwen-Image-2.1-Turbo-Uncensored-GGUF.md +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/Noctaluna__Noct-Q-Uncensored-Qwen-Image-2.1.md +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/example-org__plain-nsfw-xl.md +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/hexgrad__Kokoro-82M.md +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_search/direction_-1_limit_100_pipeline_tag_text-to-image_search_uncensored_sort_downloads.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_search/direction_-1_limit_100_pipeline_tag_text-to-speech_sort_downloads.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/3d_hunyuan3d_image_to_model.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/audio_ace_step_1_5_checkpoint.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/audio_stable_audio_example.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/image_z_image_turbo.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/image_z_image_turbo_int8.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/index.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/templates-wan2_1_infinitetalk_music.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/fixtures/video_wan2_2_14B_i2v.json +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_bench.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_bench_rtx3070.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_core.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_embedding.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_estimate.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_families.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_gate.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_gate_real.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_hardware.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_invariants.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_issue_28.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_issue_30.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_licenses.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_privacy.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_review_14.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_review_fixes.py +0 -0
- {genmodelfit-0.2.0 → genmodelfit-0.4.0}/tests/test_table.py +0 -0
|
@@ -7,7 +7,105 @@ All notable changes to this project are documented here. The format is based on
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [0.
|
|
10
|
+
## [0.4.0] - 2026-10-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `genmodelfit diff OLD NEW [--json]` and `gmf.diff_db(old, new)` (Issue #19): what changed between two lists —
|
|
15
|
+
added / removed models, license changes (changes toward the permissive side are marked), auto-recommendation
|
|
16
|
+
changes under one policy for both lists (HEAD age ignored), size / precision changes beyond a threshold, newly
|
|
17
|
+
uncensored models, failed HEAD checks, 401 repos and changed `sources` numbers. JSON: docs/schema.md "diff".
|
|
18
|
+
2 つの一覧の違いをまとめる `diff` を足した。
|
|
19
|
+
- Weekly data refresh (Issue #19): `.github/workflows/weekly-data.yml` rebuilds the list every Monday with
|
|
20
|
+
`python -m genmodelfit.weekly` (caches kept between runs), checks it (auto count, the HEAD expiry must be more than
|
|
21
|
+
7 days away, ruff and pytest with the new list) and opens a pull request `automated/weekly-data` whose body is the
|
|
22
|
+
diff. It is never merged automatically; publishing stays in data.yml after the owner merges. A partial rebuild
|
|
23
|
+
fails unless run by hand with `allow_partial` and only HF repos failed transiently. docs/release.md.
|
|
24
|
+
毎週、作り直した一覧を PR にする(自動ではマージしない。配るのはマージした一覧だけ)。
|
|
25
|
+
|
|
26
|
+
- Measurement submissions from users (Issue #34). `genmodelfit bench … --submission PATH` and
|
|
27
|
+
`genmodelfit contrib make --from <bench result>` write a submission file (`contrib_schema` 1:
|
|
28
|
+
`data/contrib/<gpu>/<date>-<sha8>.json`) with the GPU name / VRAM / generation / compute capability / driver, the ComfyUI
|
|
29
|
+
version, the OS family, RAM rounded to GiB and the results — never host / user names, paths, GPU UUID, PCI address,
|
|
30
|
+
IP, CPU name or exact times (the note is scrubbed). genmodelfit sends nothing; users open the pull request themselves.
|
|
31
|
+
`contrib show` prints exactly what will be shared with a privacy checklist; `contrib validate` checks schema, value
|
|
32
|
+
ranges, privacy patterns, GPU name / generation consistency, file name and duplicates (exit 0 / 1 / 2);
|
|
33
|
+
`.github/workflows/contrib.yml` runs it on pull requests touching `data/contrib/**` (read-only, the tool installed
|
|
34
|
+
from the base commit, results in the job summary). `contrib aggregate` groups submissions by model, settings and GPU
|
|
35
|
+
with median / MAD outlier removal into the new bundled `measurements_community.json` (empty for now), and
|
|
36
|
+
`--report` re-runs the calibration and flags errors above a threshold (default 25%, exit 3 with `--fail-on-breach`)
|
|
37
|
+
for the weekly job of #19.
|
|
38
|
+
- `Estimate.basis_detail` (`measured` > `measured_community` > `calibrated` > `estimated`); `basis` stays
|
|
39
|
+
`measured` / `estimated`. Community measurements are used only when at least two consistent submissions agree (and
|
|
40
|
+
no OOM), rank after the maintainer's measurements at the same settings, and can only raise the needs (never lower
|
|
41
|
+
VRAM / RAM, never improve a level, never raise the score: `basis` points 0 like estimates). `validate` marks
|
|
42
|
+
implausible values (more than 40% from the formula, below the weights with `offload: none`), values that would raise
|
|
43
|
+
the estimate by more than 15% or change a level at common VRAM / RAM sizes, unknown models and unknown GPUs as
|
|
44
|
+
review-required; approval is per submission (`--allow-review <sha8>` or the maintainers' `data/contrib/REVIEWED`).
|
|
45
|
+
Unapproved community rows raise needs by at most 15% and are ignored where they would change the level.
|
|
46
|
+
`aggregate --report` lists the level changes caused by community data.
|
|
47
|
+
- `torch_reserved` measurements (bench; without the CUDA context) are now lower bounds: below the formula they no
|
|
48
|
+
longer lower the estimate (the bundled RTX 3070 rows for BiRefNet and MoGe now use the formula value).
|
|
49
|
+
`Measurement.origin` / `n_submissions` / `consistent` (optional fields).
|
|
50
|
+
- `python -m genmodelfit.calibrate` also writes the check rows (measurements in another `vram_metric`, such as the
|
|
51
|
+
RTX 3070 runs) to `calibration.json` (`check`) and the accuracy table; LOO rows carry `gpu_name` and `origin`.
|
|
52
|
+
Coefficients are unchanged.
|
|
53
|
+
利用者の実測の提出(作る・見る・検査・まとめ・毎週の精度の点検)と、根拠の段階 `basis_detail` を足した。
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- Hugging Face selection (Issue #19): the 1,000 all-time floor for models found only by the trending / likes30d
|
|
58
|
+
searches now needs a trendingScore of at least 0.5 and at least 100 downloads in the last 30 days (otherwise
|
|
59
|
+
10,000 applies); repo names containing `merge` / `mergekit` are skipped like the tag; quantized / format copies
|
|
60
|
+
are recognized by name (`-GGUF`, `-Q8_0`, `_K_M`, `-fp8`, `-nf4`, `-int8`, `_diffusers`, `-Quantized`, …) and
|
|
61
|
+
only the most downloaded is kept; uncensored models also need 100 downloads in the last 30 days.
|
|
62
|
+
HF の選び方を締めた(伸びている条件・名前の merge・量子化の写し・無検閲は直近 30 日も使われているもの)。
|
|
63
|
+
- The bundled list was rebuilt with these rules (326 entries: HF 48, uncensored 26; auto 99 unchanged).
|
|
64
|
+
Added: 6 uncensored HF models that meet the rules and the new official template `video_fasth3_ominiref_r2v`;
|
|
65
|
+
removed: `hf:0xSojalSec/Qwen-Image-2.1-Uncensored-GGUF` (a quantized copy of
|
|
66
|
+
`hf:abenzerps/Qwen-Image-2.1-Uncensored-Quantized`) and `hf:TheImposterImposters/lustifySDXLNSFW_v20-inpainting`
|
|
67
|
+
(the same weights, by sha256, as the more downloaded `hf:andro-flock/LUSTIFY-SDXL-NSFW-checkpoint-v2-0-INPAINTING`).
|
|
68
|
+
同梱の一覧を新しい規則で作り直した。
|
|
69
|
+
- Weekly PR body: every upstream string is HTML-escaped and Markdown-neutralized (`weekly.md`), mentions are
|
|
70
|
+
broken, truncation keeps `<details>` balanced; a scheduled run fails when more than 5 entries become uncensored
|
|
71
|
+
or when HF / template / uncensored / auto counts fall below half.
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
|
|
75
|
+
- Exclusion (safety): uncensored models whose ID, name, tags or card mention a dataset known to include a category
|
|
76
|
+
of sexual content involving minors (`DATASET_TERMS`: e621) are excluded, even when that is not their purpose
|
|
77
|
+
(owner decision, 2026-10-21; `hf:hearmeneigh/sd21-e621-rising-v2` and `hf:Laxhar/noobai-XL-1.1` — its card says it was trained on the full Danbooru and e621 datasets — removed from the bundled list).
|
|
78
|
+
学習データに未成年の性的表現の分類を含む画像の集まり(e621)を使う無検閲のモデルは外す(安全側)。
|
|
79
|
+
|
|
80
|
+
- When a Hugging Face repo was renamed, `update` applied the license-source table with the new name from the API
|
|
81
|
+
while re-applying it uses the name in the file URL, so the two disagreed (`license_path`). Both now use the URL's
|
|
82
|
+
name. Found by the first weekly rebuild (Comfy-Org/flux2-klein-9B → vae-text-encorder-for-flux-klein-9b).
|
|
83
|
+
リポジトリの名前が変わったとき、出どころの表をファイルの URL の名前で当てるようにした。
|
|
84
|
+
- Tests no longer pin numbers of the bundled list (uncensored count, HEAD check date) so that the weekly rebuild
|
|
85
|
+
can pass them.
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## [0.3.0] - 2026-10-21
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
|
|
92
|
+
- `genmodelfit download <model>` and `gmf.plan_download()` / `gmf.download()` (Issue #31): download all files of a
|
|
93
|
+
model's workflow, with the precision chosen like `recommend` (`--precision`, `--budget GB`), into a ComfyUI folder by
|
|
94
|
+
each file's template folder (`--comfyui-dir`) or the same layout elsewhere (`--output-dir`). `--list` shows the plan
|
|
95
|
+
without any network access. Before downloading it shows every file's license and URL, the total size and the free
|
|
96
|
+
disk and asks for consent (`--yes` to skip). sha256 is checked while writing (a mismatch deletes the file),
|
|
97
|
+
`.part` files resume with HTTP Range, files already there are skipped, and it needs the download + 1 GB free.
|
|
98
|
+
Gated files, uncensored models (unless `--content all|uncensored`) and unknown licenses (unless
|
|
99
|
+
`--include-unknown-license`) are refused; only https URLs on Hugging Face / GitHub hosts are followed (each
|
|
100
|
+
redirect is checked, and URLs that urlsplit and urllib3 would read as different hosts are refused before
|
|
101
|
+
connecting); nothing is written outside the destination. Existing files are hashed again right before they
|
|
102
|
+
are skipped, restarts against servers that ignore Range are capped, and a `.lock` file stops two downloads of
|
|
103
|
+
the same file. URL paths may contain spaces (they are percent-encoded as requests does); spaces, `%` and `@` are
|
|
104
|
+
refused only in the scheme and host, and refusals say whether the URL is malformed or the host is not allowed.
|
|
105
|
+
JSON: docs/schema.md "download".
|
|
106
|
+
モデルを落とす `download` を足した(同意・sha256・続きから・ComfyUI のフォルダ)。
|
|
107
|
+
|
|
108
|
+
## [0.2.0] - 2026-10-20
|
|
11
109
|
|
|
12
110
|
Fewer unknowns in the table and a clear meaning for `?` and `-` (Issue #30). The JSON output changes in a way that
|
|
13
111
|
can break apps (below), so this is a minor release under 0.x semver (owner's decision).
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
genmodelfit の見積もりは、実際の PC で測った値(実測)があるとそれを優先します。いろいろな GPU の実測が
|
|
4
4
|
集まるほど、見積もりが正確になります。`genmodelfit bench` で測った結果を Pull Request で送ってください。
|
|
5
5
|
|
|
6
|
-
**English summary:** Run `genmodelfit bench <template> --url http://127.0.0.1:<port
|
|
7
|
-
|
|
8
|
-
`
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
**English summary:** Run `genmodelfit bench <template> --url http://127.0.0.1:<port> --submission data/contrib/`
|
|
7
|
+
against your own ComfyUI (in a clone of your fork). It writes a submission file
|
|
8
|
+
`data/contrib/<gpu>/<date>-<sha8>.json` (`contrib_schema` 1: GPU name / VRAM / generation / driver, ComfyUI version,
|
|
9
|
+
OS family, RAM rounded to GiB, the model, settings and results). Check exactly what will be shared with
|
|
10
|
+
`genmodelfit contrib show <file>` (it also runs a privacy checklist), then open a pull request that adds only that file.
|
|
11
|
+
**genmodelfit itself never sends anything**; sharing happens only through the pull request you open. The file never
|
|
12
|
+
contains your host name, user name, paths, GPU UUID, PCI address, IP, CPU name or exact time. CI runs
|
|
13
|
+
`genmodelfit contrib validate` on the pull request. Out-of-memory runs are welcome too (`outcome: "oom"`).
|
|
14
|
+
Already have a saved bench result? `genmodelfit contrib make --from <file>` converts it.
|
|
13
15
|
|
|
14
16
|
**License of contributions:** genmodelfit (code and bundled data) is under MPL-2.0. By opening a pull request you
|
|
15
17
|
agree that your contribution (code, measurements or other data) is licensed under MPL-2.0 like the rest of the
|
|
@@ -77,44 +79,79 @@ genmodelfit bench 3d_hunyuan3d_image_to_model --url http://127.0.0.1:8188 --step
|
|
|
77
79
|
`--output パス` を付けます。「標準でない」結果も同じで、`--save-nonstandard` か `--output` で保存できます。
|
|
78
80
|
見積もりは `outcome` が `ok` で `standard` が `true` の実測だけを使います。
|
|
79
81
|
|
|
80
|
-
## 2.
|
|
82
|
+
## 2. 提出用の JSON を作る
|
|
81
83
|
|
|
82
|
-
bench
|
|
83
|
-
保存先を表示します(`--output` で場所を変えられます)。キャッシュに置いた実測は、その PC の `genmodelfit` の見積もりにすぐ使われます。
|
|
84
|
+
自分のフォーク(GitHub の Fork)を手元に clone し、そのフォルダで bench に `--submission` を付けて測ります。
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
```powershell
|
|
87
|
+
git clone https://github.com/<あなたの名前>/genmodelfit
|
|
88
|
+
cd genmodelfit
|
|
89
|
+
genmodelfit bench image_sdxl_simple --url http://127.0.0.1:8188 --resolution 832x832 --submission data/contrib/
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- `--submission` にフォルダを渡すと、`data/contrib/<GPU>/<日付>-<sha8>.json` という名前で書きます
|
|
93
|
+
(例 `data/contrib/rtx-3070/2026-10-21-1a2b3c4d.json`。`sha8` は中身の sha256 の先頭 8 桁)。ファイル名を渡せばその名前で書きます
|
|
94
|
+
- 前に測って保存した結果(`<キャッシュ>/measurements/….json` や `--output` のファイル)からも作れます:
|
|
95
|
+
`genmodelfit contrib make --from <bench の結果> --output data/contrib/`
|
|
96
|
+
(ComfyUI が別の PC だったときは `--no-pc-info` を付けると、この PC の OS・メモリ・GPU の世代を入れません)
|
|
97
|
+
- 失敗(OOM)の結果も、そのまま出してください。標準でない条件の結果は記録として受け付けますが、まとめには使いません
|
|
98
|
+
|
|
99
|
+
### 入るもの・入らないもの
|
|
100
|
+
|
|
101
|
+
| 入るもの | 例 |
|
|
102
|
+
|---|---|
|
|
103
|
+
| GPU の名前・VRAM の総量・世代・compute capability・ドライバの版 | `NVIDIA GeForce RTX 3070`, `8.0`, `ampere`, `8.6`, `566.03` |
|
|
104
|
+
| ComfyUI の版、OS の種類(版・ビルドは入れない)、メインメモリ(GiB の整数に丸める) | `0.40.0`, `windows`, `32` |
|
|
105
|
+
| モデル ID・設定・結果・最大 VRAM / メモリ・時間・載せ方・測り方 | `image_sdxl_simple`, `832x832`, `ok`, `6.9` … |
|
|
106
|
+
| 日付(UTC の日付だけ) | `2026-10-21` |
|
|
107
|
+
| メモ(note。bench が書いた測り方の説明) | パス・URL・PC 名・ユーザ名・メール・UUID・IP・時刻らしい文字を含む文は、文ごと消す |
|
|
108
|
+
|
|
109
|
+
**入らないもの**: PC の名前、ユーザー名、フォルダのパス、GPU の UUID、PCI の差し場所、シリアル番号、IP / MAC アドレス、
|
|
110
|
+
CPU の名前、時刻、bench の `--source` に書いた文、プロンプト。決まった項目以外は CI の検査で断ります。
|
|
111
|
+
ただし自動の点検は文字の形を見るだけで、note に普通の言葉で書いた名前(「山田太郎の PC で測った」など)や、base64 などで
|
|
112
|
+
書き換えたパスは見分けられません(下の 3 で自分で読んでください)。
|
|
113
|
+
|
|
114
|
+
## 3. 中身を確かめる(送る前に必ず)
|
|
115
|
+
|
|
116
|
+
```powershell
|
|
117
|
+
genmodelfit contrib show data/contrib/rtx-3070/2026-10-21-1a2b3c4d.json
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
ファイルの中身をすべて読める形で出し、個人の情報の点検(パス・PC 名・ユーザ名・UUID・PCI・IP・URL・メール・時刻・
|
|
121
|
+
知らない項目が無いか。この PC の名前・ユーザ名が入っていないかも見ます)の結果を `[ok]` / `[NG]` で出します。
|
|
122
|
+
|
|
123
|
+
- `[NG]` があれば、直してから出してください(手で書き換えたら、名前の `sha8` が変わるので `contrib validate` が
|
|
124
|
+
正しい名前を教えます)
|
|
125
|
+
- **note(メモ)は自分で読んでください**。自動の点検は文の意味までは分かりません。気になる文は消して構いません
|
|
126
|
+
- `genmodelfit contrib validate data/contrib` で、CI と同じ検査を手元で動かせます
|
|
127
|
+
- 「要確認」(review)は、式の見積もりから 40% より外れた値・全部 GPU に載せたのに重みより小さい値・見積もりを 15% より
|
|
128
|
+
上げる値・よくある VRAM で段階を変える値・一覧に無いモデル・知らない GPU です。誤りではありませんが、PR を見る人が
|
|
129
|
+
確かめるまで受け付けません(測り直すか、PR の説明に事情を書いてください)。確かめた提出は、作者が
|
|
130
|
+
`data/contrib/REVIEWED` に sha8 と理由を書きます(提出の PR ではこのファイルを変えないでください。CI が失敗にします)
|
|
131
|
+
|
|
132
|
+
## 4. 送る(Pull Request)
|
|
86
133
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
134
|
+
1. 足すのは `data/contrib/<GPU>/<日付>-<sha8>.json` のファイルだけにします(ほかのファイルは変えない。コードの変更は別の PR に)
|
|
135
|
+
2. コミットして自分のフォークに push し、Pull Request を作ります。説明に、ComfyUI の起動オプション
|
|
136
|
+
(`--lowvram` など、変えたものだけ)を書いてもらえると助かります。個人名やメールアドレスは不要です
|
|
137
|
+
3. CI(`Contrib` のワークフロー)が `genmodelfit contrib validate` で形・値の範囲・個人の情報・重複・ファイル名を検査し、
|
|
138
|
+
結果をジョブのまとめ(Summary)に出します。検査は、PR の向き先(main)の genmodelfit で動きます
|
|
91
139
|
|
|
92
|
-
|
|
140
|
+
**genmodelfit は何も送りません**。共有されるのは、あなたが自分の GitHub で出した Pull Request の中身だけです
|
|
141
|
+
(自動で PR を作る機能はありません)。マージされると、提出は MPL-2.0 で公開されます(下の「ライセンス」)。
|
|
93
142
|
|
|
94
|
-
|
|
95
|
-
2. 保存された JSON の `measurements` の中身を、`src/genmodelfit/data/measurements.json` の `measurements` の
|
|
96
|
-
最後に足します(書き方は既存の行にそろえてください)
|
|
97
|
-
3. `source` に、測った環境が分かる短い説明を書きます(例: `"genmodelfit bench, RTX 4060 8GB, ComfyUI portable"`)。
|
|
98
|
-
個人名やメールアドレスは不要です
|
|
99
|
-
4. `pytest -q` が通ることを確かめて、Pull Request を作ります。説明に、PC の構成(GPU・メモリ・OS)と、
|
|
100
|
-
ComfyUI の起動オプション(`--lowvram` など、変えたものだけ)を書いてください
|
|
143
|
+
### 受け付けたあと
|
|
101
144
|
|
|
102
|
-
|
|
145
|
+
- 作者が `genmodelfit contrib aggregate --output src/genmodelfit/data/measurements_community.json` で、同じモデル・設定・GPU の
|
|
146
|
+
提出をまとめます(中央値と MAD で外れ値を除く)。同じ構成の提出が **2 件以上そろい、OOM が無いと**、その構成の見積もりの
|
|
147
|
+
根拠が `measured_community`(ほかの利用者の実測)になります。1 件だけの提出は、もう 1 件そろうまで見積もりには使いません。
|
|
148
|
+
ほかの利用者の実測は、必要量を**上げる向きにだけ**使います(見積もりより小さい値では、段階も点数も変わりません)
|
|
149
|
+
- 毎週の点検(`contrib aggregate --report`)が、校正の誤差の表を作り直します(docs/accuracy.md)
|
|
103
150
|
|
|
104
|
-
|
|
105
|
-
|---|---|---|
|
|
106
|
-
| `model_id` | ○ | `image_z_image_turbo_int8`(一覧の ID) |
|
|
107
|
-
| `gpu_name`, `gpu_vram_gb` | ○ | `NVIDIA GeForce RTX 3070`, `8.0` |
|
|
108
|
-
| `peak_vram_gb` | ○ | `5.43` |
|
|
109
|
-
| `settings` | ○ | `{"width": 768, "height": 768, "steps": 6}` |
|
|
110
|
-
| `seconds` | ○ | `41.2` |
|
|
111
|
-
| `driver`, `comfyui_version` | ○ | `566.03`, `0.40.0` |
|
|
112
|
-
| `offload` | ○ | `dynamic` |
|
|
113
|
-
| `outcome`, `standard` | ○ | `ok`, `true`(OOM なら `oom` のまま送る) |
|
|
114
|
-
| `source`, `date` | ○ | 上の例、`2026-10-20` |
|
|
115
|
-
| `peak_ram_gb`, `note` | | bench が書いたものをそのまま |
|
|
151
|
+
### 作者の実測(measurements.json)
|
|
116
152
|
|
|
117
|
-
|
|
153
|
+
同梱の `src/genmodelfit/data/measurements.json` は作者が測った実測です。項目は docs/schema.md の「Measurement」、
|
|
154
|
+
提出の形は「contrib」にあります。利用者の実測は data/contrib に出してください(measurements.json は直接変えない)。
|
|
118
155
|
|
|
119
156
|
## そのほかの変更
|
|
120
157
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: genmodelfit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Right-size image / video / audio / 3D generation models to your PC (inspired by llmfit).
|
|
5
5
|
Project-URL: Homepage, https://github.com/laxshmate/genmodelfit
|
|
6
6
|
Project-URL: Issues, https://github.com/laxshmate/genmodelfit/issues
|
|
@@ -189,6 +189,7 @@ Python 3.10+. Windows and Linux. GPUs: NVIDIA (CUDA) in v0.1; other PCs are judg
|
|
|
189
189
|
| `genmodelfit gate` | how many models can be auto-recommended, and why the rest are held / 自動でおすすめに出せる数と保留の理由 |
|
|
190
190
|
| `genmodelfit update` | rebuild the model list from upstream / 一覧を上流から作り直す |
|
|
191
191
|
| `genmodelfit update --from-release` | fetch the signed model list published by this project / 署名付きの配布の一覧を取り込む |
|
|
192
|
+
| `genmodelfit download <model> [--comfyui-dir DIR] [--list]` | download all files of the model for this PC (precision chosen like `recommend`), after showing licenses, sizes and free disk and asking you; sha256-checked, resumable ([below](#download--モデルを落とす)) / この PC に合う精度でモデルのファイルを落とす(ライセンス・大きさ・空きを見せて同意を取る。sha256 で確かめ、続きから再開できる) |
|
|
192
193
|
| `genmodelfit bench <template> --url URL` | measure VRAM / RAM / time on a running ComfyUI / 動いている ComfyUI で実測 |
|
|
193
194
|
|
|
194
195
|
Common options / 共通の指定:
|
|
@@ -275,6 +276,91 @@ if st.expired: # HEAD checks older than 30 days → auto-recommendations drop /
|
|
|
275
276
|
print("run: genmodelfit update --from-release", st.expires_at, st.auto_count)
|
|
276
277
|
```
|
|
277
278
|
|
|
279
|
+
## Download / モデルを落とす
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
genmodelfit download "Z-Image-Turbo" --list # what would be downloaded (no network, writes nothing)
|
|
283
|
+
genmodelfit download "Z-Image-Turbo" --comfyui-dir C:\ComfyUI
|
|
284
|
+
genmodelfit download image_z_image_turbo_int8 --output-dir D:\models --budget 15 --yes
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
- **Which files**: all files of one workflow. A model name (as in the tables) picks the workflow and precision like
|
|
288
|
+
`recommend`: the highest precision that runs on this PC without offloading. A workflow id is used as is.
|
|
289
|
+
`--precision int8` picks a precision; `--budget 15` (GB) caps the download (files already there are not counted).
|
|
290
|
+
- **Where**: `--comfyui-dir` puts each file in the ComfyUI folder the template names
|
|
291
|
+
(`models/diffusion_models`, `text_encoders`, `vae`, `loras`, `checkpoints`, …; subfolders in the file name are kept).
|
|
292
|
+
`--output-dir` (default: genmodelfit's user data folder, `models`) uses the same layout, so it can be added to
|
|
293
|
+
ComfyUI's `extra_model_paths.yaml`.
|
|
294
|
+
- **Consent first**: before anything is downloaded you see every file with its license and the license URL, licenses
|
|
295
|
+
that are not on the allowlist (commercial use without use restrictions; [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/gate.md))
|
|
296
|
+
are marked, then the total size and the free disk, and you are asked `[y/N]`. `--yes` skips the question
|
|
297
|
+
(required with `--json`). Read the terms of each file before you use the model.
|
|
298
|
+
- **Not downloaded**: gated files (genmodelfit never handles logins or tokens; request access on the model page and
|
|
299
|
+
download them yourself), uncensored models unless you pass `--content all` (or `uncensored`), files whose license is
|
|
300
|
+
unknown unless you pass `--include-unknown-license`, files without a sha256 or size in the list, hosts other than
|
|
301
|
+
Hugging Face / GitHub.
|
|
302
|
+
- **Safety**: every file is checked with the sha256 in the list while it is written; a mismatch deletes it and fails.
|
|
303
|
+
A download goes to `<file>.part` first; after Ctrl-C or a network error run the same command again and it resumes
|
|
304
|
+
with an HTTP Range request (if the server ignores Range it starts over, at most 3 times). Files already there are
|
|
305
|
+
hashed again right before they are skipped; a different file with the same name is never overwritten. A
|
|
306
|
+
`<file>.lock` next to it stops two downloads of the same file at once (a lock left by a process that is gone is
|
|
307
|
+
cleaned up). It does not start unless the free disk is
|
|
308
|
+
the download + 1 GB. Nothing is written outside the destination: names with `..`, absolute paths, drive letters,
|
|
309
|
+
`\`, reserved Windows names (also as folder names), control / bidi characters, and symbolic links / junctions
|
|
310
|
+
that lead outside are refused.
|
|
311
|
+
- **Network**: only the URLs in the list (checked anonymously with HEAD), https only. Every redirect must stay on
|
|
312
|
+
the hosts below; a URL that could be read as two different hosts (`\`, spaces, control characters, `%` or `@`
|
|
313
|
+
in the host, non-ASCII hosts) is refused before any connection, and the host is read the way requests / urllib3
|
|
314
|
+
read it. Allowed:
|
|
315
|
+
`huggingface.co` / `*.hf.co` (CDN, Xet) / `github.com` / `objects.githubusercontent.com` /
|
|
316
|
+
`release-assets.githubusercontent.com`. No `~/.netrc` credentials, no tokens, nothing about this PC (User-Agent and
|
|
317
|
+
Range only). Waits for `Retry-After` on 429 / 503.
|
|
318
|
+
|
|
319
|
+
- **落とすもの**: 1 つのワークフローの全部のファイル。モデル名(表の Model)なら、`recommend` と同じく、この PC で
|
|
320
|
+
逃がさずに載る中で一番精度の高いワークフローを選びます。ID を指定すればそのまま。`--precision` で精度を、
|
|
321
|
+
`--budget`(GB)で落とす量の上限を決められます(既にあるファイルは数えません)。
|
|
322
|
+
- **置き場所**: `--comfyui-dir` なら、テンプレートの置き場所(`models/diffusion_models`・`text_encoders`・`vae`・`loras`・
|
|
323
|
+
`checkpoints` など)に置きます。`--output-dir`(既定は genmodelfit のデータのフォルダの `models`)も同じ並びです。
|
|
324
|
+
- **先に同意**: 落とす前に、ファイルごとのライセンスと原文の URL(許可リストに無いものは印付き)・合計の大きさ・空きを
|
|
325
|
+
出して `[y/N]` で尋ねます。`--yes` で省けます(`--json` で落とすときは必須)。使う前に各ファイルの条件を読んでください。
|
|
326
|
+
- **落とさないもの**: gated(ログインや利用申請が要る。genmodelfit はログイン情報を扱いません)、無検閲のモデル
|
|
327
|
+
(`--content all` か `uncensored` を明示したときだけ)、ライセンス不明(`--include-unknown-license` のときだけ)、
|
|
328
|
+
一覧に sha256・大きさの無いもの、Hugging Face・GitHub 以外の取得先。
|
|
329
|
+
- **安全**: 書きながら sha256 を計り、合わなければ消して失敗にします。途中は `<名前>.part` に書き、Ctrl-C や通信の失敗の
|
|
330
|
+
あとで同じコマンドを実行すると HTTP Range で続きから落とします(相手が Range に応じなければ最初から。3 回まで)。
|
|
331
|
+
既にあるファイルは飛ばす直前に sha256 を計り直し、同じ名前の別のファイルは上書きしません。同じファイルを
|
|
332
|
+
2 つの download が同時に書かないよう `<名前>.lock` を置きます(止まったプロセスの残りは片付けます)。空きが「落とす量 + 1 GB」に足りなければ
|
|
333
|
+
始めません。置き場所の外には書きません(`..`・絶対パス・ドライブ名・`\`・Windows の予約名・外へ出るリンクを拒みます)。
|
|
334
|
+
- **通信**: 一覧の URL(匿名の HEAD で確かめたもの)だけを https で使い、転送先は Hugging Face(CDN・Xet を含む)と
|
|
335
|
+
GitHub の決めたホストだけ。2 通りのホストに読める URL(`\`・空白・制御文字・ホストの中の `%` や `@`・ASCII でない
|
|
336
|
+
ホスト)は、つなぐ前に拒みます。`~/.netrc` もトークンも使わず、PC の情報も送りません。
|
|
337
|
+
|
|
338
|
+
Python:
|
|
339
|
+
|
|
340
|
+
```python
|
|
341
|
+
import genmodelfit as gmf
|
|
342
|
+
|
|
343
|
+
plan = gmf.plan_download("Z-Image-Turbo", comfyui_dir=r"C:\ComfyUI") # no network, writes nothing
|
|
344
|
+
for f in plan.files: # status: download / resume / present / conflict / unavailable
|
|
345
|
+
print(f.relpath, f.size_bytes, f.license, f.license_url, f.status)
|
|
346
|
+
print(plan.blocked, plan.warnings, plan.download_bytes, plan.disk_free_bytes)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def ask(plan) -> bool: # show licenses, URLs, total and free disk; True to go on
|
|
350
|
+
...
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def show(p): # gmf.DownloadProgress
|
|
354
|
+
print(p.phase, p.name, p.done_bytes, p.total_bytes)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
result = gmf.download(plan, confirm=ask, progress=show)
|
|
358
|
+
# or gmf.download("Z-Image-Turbo", yes=True, comfyui_dir=...) when the app already asked
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
The library prints nothing. `gmf.download` raises `gmf.DownloadRefused` (blocked, no consent), `gmf.DownloadError`
|
|
362
|
+
(network, sha256 mismatch, disk) and lets `KeyboardInterrupt` through, keeping the `.part` file for the next call.
|
|
363
|
+
|
|
278
364
|
## Hardware / ハードウェアの検出
|
|
279
365
|
|
|
280
366
|
- Only NVIDIA GPUs confirmed by `nvidia-smi` are used for judging (v0.1). A GPU is judged as **CPU** when no PyTorch
|
|
@@ -309,7 +395,8 @@ Measured values win. Models whose download size is unknown are not judged (shown
|
|
|
309
395
|
|
|
310
396
|
## Data sources / データ源
|
|
311
397
|
|
|
312
|
-
The bundled list has
|
|
398
|
+
The bundled list has 326 entries (image 163, video 115, TTS 20, music 15, 3D 10, SFX 3) that make 207 models
|
|
399
|
+
(2026-10-21; refreshed weekly, see "Maintenance").
|
|
313
400
|
Like llmfit, Hugging Face models are included only with at least 10,000 all-time downloads (1,000 for trending
|
|
314
401
|
ones), and merges and test stubs are skipped ([docs/sources.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/sources.md)).
|
|
315
402
|
llmfit と同じく、Hugging Face のモデルは全期間のダウンロード数が 10,000 以上のもの(伸びているものは 1,000 以上)だけを入れます。
|
|
@@ -349,12 +436,55 @@ upstream, not the uploader's label) is on a commercial-use allowlist (apache-2.0
|
|
|
349
436
|
replaceable), nothing is gated, an official ComfyUI workflow without custom nodes, the ComfyUI version is
|
|
350
437
|
supported, every download URL answered an anonymous HEAD within the last 30 days, sha256 is known, the size is
|
|
351
438
|
known, and the content is `sfw`. Otherwise it is held with machine-readable reasons (`held_reasons` in JSON, e.g. `license`; the table's Auto column shows the first one).
|
|
352
|
-
In the bundled list
|
|
439
|
+
In the bundled list 99 of 326 entries are auto (2026-10-21). When a license cannot be verified it is treated as unknown
|
|
353
440
|
and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/gate.md).
|
|
354
441
|
|
|
355
442
|
すべての条件を満たすものだけを自動でおすすめに出し、残りは理由付きで保留にします。ライセンスが確かめられない
|
|
356
443
|
ものは「不明」として保留にします。アプリは使う ComfyUI の版を `--comfyui-version` で渡してください。
|
|
357
444
|
|
|
445
|
+
## Maintenance / 一覧の保守
|
|
446
|
+
|
|
447
|
+
Like llmfit, the list is rebuilt every week and published only after a person has reviewed it:
|
|
448
|
+
|
|
449
|
+
1. Every Monday (03:00 UTC) `.github/workflows/weekly-data.yml` rebuilds the list from upstream
|
|
450
|
+
(`python -m genmodelfit.weekly`: templates, Hugging Face, HEAD checks, file headers; caches are kept between
|
|
451
|
+
runs), checks it (schema, auto count, the 30-day HEAD expiry must be more than 7 days away), runs ruff and
|
|
452
|
+
pytest with the new list, and opens or updates the pull request `automated/weekly-data` (labels `automated`,
|
|
453
|
+
`data-update`). The body is made by `genmodelfit diff` (added / removed models, license changes — the
|
|
454
|
+
ones toward the permissive side are marked —, auto-recommendation changes, failed HEAD checks).
|
|
455
|
+
It is never merged automatically.
|
|
456
|
+
2. The owner reviews and merges it.
|
|
457
|
+
3. On merge, `.github/workflows/data.yml` signs main's `db.json` and replaces the `data-latest` release.
|
|
458
|
+
4. Apps take it with `genmodelfit update --from-release` (signature checked).
|
|
459
|
+
|
|
460
|
+
```powershell
|
|
461
|
+
genmodelfit diff old_db.json new_db.json # what changed between two lists (--json for tools)
|
|
462
|
+
python -m genmodelfit.weekly --dry-run --out weekly-out # the same pipeline locally (writes only weekly-out)
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
毎週、上流から作り直した一覧を自動で PR にし(自動ではマージしない)、作者が見てマージしたものだけを
|
|
466
|
+
署名して配ります。PR で確かめることは [docs/release.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/release.md)
|
|
467
|
+
「毎週の一覧の更新」。
|
|
468
|
+
|
|
469
|
+
## Contributing measurements / 実測を送る
|
|
470
|
+
|
|
471
|
+
Measured runs on more GPUs make the estimates better. In a clone of your fork:
|
|
472
|
+
|
|
473
|
+
```powershell
|
|
474
|
+
genmodelfit bench image_sdxl_simple --url http://127.0.0.1:8188 --resolution 832x832 --submission data/contrib/
|
|
475
|
+
genmodelfit contrib show data/contrib/rtx-3070/2026-10-21-1a2b3c4d.json # exactly what will be shared + privacy checklist
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
Then open a pull request that adds only that file. **genmodelfit sends nothing**; the file holds the GPU name / VRAM /
|
|
479
|
+
generation / driver, ComfyUI version, OS family, RAM rounded to GiB and the results — never host or user names, paths,
|
|
480
|
+
GPU UUID, PCI address, IP or exact times (the checks are pattern based, so read the note yourself). CI checks it with
|
|
481
|
+
`genmodelfit contrib validate`. Once two or more consistent submissions exist for the same model, settings and GPU,
|
|
482
|
+
estimates for that setup become `basis_detail: "measured_community"`; community values can only raise the estimated
|
|
483
|
+
needs, never lower them. Steps: [CONTRIBUTING.md](https://github.com/laxshmate/genmodelfit/blob/main/CONTRIBUTING.md).
|
|
484
|
+
|
|
485
|
+
自分のフォークで `bench --submission data/contrib/` を付けて測り、`contrib show` で中身を確かめてから、そのファイルだけを
|
|
486
|
+
Pull Request で出してください。genmodelfit は何も送りません(PC の名前・ユーザー名・パス・GPU の UUID などは入りません)。
|
|
487
|
+
|
|
358
488
|
## Privacy / 送るもの・送らないもの
|
|
359
489
|
|
|
360
490
|
- `recommend`, `fit`, `search`, `info`, `system`, `types`, `gate` and the Python API (`gmf.recommend()`,
|
|
@@ -366,13 +496,16 @@ and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/
|
|
|
366
496
|
main weight files to read their header — dtype and tensor shapes; no weights are downloaded).
|
|
367
497
|
- `genmodelfit bench` talks only to the ComfyUI URL you give with `--url` (plus the official template files on
|
|
368
498
|
GitHub when ComfyUI does not have them).
|
|
499
|
+
- `genmodelfit download` (and `gmf.download()`) only GETs the model URLs in the list, over https, following
|
|
500
|
+
redirects only to Hugging Face / GitHub hosts; `--list` and `gmf.plan_download()` make no network access.
|
|
369
501
|
- Hardware information (GPU name, VRAM, RAM, CPU, disk) is read locally with `nvidia-smi` and psutil and is
|
|
370
502
|
**never sent**. Measurements from `bench` are saved only on your PC; they are shared only if you open a pull
|
|
371
503
|
request yourself ([CONTRIBUTING.md](https://github.com/laxshmate/genmodelfit/blob/main/CONTRIBUTING.md)).
|
|
372
|
-
Saved measurements hold no host name, user name, paths or GPU UUID.
|
|
504
|
+
Saved measurements hold no host name, user name, paths or GPU UUID. Submission files (`bench --submission`,
|
|
505
|
+
`contrib make`) are written locally only; `genmodelfit contrib` never touches the network.
|
|
373
506
|
- No telemetry. No hardware information, measurements, prompts or other user content is ever sent anywhere.
|
|
374
507
|
Tests replace the PC's details with marker strings and check that no request URL, header or body of `update`,
|
|
375
|
-
`update --from-release` or `
|
|
508
|
+
`update --from-release`, `bench` or `download` contains them.
|
|
376
509
|
Requests carry the User-Agent `genmodelfit/<version> (+https://github.com/laxshmate/genmodelfit)`, and never the
|
|
377
510
|
credentials in your `~/.netrc` (proxy and certificate settings such as `HTTPS_PROXY` are still honored).
|
|
378
511
|
|
|
@@ -382,9 +515,12 @@ and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/
|
|
|
382
515
|
- `update` は公開の情報を読むだけです(GitHub の ComfyUI テンプレート、Hugging Face Hub の API、モデルの URL への HEAD と、
|
|
383
516
|
本体のファイルの先頭の見出し(dtype・テンソルの形)だけの Range 要求。モデル本体は落としません)。
|
|
384
517
|
- `bench` は `--url` で指定した ComfyUI とだけ話します(ComfyUI に無い公式テンプレートは GitHub から取ります)。
|
|
518
|
+
- `download` は一覧のモデルの URL へ https の GET を送るだけです(転送先は Hugging Face・GitHub の決めたホストだけ)。
|
|
519
|
+
`--list` と `gmf.plan_download()` は通信しません。
|
|
385
520
|
- PC の情報(GPU の名前・VRAM・メモリ・CPU・空き)は `nvidia-smi` と psutil で手元で読むだけで、**送りません**。
|
|
386
521
|
`bench` の実測は手元に保存するだけで、利用者が自分で Pull Request を出したときだけ共有されます
|
|
387
|
-
(保存する実測に PC の名前・ユーザー名・パス・GPU の UUID は入りません)
|
|
522
|
+
(保存する実測に PC の名前・ユーザー名・パス・GPU の UUID は入りません)。提出用の JSON(`bench --submission`・`contrib make`)も
|
|
523
|
+
手元に書くだけで、`genmodelfit contrib` は通信しません。
|
|
388
524
|
- 利用状況の送信(テレメトリ)はありません。PC の情報・実測・プロンプトなどを送ることはありません。User-Agent は
|
|
389
525
|
`genmodelfit/<版>` で、`~/.netrc` の資格情報は付けません(プロキシ・証明書の設定は使います)。
|
|
390
526
|
|