genmodelfit 0.3.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.
Files changed (159) hide show
  1. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/CHANGELOG.md +78 -0
  2. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/CONTRIBUTING.md +74 -37
  3. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/PKG-INFO +51 -5
  4. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/README.md +50 -4
  5. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/accuracy.md +58 -1
  6. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/license_requests.md +1 -1
  7. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/release.md +100 -2
  8. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/schema.md +177 -9
  9. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/sources.md +14 -5
  10. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/__init__.py +3 -0
  11. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/_version.py +1 -1
  12. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/calibrate.py +97 -4
  13. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/cli.py +638 -1
  14. genmodelfit-0.4.0/src/genmodelfit/contrib.py +1357 -0
  15. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/data/calibration.json +51 -1
  16. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/data/db.json +2079 -1729
  17. genmodelfit-0.4.0/src/genmodelfit/data/measurements_community.json +8 -0
  18. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/db.py +8 -1
  19. genmodelfit-0.4.0/src/genmodelfit/diff.py +277 -0
  20. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/estimate.py +123 -10
  21. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/models.py +21 -0
  22. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/recommend.py +9 -1
  23. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/safety.py +8 -0
  24. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/update.py +65 -11
  25. genmodelfit-0.4.0/src/genmodelfit/weekly.py +587 -0
  26. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/clihelp.py +7 -0
  27. genmodelfit-0.4.0/tests/fixtures/contrib/rtx-3070/2026-10-20-5bedb2da.json +37 -0
  28. genmodelfit-0.4.0/tests/fixtures/contrib/rtx-3070/2026-10-20-78740c83.json +37 -0
  29. genmodelfit-0.4.0/tests/fixtures/contrib/rtx-3070/2026-10-20-ccef2c3e.json +37 -0
  30. genmodelfit-0.4.0/tests/fixtures/contrib/rtx-4060/2026-10-21-e361ba52.json +37 -0
  31. {genmodelfit-0.3.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
  32. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_search/direction_-1_limit_100_pipeline_tag_text-to-speech_sort_trendingScore.json +19 -4
  33. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_cli_casual.py +25 -5
  34. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_cli_json.py +15 -4
  35. genmodelfit-0.4.0/tests/test_contrib.py +1036 -0
  36. genmodelfit-0.4.0/tests/test_diff.py +219 -0
  37. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_groups.py +1 -1
  38. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_license_sources.py +18 -0
  39. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_release.py +1 -1
  40. genmodelfit-0.4.0/tests/test_safety_dataset.py +31 -0
  41. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_status.py +25 -10
  42. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_update.py +36 -2
  43. genmodelfit-0.4.0/tests/test_weekly.py +364 -0
  44. genmodelfit-0.4.0/tests/test_workflows.py +125 -0
  45. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/.gitignore +0 -0
  46. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/LICENSE +0 -0
  47. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/THIRD_PARTY_NOTICES +0 -0
  48. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/gate.md +0 -0
  49. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/docs/hardware.md +0 -0
  50. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/pyproject.toml +0 -0
  51. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/__main__.py +0 -0
  52. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/bench.py +0 -0
  53. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/data/__init__.py +0 -0
  54. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/data/measurements.json +0 -0
  55. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/data/signing_keys/2026-10.pub +0 -0
  56. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/downloader.py +0 -0
  57. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/families.py +0 -0
  58. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/fetch.py +0 -0
  59. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/gate.py +0 -0
  60. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/groups.py +0 -0
  61. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/hardware.py +0 -0
  62. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/headers.py +0 -0
  63. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/hf.py +0 -0
  64. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/license_sources.py +0 -0
  65. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/py.typed +0 -0
  66. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/remote.py +0 -0
  67. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/repo_precision.py +0 -0
  68. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/signing.py +0 -0
  69. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/status.py +0 -0
  70. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/table.py +0 -0
  71. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/tasks.py +0 -0
  72. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/src/genmodelfit/workflow.py +0 -0
  73. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/conftest.py +0 -0
  74. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/3d_hunyuan3d_image_to_model.json +0 -0
  75. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/audio_ace_step_1_5_checkpoint.json +0 -0
  76. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/lspci_amd_nvidia.txt +0 -0
  77. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_garbage.txt +0 -0
  78. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_multi.csv +0 -0
  79. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_na.csv +0 -0
  80. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_no_devices.txt +0 -0
  81. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_no_driver.txt +0 -0
  82. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_old_error.txt +0 -0
  83. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_old_kepler.csv +0 -0
  84. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_old_maxwell.csv +0 -0
  85. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/nvsmi_rtx3070_win.csv +0 -0
  86. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/registry_amd_stale.json +0 -0
  87. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/registry_this_pc.json +0 -0
  88. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_amd_single.json +0 -0
  89. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_basic_nvidia.json +0 -0
  90. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_intel_nvidia.json +0 -0
  91. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/hardware/wmi_this_pc.json +0 -0
  92. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/image_sdxl_simple.json +0 -0
  93. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/image_z_image_turbo_int8.json +0 -0
  94. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/object_info_subset.json +0 -0
  95. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/text_to_video_wan.json +0 -0
  96. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/ACE-Step__Ace-Step1.5.json +0 -0
  97. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/AtomicChat__Qwen-Image-2.1-Turbo-Uncensored-GGUF.json +0 -0
  98. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__Wan_2.1_ComfyUI_repackaged.json +0 -0
  99. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__ace_step_1.5_ComfyUI_files.json +0 -0
  100. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__hunyuan3D_2.0_repackaged.json +0 -0
  101. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__stable-audio-open-1.0_repackaged.json +0 -0
  102. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Comfy-Org__z_image_turbo.json +0 -0
  103. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/ComfyUI-Wiki__t5-base.json +0 -0
  104. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/MeiGen-AI__InfiniteTalk.json +0 -0
  105. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Noctaluna__Noct-Q-Uncensored-Qwen-Image-2.1.json +0 -0
  106. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Qwen__Qwen-Image-2.1.json +0 -0
  107. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Qwen__Qwen3-VL-8B-Instruct.json +0 -0
  108. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Tongyi-MAI__Z-Image-Turbo.json +0 -0
  109. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-FLF2V-14B-720P.json +0 -0
  110. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-I2V-14B-480P.json +0 -0
  111. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-I2V-14B-720P.json +0 -0
  112. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-T2V-1.3B.json +0 -0
  113. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-T2V-14B.json +0 -0
  114. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-VACE-1.3B.json +0 -0
  115. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/Wan-AI__Wan2.1-VACE-14B.json +0 -0
  116. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-1.3B-Control-Camera.json +0 -0
  117. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-1.3B-Control.json +0 -0
  118. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-1.3B-InP.json +0 -0
  119. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/alibaba-pai__Wan2.1-Fun-V1.1-14B-Control-Camera.json +0 -0
  120. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/example-org__plain-nsfw-xl.json +0 -0
  121. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/hexgrad__Kokoro-82M.json +0 -0
  122. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/htdong__Wan-Alpha.json +0 -0
  123. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/stabilityai__stable-audio-open-1.0.json +0 -0
  124. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/tencent__Hunyuan3D-2.json +0 -0
  125. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/tencent__Hunyuan3D-2mv.json +0 -0
  126. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf/yl4579__StyleTTS2-LJSpeech.json +0 -0
  127. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/AtomicChat__Qwen-Image-2.1-Turbo-Uncensored-GGUF.md +0 -0
  128. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/Noctaluna__Noct-Q-Uncensored-Qwen-Image-2.1.md +0 -0
  129. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/example-org__plain-nsfw-xl.md +0 -0
  130. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_readme/hexgrad__Kokoro-82M.md +0 -0
  131. {genmodelfit-0.3.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
  132. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/hf_search/direction_-1_limit_100_pipeline_tag_text-to-speech_sort_downloads.json +0 -0
  133. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/3d_hunyuan3d_image_to_model.json +0 -0
  134. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/audio_ace_step_1_5_checkpoint.json +0 -0
  135. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/audio_stable_audio_example.json +0 -0
  136. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/image_z_image_turbo.json +0 -0
  137. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/image_z_image_turbo_int8.json +0 -0
  138. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/index.json +0 -0
  139. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/update/templates/templates-wan2_1_infinitetalk_music.json +0 -0
  140. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/fixtures/video_wan2_2_14B_i2v.json +0 -0
  141. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_bench.py +0 -0
  142. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_bench_rtx3070.py +0 -0
  143. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_core.py +0 -0
  144. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_download.py +0 -0
  145. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_embedding.py +0 -0
  146. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_estimate.py +0 -0
  147. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_families.py +0 -0
  148. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_gate.py +0 -0
  149. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_gate_real.py +0 -0
  150. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_hardware.py +0 -0
  151. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_invariants.py +0 -0
  152. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_issue_28.py +0 -0
  153. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_issue_30.py +0 -0
  154. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_licenses.py +0 -0
  155. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_privacy.py +0 -0
  156. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_privacy_pc.py +0 -0
  157. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_review_14.py +0 -0
  158. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_review_fixes.py +0 -0
  159. {genmodelfit-0.3.0 → genmodelfit-0.4.0}/tests/test_table.py +0 -0
@@ -7,6 +7,84 @@ All notable changes to this project are documented here. The format is based on
7
7
 
8
8
  ## [Unreleased]
9
9
 
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
+
10
88
  ## [0.3.0] - 2026-10-21
11
89
 
12
90
  ### Added
@@ -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>` against your own ComfyUI,
7
- check the JSON it writes, then open a pull request that adds the record to
8
- `src/genmodelfit/data/measurements.json`. Required fields: `model_id`, `gpu_name`, `gpu_vram_gb`, `peak_vram_gb`,
9
- `settings`, `seconds`, `driver`, `comfyui_version`, `offload`, `outcome`, `standard`, `source`, `date`. Do not include
10
- paths, user names, host names or prompts. One model per PR is easiest to review. Out-of-memory runs are welcome too,
11
- but they must keep `outcome: "oom"` (bench prints them and does not save them unless you pass `--save-failed` or
12
- `--output`).
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 は、最後まで動いた標準の結果を `<キャッシュ>/measurements/<モデル>_<GPU>_<日時>.json` に保存し、
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
- - **個人の情報が入っていないこと**: フォルダのパス、ユーザー名、PC の名前、プロンプトの文を入れないでください。
88
- bench はこれらを書きませんが、`--source` や `--note` に自分で書いたものは確かめてください
89
- - `gpu_name` と `driver` が自分の PC と合っていること
90
- - `settings` が測りたかった設定になっていること
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
- ## 3. 送る
140
+ **genmodelfit は何も送りません**。共有されるのは、あなたが自分の GitHub で出した Pull Request の中身だけです
141
+ (自動で PR を作る機能はありません)。マージされると、提出は MPL-2.0 で公開されます(下の「ライセンス」)。
93
142
 
94
- 1. このリポジトリをフォークして、ブランチを作ります
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
- 形の正本は `src/genmodelfit/models.py` の `Measurement` で、説明は [docs/schema.md](docs/schema.md) にあります。
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.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
@@ -395,7 +395,8 @@ Measured values win. Models whose download size is unknown are not judged (shown
395
395
 
396
396
  ## Data sources / データ源
397
397
 
398
- The bundled list has 323 entries (image 161, video 114, TTS 20, music 15, 3D 10, SFX 3) that make 204 models.
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").
399
400
  Like llmfit, Hugging Face models are included only with at least 10,000 all-time downloads (1,000 for trending
400
401
  ones), and merges and test stubs are skipped ([docs/sources.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/sources.md)).
401
402
  llmfit と同じく、Hugging Face のモデルは全期間のダウンロード数が 10,000 以上のもの(伸びているものは 1,000 以上)だけを入れます。
@@ -435,12 +436,55 @@ upstream, not the uploader's label) is on a commercial-use allowlist (apache-2.0
435
436
  replaceable), nothing is gated, an official ComfyUI workflow without custom nodes, the ComfyUI version is
436
437
  supported, every download URL answered an anonymous HEAD within the last 30 days, sha256 is known, the size is
437
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).
438
- In the bundled list 83 of 323 entries are auto. When a license cannot be verified it is treated as unknown
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
439
440
  and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/gate.md).
440
441
 
441
442
  すべての条件を満たすものだけを自動でおすすめに出し、残りは理由付きで保留にします。ライセンスが確かめられない
442
443
  ものは「不明」として保留にします。アプリは使う ComfyUI の版を `--comfyui-version` で渡してください。
443
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
+
444
488
  ## Privacy / 送るもの・送らないもの
445
489
 
446
490
  - `recommend`, `fit`, `search`, `info`, `system`, `types`, `gate` and the Python API (`gmf.recommend()`,
@@ -457,7 +501,8 @@ and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/
457
501
  - Hardware information (GPU name, VRAM, RAM, CPU, disk) is read locally with `nvidia-smi` and psutil and is
458
502
  **never sent**. Measurements from `bench` are saved only on your PC; they are shared only if you open a pull
459
503
  request yourself ([CONTRIBUTING.md](https://github.com/laxshmate/genmodelfit/blob/main/CONTRIBUTING.md)).
460
- 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.
461
506
  - No telemetry. No hardware information, measurements, prompts or other user content is ever sent anywhere.
462
507
  Tests replace the PC's details with marker strings and check that no request URL, header or body of `update`,
463
508
  `update --from-release`, `bench` or `download` contains them.
@@ -474,7 +519,8 @@ and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/
474
519
  `--list` と `gmf.plan_download()` は通信しません。
475
520
  - PC の情報(GPU の名前・VRAM・メモリ・CPU・空き)は `nvidia-smi` と psutil で手元で読むだけで、**送りません**。
476
521
  `bench` の実測は手元に保存するだけで、利用者が自分で Pull Request を出したときだけ共有されます
477
- (保存する実測に PC の名前・ユーザー名・パス・GPU の UUID は入りません)。
522
+ (保存する実測に PC の名前・ユーザー名・パス・GPU の UUID は入りません)。提出用の JSON(`bench --submission`・`contrib make`)も
523
+ 手元に書くだけで、`genmodelfit contrib` は通信しません。
478
524
  - 利用状況の送信(テレメトリ)はありません。PC の情報・実測・プロンプトなどを送ることはありません。User-Agent は
479
525
  `genmodelfit/<版>` で、`~/.netrc` の資格情報は付けません(プロキシ・証明書の設定は使います)。
480
526
 
@@ -355,7 +355,8 @@ Measured values win. Models whose download size is unknown are not judged (shown
355
355
 
356
356
  ## Data sources / データ源
357
357
 
358
- The bundled list has 323 entries (image 161, video 114, TTS 20, music 15, 3D 10, SFX 3) that make 204 models.
358
+ The bundled list has 326 entries (image 163, video 115, TTS 20, music 15, 3D 10, SFX 3) that make 207 models
359
+ (2026-10-21; refreshed weekly, see "Maintenance").
359
360
  Like llmfit, Hugging Face models are included only with at least 10,000 all-time downloads (1,000 for trending
360
361
  ones), and merges and test stubs are skipped ([docs/sources.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/sources.md)).
361
362
  llmfit と同じく、Hugging Face のモデルは全期間のダウンロード数が 10,000 以上のもの(伸びているものは 1,000 以上)だけを入れます。
@@ -395,12 +396,55 @@ upstream, not the uploader's label) is on a commercial-use allowlist (apache-2.0
395
396
  replaceable), nothing is gated, an official ComfyUI workflow without custom nodes, the ComfyUI version is
396
397
  supported, every download URL answered an anonymous HEAD within the last 30 days, sha256 is known, the size is
397
398
  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).
398
- In the bundled list 83 of 323 entries are auto. When a license cannot be verified it is treated as unknown
399
+ In the bundled list 99 of 326 entries are auto (2026-10-21). When a license cannot be verified it is treated as unknown
399
400
  and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/gate.md).
400
401
 
401
402
  すべての条件を満たすものだけを自動でおすすめに出し、残りは理由付きで保留にします。ライセンスが確かめられない
402
403
  ものは「不明」として保留にします。アプリは使う ComfyUI の版を `--comfyui-version` で渡してください。
403
404
 
405
+ ## Maintenance / 一覧の保守
406
+
407
+ Like llmfit, the list is rebuilt every week and published only after a person has reviewed it:
408
+
409
+ 1. Every Monday (03:00 UTC) `.github/workflows/weekly-data.yml` rebuilds the list from upstream
410
+ (`python -m genmodelfit.weekly`: templates, Hugging Face, HEAD checks, file headers; caches are kept between
411
+ runs), checks it (schema, auto count, the 30-day HEAD expiry must be more than 7 days away), runs ruff and
412
+ pytest with the new list, and opens or updates the pull request `automated/weekly-data` (labels `automated`,
413
+ `data-update`). The body is made by `genmodelfit diff` (added / removed models, license changes — the
414
+ ones toward the permissive side are marked —, auto-recommendation changes, failed HEAD checks).
415
+ It is never merged automatically.
416
+ 2. The owner reviews and merges it.
417
+ 3. On merge, `.github/workflows/data.yml` signs main's `db.json` and replaces the `data-latest` release.
418
+ 4. Apps take it with `genmodelfit update --from-release` (signature checked).
419
+
420
+ ```powershell
421
+ genmodelfit diff old_db.json new_db.json # what changed between two lists (--json for tools)
422
+ python -m genmodelfit.weekly --dry-run --out weekly-out # the same pipeline locally (writes only weekly-out)
423
+ ```
424
+
425
+ 毎週、上流から作り直した一覧を自動で PR にし(自動ではマージしない)、作者が見てマージしたものだけを
426
+ 署名して配ります。PR で確かめることは [docs/release.md](https://github.com/laxshmate/genmodelfit/blob/main/docs/release.md)
427
+ 「毎週の一覧の更新」。
428
+
429
+ ## Contributing measurements / 実測を送る
430
+
431
+ Measured runs on more GPUs make the estimates better. In a clone of your fork:
432
+
433
+ ```powershell
434
+ genmodelfit bench image_sdxl_simple --url http://127.0.0.1:8188 --resolution 832x832 --submission data/contrib/
435
+ genmodelfit contrib show data/contrib/rtx-3070/2026-10-21-1a2b3c4d.json # exactly what will be shared + privacy checklist
436
+ ```
437
+
438
+ Then open a pull request that adds only that file. **genmodelfit sends nothing**; the file holds the GPU name / VRAM /
439
+ generation / driver, ComfyUI version, OS family, RAM rounded to GiB and the results — never host or user names, paths,
440
+ GPU UUID, PCI address, IP or exact times (the checks are pattern based, so read the note yourself). CI checks it with
441
+ `genmodelfit contrib validate`. Once two or more consistent submissions exist for the same model, settings and GPU,
442
+ estimates for that setup become `basis_detail: "measured_community"`; community values can only raise the estimated
443
+ needs, never lower them. Steps: [CONTRIBUTING.md](https://github.com/laxshmate/genmodelfit/blob/main/CONTRIBUTING.md).
444
+
445
+ 自分のフォークで `bench --submission data/contrib/` を付けて測り、`contrib show` で中身を確かめてから、そのファイルだけを
446
+ Pull Request で出してください。genmodelfit は何も送りません(PC の名前・ユーザー名・パス・GPU の UUID などは入りません)。
447
+
404
448
  ## Privacy / 送るもの・送らないもの
405
449
 
406
450
  - `recommend`, `fit`, `search`, `info`, `system`, `types`, `gate` and the Python API (`gmf.recommend()`,
@@ -417,7 +461,8 @@ and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/
417
461
  - Hardware information (GPU name, VRAM, RAM, CPU, disk) is read locally with `nvidia-smi` and psutil and is
418
462
  **never sent**. Measurements from `bench` are saved only on your PC; they are shared only if you open a pull
419
463
  request yourself ([CONTRIBUTING.md](https://github.com/laxshmate/genmodelfit/blob/main/CONTRIBUTING.md)).
420
- Saved measurements hold no host name, user name, paths or GPU UUID.
464
+ Saved measurements hold no host name, user name, paths or GPU UUID. Submission files (`bench --submission`,
465
+ `contrib make`) are written locally only; `genmodelfit contrib` never touches the network.
421
466
  - No telemetry. No hardware information, measurements, prompts or other user content is ever sent anywhere.
422
467
  Tests replace the PC's details with marker strings and check that no request URL, header or body of `update`,
423
468
  `update --from-release`, `bench` or `download` contains them.
@@ -434,7 +479,8 @@ and held. See [docs/gate.md](https://github.com/laxshmate/genmodelfit/blob/main/
434
479
  `--list` と `gmf.plan_download()` は通信しません。
435
480
  - PC の情報(GPU の名前・VRAM・メモリ・CPU・空き)は `nvidia-smi` と psutil で手元で読むだけで、**送りません**。
436
481
  `bench` の実測は手元に保存するだけで、利用者が自分で Pull Request を出したときだけ共有されます
437
- (保存する実測に PC の名前・ユーザー名・パス・GPU の UUID は入りません)。
482
+ (保存する実測に PC の名前・ユーザー名・パス・GPU の UUID は入りません)。提出用の JSON(`bench --submission`・`contrib make`)も
483
+ 手元に書くだけで、`genmodelfit contrib` は通信しません。
438
484
  - 利用状況の送信(テレメトリ)はありません。PC の情報・実測・プロンプトなどを送ることはありません。User-Agent は
439
485
  `genmodelfit/<版>` で、`~/.netrc` の資格情報は付けません(プロキシ・証明書の設定は使います)。
440
486
 
@@ -1,6 +1,6 @@
1
1
  # 見積もりの精度 / Accuracy
2
2
 
3
- 2026-10-20 時点。係数は `src/genmodelfit/data/calibration.json`、作り直しは `python -m genmodelfit.calibrate`
3
+ 2026-10-20 時点(ほかの利用者の実測の扱いは 2026-10-21)。係数は `src/genmodelfit/data/calibration.json`、作り直しは `python -m genmodelfit.calibrate`
4
4
  (`--dry-run` で書き出さずに表だけ出す)。下の表はそのコマンドの出力をそのまま貼ったもの。
5
5
  **単位はすべて GiB(2^30 バイト)**。表や CLI の「GB」も GiB を指す。
6
6
 
@@ -180,6 +180,13 @@ RTX 5080 の実測は ComfyUI の動的 VRAM で測ったもので、**空きが
180
180
  music・video は張り付いていない実測が 1 件以下のため評価できない(target_met は null)。
181
181
  張り付いた 3 件のうち 3 件は重みだけで実測を超え、情報を持たない。 参考: 張り付いていない全 6 件の LOO 平均絶対誤差 6.5%、最大 17.2%(重みだけなら平均 22.8%)
182
182
 
183
+ 照合(測り方が違うので係数の合わせには使わない。全件で合わせた係数で当てた値):
184
+
185
+ | モデル | GPU | 出どころ | 設定 | 実測 GiB | 推定 GiB(全部載せ) | 誤差 |
186
+ |---|---|---|---|---:|---:|---:|
187
+ | utility_birefnet_remove_background | NVIDIA GeForce RTX 3070 | 作者 | - | 1.25 | 2.13 | +70% |
188
+ | 3d_moge_perspective_to_mesh | NVIDIA GeForce RTX 3070 | 作者 | - | 0.72 | 2.87 | +299% |
189
+
183
190
  読み方:
184
191
 
185
192
  - 「知らないモデルを当てる力」を測れているのは、画像の 2 件と 3D の 2 件だけ。それぞれ同じ種類のもう 1 件だけで
@@ -213,11 +220,61 @@ music・video は張り付いていない実測が 1 件以下のため評価で
213
220
  - **役割の推定**: 置き場所もフォルダも無いファイルは、知っている名前の一覧で役割を決める。一覧に無いテキストエンコーダは
214
221
  本体として数える(全部載せの値は変わらないが、順に載せ替え・逃がすの値は大きめに出る)
215
222
 
223
+ ## ほかの利用者の実測(#34、2026-10-21)
224
+
225
+ 利用者が `genmodelfit bench --submission` で作った提出用の JSON を、Pull Request で `data/contrib/<GPU>/<日付>-<sha8>.json`
226
+ に足してもらう(手順は CONTRIBUTING.md、形は docs/schema.md「contrib」)。**2026-10-21 時点で受け付けた提出は 0 件**で、
227
+ 同梱の `src/genmodelfit/data/measurements_community.json` は空。下の決まりは、提出が来たときの扱い。
228
+
229
+ - **まとめ方**(`genmodelfit contrib aggregate`): 同じモデル・GPU 名・測り方(`vram_metric`)・設定(解像度・コマ数・長さ・
230
+ ステップ数・精度・枚数)ごとにまとめる。標準でない提出(`standard: false`)は使わない。最後まで動いた(ok)ものの最大 VRAM で、
231
+ 3 件以上あれば |x − 中央値| / (1.4826 × MAD) > 3.5 を外れ値として除き(MAD の下限は中央値の 2%。そろいすぎた値で
232
+ 小さな差を外れ値にしない)、残りの中央値を値にする。2 件以下では外れ値を見分けない。OOM だけの組は `outcome: oom` の 1 行
233
+ - **使う条件**: 使った件数が 2 件以上で、残りの幅(最大 − 最小)が中央値の 15% 以内で、OOM が 1 件も無いとき
234
+ `consistent: true`。人が確かめる項目(式から 40% より外れた値・重み + 固定分より小さい全部載せの値・一覧に無いモデル・
235
+ 知らない GPU)のある提出は、`--allow-review` で確かめたと言わない限りまとめに使わない。
236
+ **1 件だけ・ばらつきの大きい組は、見積もりにも校正にも使わない**(測り違い・書き換えを 1 件では見分けられないため。
237
+ 表には出す)。llmfit の measured_community に当たる
238
+ - **根拠の段階**(`Estimate.basis_detail`。`basis` は後方互換のため measured / estimated の 2 値のまま):
239
+
240
+ | 段階 | basis | 意味 |
241
+ |---|---|---|
242
+ | `measured` | measured | 同梱の作者の実測か、この PC で bench が保存した実測で、設定が同じ |
243
+ | `measured_community` | measured(下の「必要量を下げない」で使わなかったときは estimated) | そろったほかの利用者の実測で、設定が同じ。点数の basis は推定と同じ 0 |
244
+ | `calibrated` | estimated | 設定の違う実測(作者・ほかの利用者)でずらした推定 |
245
+ | `estimated` | estimated | 式だけの推定(実測が無い・精度を変えた・GPU が無い) |
246
+
247
+ - **必要量を下げない**(2026-10-21、オーナーの方針。レビューで、書き換えた 2 件の提出で 282 モデルの必要量が最大 76% 下がり、
248
+ 段階が 180 か所上がる攻撃が見つかったため): ほかの利用者の実測は、それが無いときの見積もりより**必要量を上げる向きにだけ**使う
249
+ (VRAM・メモリを下げない・段階を上げない・点数を上げない)。判定する既定の設定も決めない。`torch_reserved` の実測
250
+ (CUDA の文脈を含まない)も「これ以上」としてだけ使い、式より小さければ式の値にする(作者の RTX 3070 の 2 件もこれで
251
+ 式の値になった。以前は実測で 0.9〜2 GiB 下げていた)。tests/test_contrib.py が全モデル × 8 / 12 / 16 / 24 GB で確かめる
252
+ - **上げすぎない**(2026-10-21、オーナーの方針。検査の閾値 40% の内側の +39% の提出 2 件で、314 モデル × 4 つの VRAM で
253
+ 段階が 639 か所下がる攻撃が見つかったため): 人が確かめていないほかの利用者の実測は、それが無いときの見積もりの
254
+ **+15% まで**しか必要量を上げず、その PC で段階・動かし方が変わるなら使わない。validate は、+15% を超えて上げる提出と、
255
+ よくある VRAM(4〜48 GB)× メモリ(16 / 32 / 64 GB)で段階を変える提出を「要確認」にする。確かめた提出は sha8 ごとに
256
+ data/contrib/REVIEWED(作者だけが書く)に理由と一緒に書き、そのときだけ +15% を超えられる。
257
+ `contrib aggregate --report` は、ほかの利用者の実測で変わる段階の一覧を出す
258
+ 実測の選び方(`estimate.pick_measurement`)は、設定が同じもの → 作者・この PC の実測(ほかの利用者より先)→
259
+ 張り付いていないもの → 大きい GPU → 大きい値。同じ設定のほかの利用者の実測は、設定の違う作者の実測より先に使う。
260
+ 「この PC の実測」(キャッシュの bench の結果)は v0 では作者の実測と同じ段階に数える(分けていない)
261
+ - **校正への取り込み**(`python -m genmodelfit.calibrate`): そろったほかの利用者の実測も、測り方が係数の合わせと同じ
262
+ (`calibrate.CALIBRATION_METRIC`。今は記録の無い RTX 5080 の 9 件の測り方)なら、係数の合わせと leave-one-out に入る。
263
+ bench の提出は `torch_reserved` なので、今は**照合**(上の表。全件で合わせた係数で当てた誤差)にだけ入る。
264
+ `torch_reserved` の実測が種類ごとに数件そろったら、測り方ごとに固定分を分けて合わせ直す(それまで混ぜない)
265
+ - **毎週の点検**(`genmodelfit contrib aggregate --report`。#19 の毎週の自動 PR が呼ぶ): その時点の data/contrib をまとめ直し、
266
+ 校正をやり直して種類ごとの LOO 誤差と照合の誤差を表にする。閾値(既定 25%、`--threshold`)を超えたら警告を出す
267
+ (`--fail-on-breach` で終了コード 3)。判定に入れるのは、評価できる種類(張り付いていない実測が 2 件以上)の LOO 誤差と、
268
+ ほかの利用者の実測の照合の誤差。作者の照合の行(下の RTX 3070 の 2 件)は既知の外れなので、表には出すが判定には入れない
269
+ - 同じ人が同じ構成で何度も出すと、件数が水増しされる(提出に個人を見分ける情報を入れないので見分けられない)。
270
+ 同じ内容(hash)は重複として断るが、測り直した別の値は断れない。PR を見る人が、同じ PR に同じ構成が並んでいないかを見る
271
+
216
272
  ## RTX 3070 8GB の実測との照合(bench、2026-10-19 UTC、係数の合わせには使っていない)
217
273
 
218
274
  `genmodelfit bench` で、この PC(RTX 3070 8GB、AI生成キットのエンジン ComfyUI 0.40.0)で 2 件を測りました。
219
275
  測り方が RTX 5080 の 9 件と違う(`vram_metric: torch_reserved` = ComfyUI のプロセスの torch の確保量の最大で、CUDA の文脈などは含まない。
220
276
  RTX 5080 の 9 件は何を記録したかが残っていない)ので、係数の合わせには使わず、照合だけに使います(`calibrate.CALIBRATION_METRIC`)。
277
+ この照合は `python -m genmodelfit.calibrate` が上の「結果」の表の下に作る(calibration.json の `check`。#34 から)。
221
278
 
222
279
  | モデル | GPU | 実測 GiB(torch_reserved) | 推定 GiB(全部載せ) | 誤差 | 推定での段階(8 GiB) |
223
280
  |---|---|---:|---:|---:|---|
@@ -200,6 +200,6 @@
200
200
  Civitai は v0.1 では読まない(docs/sources.md「Civitai」)ので、一覧の側で決められない。依頼の前に扱いを決める
201
201
  - **無検閲のモデルだけに効くもの**(既定の sfw では出ないので後回し): ChrisColeTech/LTX-2.3-uncensored-v1.4-FP8・
202
202
  LTX-2.5-uncensored-v1.1-FP8・qwen-image-edit-uncensored-GGUF、Heartsync/NSFW-Uncensored、Meina/MeinaHentai、
203
- SulphurAI/Sulphur-2-base、TenStrip/LTX2.3-10Eros、TheImposterImposters/lustifySDXLNSFW_v20-inpainting、
203
+ SulphurAI/Sulphur-2-base、TenStrip/LTX2.3-10Eros、andro-flock/LUSTIFY-SDXL-NSFW-checkpoint-v2-0-INPAINTING(2026-10-21 から同じ重みの写しのこちらを載せる)、
204
204
  kkkkk26/lustify_v9、sinkinai/hassaku-hentai(記載が無い)、AtomicChat/Qwen-Image-2.1-Turbo-Uncensored-GGUF・
205
205
  kpsss34/FHDR_Uncensored(元の規約より寛容)。出すなら A・B の文を使える