pixlstash 1.7.0.dev2__tar.gz → 1.7.0.dev4__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.
- {pixlstash-1.7.0.dev2/pixlstash.egg-info → pixlstash-1.7.0.dev4}/PKG-INFO +5 -4
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/README.md +4 -3
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/frontend/package-lock.json +2 -2
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/frontend/package.json +1 -1
- pixlstash-1.7.0.dev4/pixlstash/data/anchors/clipiqa_bad.npy +0 -0
- pixlstash-1.7.0.dev4/pixlstash/data/anchors/clipiqa_good.npy +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/__init__.py +1 -0
- pixlstash-1.7.0.dev4/pixlstash/db_models/detection.py +95 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/picture.py +8 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/tag.py +6 -0
- pixlstash-1.7.0.dev2/pixlstash/frontend/dist/assets/index-BdRiWzmx.css → pixlstash-1.7.0.dev4/pixlstash/frontend/dist/assets/index-C0DqJBy2.css +1 -1
- pixlstash-1.7.0.dev4/pixlstash/frontend/dist/assets/index-MvC0qIft.js +16 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/index.html +2 -2
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/engine.py +16 -0
- pixlstash-1.7.0.dev4/pixlstash/migrations/versions/0061_add_detection.py +63 -0
- pixlstash-1.7.0.dev4/pixlstash/migrations/versions/0062_recompute_smart_score_calibrated_anomaly.py +46 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/picture_scoring.py +91 -36
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/characters.py +25 -6
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/filesystem.py +90 -51
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/import_folders.py +24 -3
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/picture_sets.py +65 -11
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_crud.py +166 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_export.py +2 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_import.py +17 -2
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_misc.py +11 -6
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_thumbnails.py +29 -0
- pixlstash-1.7.0.dev4/pixlstash/routes/reference_folders.py +1587 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/stacks.py +11 -6
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/tag_predictions.py +33 -8
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/tag_suggestions.py +55 -17
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/tags.py +131 -1
- pixlstash-1.7.0.dev4/pixlstash/routes/test_hooks.py +234 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/server.py +17 -0
- pixlstash-1.7.0.dev4/pixlstash/services/impossible_tag_clear_service.py +140 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/impossible_tag_scan_service.py +41 -55
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/plugin_service.py +9 -1
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/tagger_run_service.py +42 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/florence2.py +171 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/pixlstash_tagger.py +1 -1
- pixlstash-1.7.0.dev4/pixlstash/tasks/detection_task.py +200 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_watch_folder_import_finder.py +31 -2
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/smart_score_task.py +21 -64
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/task_type.py +1 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/watch_folder_import_task.py +25 -2
- pixlstash-1.7.0.dev4/pixlstash/utils/quality/anomaly_penalty.py +254 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/quality/smart_score_utils.py +108 -14
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/export_utils.py +154 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/person_tags.py +44 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/vault.py +66 -3
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4/pixlstash.egg-info}/PKG-INFO +5 -4
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash.egg-info/SOURCES.txt +17 -2
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pyproject.toml +1 -1
- pixlstash-1.7.0.dev4/tests/test_anomaly_penalty.py +275 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_architecture_guardrails.py +11 -4
- pixlstash-1.7.0.dev4/tests/test_detection_florence.py +146 -0
- pixlstash-1.7.0.dev4/tests/test_detection_model.py +193 -0
- pixlstash-1.7.0.dev4/tests/test_detections_scope.py +245 -0
- pixlstash-1.7.0.dev4/tests/test_impossible_clear.py +130 -0
- pixlstash-1.7.0.dev4/tests/test_impossible_clear_authz.py +190 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_impossible_filter.py +3 -1
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_person_tags.py +34 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_reference_folder_sidecars.py +296 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_watch_folder_worker.py +99 -0
- pixlstash-1.7.0.dev2/pixlstash/frontend/dist/assets/index-C5zoCHch.js +0 -16
- pixlstash-1.7.0.dev2/pixlstash/routes/reference_folders.py +0 -566
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/LICENSE +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/MANIFEST.in +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/frontend/LICENSE +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/LICENSE +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/alembic.ini +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/app.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/auth.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/anchors/builtin_bad.npy +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/anchors/builtin_good.npy +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/comfyui-workflows/built-in/Flux2-Klein-Image-Edit.json +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/comfyui-workflows/built-in/Flux2-Klein-t2i.json +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/comfyui-workflows/built-in/Upscale-2x-RealESRGAN.json +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/scalar-assets/ScreenshotToken.jpg +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/scalar-assets/ScreenshotTokens.jpg +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/scalar-assets/ScreenshotsUserSettings.jpg +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/scalar-assets/WhereIsUserSettings.jpg +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/data/scalar-assets/logo.png +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/database.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/character.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/deleted_file_log.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/face.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/guest_score.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/guest_session.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/import_folder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/metadata.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/picture_likeness.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/picture_project.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/picture_set.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/picture_stack.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/project.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/quality.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/reference_folder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/snapshot.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/tag_prediction.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/tag_suggestion.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/tagger_run.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/user.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/db_models/user_token.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/event_types.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/Empty.png +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/EmptyTrash.png +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/Logo.png +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/Watermark.png +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/assets/Tiny5-Regular-WaYIHWdr.ttf +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/favicon.ico +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/frontend/dist/vite.svg +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_loading_dataset_prepper.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/base.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/blur_sharpen.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/brightness_contrast.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/colour_filter.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/pixelate.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/plugin_template.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/rotate.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/built-in/scaling.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/registry.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/image_plugins/service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/model_lifecycle.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/vram_budget.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/workflows/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/workflows/clip_embedding.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/workflows/description.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/workflows/face_embedding.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/workflows/tagging.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/inference/workflows/text_embedding.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/env.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/script.py.mako +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0001_baseline.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0002_add_text_score.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0003_add_original_file_name.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0004_add_comfyui_fields.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0005_add_projects.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0006_add_attachment_url.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0007_add_picture_project_id.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0008_add_compact_mode.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0009_add_picture_project_membership.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0010_project_name_uniqueness.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0011_pictureset_name_uniqueness.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0012_character_name_uniqueness.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0013_tag_prediction.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0014_tag_prediction_composite_index.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0015_tag_prediction_model_version_rename.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0016_tag_prediction_confirm_applied.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0017_anomaly_tag_uncertainty.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0018_anomaly_tag_uncertainty_disagreement.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0019_pending_character_id.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0020_source_picture_id.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0021_tagger_enabled_flags.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0022_add_check_for_updates.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0023_add_show_keyboard_hint.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0024_add_deleted_file_log.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0025_add_reference_folders.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0026_add_caption_file_and_sync_captions.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0027_add_caption_file_mtime.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0028_add_smart_score.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0029_add_import_excluded_to_picture.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0030_add_import_folders.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0031_migrate_watch_folders_to_import_folder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0032_add_reference_folder_host_path.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0033_add_import_folder_host_path.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0034_add_token_scope_fields.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0035_drop_face_quality.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0036_add_token_include_attachments.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0037_add_user_public_url.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0038_add_watermark_fields.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0039_drop_color_histogram.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0040_move_text_score_to_picture.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0041_guest_scores.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0042_guest_session_cookie_token.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0043_pictureset_icon_color.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0044_add_grid_sort_indexes.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0045_tagger_settings.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0046_tag_sentinel_rename.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0047_add_stack_leader_grid_indexes.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0048_normalize_stack_positions.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0049_snapshots.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0050_reset_metadata_hash_membership.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0051_deleted_file_log_path_sha.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0052_drop_import_excluded_sentinel.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0053_add_face_model_pack.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0054_add_sidebar_docked.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0055_add_sidebar_width.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0056_add_hide_purge_snapshot_warning.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0057_split_caption_sidecars.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0058_add_tag_suggestion.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0059_add_tagger_run.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/migrations/versions/0060_tag_prediction_label_ledger.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/pixl_logging.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/_helpers.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/comfyui.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/config.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/guest_scores.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_face_search.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_helpers.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_likeness_search.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_listing.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/pictures/_search.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/projects.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/share.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/snapshots.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/tagger_runs.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/routes/taggers.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/config_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/restore_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/search_query_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/share_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/snapshot_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/stack_membership.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/tag_prediction_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/tag_scan_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/services/tag_suggestion_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/stacking.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/startup_checks.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/base.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/clip_service.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/joycaption.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/registry.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/sbert.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tagger_plugins/wd14.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/task_runner.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/base_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/base_task_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/comfyui_extraction_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/description_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/ensure_gfs_snapshot_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/ensure_gfs_snapshot_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/face_detection_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/face_extraction_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/face_model_refresh_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/image_embedding_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/likeness_parameters_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/likeness_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_comfyui_extraction_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_description_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_face_extraction_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_face_model_refresh_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_file_purge_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_file_purge_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_image_embedding_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_likeness_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_likeness_parameters_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_quality_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_smart_score_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_source_face_likeness_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_tag_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_tag_prediction_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_text_embedding_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/missing_text_score_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/quality_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/reference_folder_scan_finder.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/reference_folder_scan_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/source_face_likeness_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/tag_prediction_backfill_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/tag_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/text_embedding_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/tasks/text_score_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/atomic_write.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/caption_file_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/comfyui_utilities.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/face_tags.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/host_path_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/image_processing/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/image_processing/face_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/image_processing/image_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/image_processing/video_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/insightface_batched.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/insightface_model_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/likeness/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/likeness/likeness_parameter_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/likeness/likeness_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/model_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/near_neighbor.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/path_mapper.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/quality/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/quality/quality_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/query/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/query/predicate_filter.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/rate_limiter.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/reference_folder_validator.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/reference_folder_watcher.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/request_origin.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/caption_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/filter_helpers.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/label_ledger.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/path_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/picture_stats.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/serialization_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/system_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/tag_prediction_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/service/user_settings_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/snapshot_compression.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/stack/__init__.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/stack/stack_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/vram_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/utils/watermark.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/work_planner.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash/worker_config.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash.egg-info/dependency_links.txt +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash.egg-info/entry_points.txt +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash.egg-info/requires.txt +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/pixlstash.egg-info/top_level.txt +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/setup.cfg +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/setup.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_api_coverage.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_authentication.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_backend_order_stability.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_batch_apply_scores.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_batch_character_likeness_scope.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_build_desktop_runtime.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_characters_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_clip_text_embedding_similarity.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_comfyui_workflow_extraction.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_default_device_override.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_docker_windows_host_paths.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_export_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_face_detection_extreme_aspect_ratio.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_face_extraction_speed.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_facial_features_worker.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_find_orphaned_files.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_florence.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_full_pipeline.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_gfs_snapshot_schedule.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_guest_scoring.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_image_embedding_worker.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_image_plugins_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_insightface_model_pack.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_label_ledger.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_likeness_and_face_search.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_likeness_worker.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_many_to_many_face_data.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_metadata_hash.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_migrations.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_openapi_response_schemas.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_picture_mutation_scope.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_picture_plugins.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_picture_sets.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_picture_stack_utils.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_pictures_stream.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_predicate_filter.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_projects_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_quality_task_shutdown.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_rate_limiter.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_read_token_security.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_restore.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_rocm_device_check.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_server.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_server_external_listener.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_server_simple.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_smart_score_consistency.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_snapshot_compression.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_snapshots.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_snapshots_auth.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_ssl_generation.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_stack_position_invariant.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_stacks_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_stacks_membership.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_startup_banner_encoding.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_stats_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tag_prediction_backfill.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tag_predictions_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tag_suggestions_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tag_task.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tag_worker.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tagger_plugin_registry.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_tagger_runs_api.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_user_settings_tagger_settings.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_vram_batch_budget.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_websocket_auth.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_work_planner.py +0 -0
- {pixlstash-1.7.0.dev2 → pixlstash-1.7.0.dev4}/tests/test_workers_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pixlstash
|
|
3
|
-
Version: 1.7.0.
|
|
3
|
+
Version: 1.7.0.dev4
|
|
4
4
|
Summary: Self-hosted picture library with AI tagging, semantic search, and a clean web UI
|
|
5
5
|
Author-email: Gaute Lindkvist <lindkvis@gmail.com>
|
|
6
6
|
License-Expression: GPL-3.0-only AND MIT
|
|
@@ -110,9 +110,10 @@ PixlStash runs on your machine and serves the UI at a local (or Internet-facing)
|
|
|
110
110
|
</a>
|
|
111
111
|
</p>
|
|
112
112
|
|
|
113
|
-
PixlStash is available as a **native desktop app for Windows
|
|
114
|
-
(no Python or browser tab required), as a Docker image, or
|
|
115
|
-
|
|
113
|
+
PixlStash is available as a **native desktop app for Windows, macOS (Apple
|
|
114
|
+
Silicon), and Linux** (no Python or browser tab required), as a Docker image, or
|
|
115
|
+
as a pip package that runs anywhere Python does (including Intel Macs). The
|
|
116
|
+
desktop app ships a ready-to-run CPU runtime,
|
|
116
117
|
so it works offline out of the box, and auto-detects your hardware to offer
|
|
117
118
|
optional GPU acceleration (NVIDIA CUDA, or experimental AMD ROCm), which it
|
|
118
119
|
installs on demand straight from PyPI / PyTorch.
|
|
@@ -36,9 +36,10 @@ PixlStash runs on your machine and serves the UI at a local (or Internet-facing)
|
|
|
36
36
|
</a>
|
|
37
37
|
</p>
|
|
38
38
|
|
|
39
|
-
PixlStash is available as a **native desktop app for Windows
|
|
40
|
-
(no Python or browser tab required), as a Docker image, or
|
|
41
|
-
|
|
39
|
+
PixlStash is available as a **native desktop app for Windows, macOS (Apple
|
|
40
|
+
Silicon), and Linux** (no Python or browser tab required), as a Docker image, or
|
|
41
|
+
as a pip package that runs anywhere Python does (including Intel Macs). The
|
|
42
|
+
desktop app ships a ready-to-run CPU runtime,
|
|
42
43
|
so it works offline out of the box, and auto-detects your hardware to offer
|
|
43
44
|
optional GPU acceleration (NVIDIA CUDA, or experimental AMD ROCm), which it
|
|
44
45
|
installs on demand straight from PyPI / PyTorch.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pixlstash-frontend",
|
|
3
|
-
"version": "1.7.0-dev.
|
|
3
|
+
"version": "1.7.0-dev.4",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pixlstash-frontend",
|
|
9
|
-
"version": "1.7.0-dev.
|
|
9
|
+
"version": "1.7.0-dev.4",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@mdi/font": "^7.4.47",
|
|
12
12
|
"axios": "^1.16.0",
|
|
Binary file
|
|
Binary file
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from .character import Character # noqa: F401
|
|
2
2
|
from .deleted_file_log import DeletedFileLog # noqa: F401
|
|
3
|
+
from .detection import Detection # noqa: F401
|
|
3
4
|
from .face import Face # noqa: F401
|
|
4
5
|
from .picture import Picture, SortMechanism # noqa: F401
|
|
5
6
|
from .picture_project import PictureProjectMember # noqa: F401
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import Float
|
|
4
|
+
from sqlmodel import (
|
|
5
|
+
Column,
|
|
6
|
+
ForeignKey,
|
|
7
|
+
Integer,
|
|
8
|
+
select,
|
|
9
|
+
String,
|
|
10
|
+
SQLModel,
|
|
11
|
+
Field,
|
|
12
|
+
Relationship,
|
|
13
|
+
UniqueConstraint,
|
|
14
|
+
)
|
|
15
|
+
from typing import List, Optional, TYPE_CHECKING
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from .picture import Picture
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Detection(SQLModel, table=True):
|
|
22
|
+
"""An object-detection bounding box for a picture.
|
|
23
|
+
|
|
24
|
+
Mirrors :class:`~pixlstash.db_models.face.Face`'s bbox-as-JSON convention so
|
|
25
|
+
the frontend overlay, scope enforcement, and copy-on-output logic can be
|
|
26
|
+
reused — but stores an open-vocabulary ``label`` (e.g. ``"dog"``) instead of
|
|
27
|
+
a face/character. Produced by a user-triggered detection pass (see
|
|
28
|
+
:class:`~pixlstash.tasks.detection_task.DetectionTask`), never by a
|
|
29
|
+
background WorkFinder.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
id: int = Field(default=None, primary_key=True)
|
|
33
|
+
|
|
34
|
+
picture_id: int = Field(
|
|
35
|
+
sa_column=Column(
|
|
36
|
+
Integer,
|
|
37
|
+
ForeignKey("picture.id", ondelete="CASCADE"),
|
|
38
|
+
index=True,
|
|
39
|
+
),
|
|
40
|
+
default=None,
|
|
41
|
+
)
|
|
42
|
+
frame_index: int = Field(default=0)
|
|
43
|
+
detection_index: int = Field(default=0)
|
|
44
|
+
|
|
45
|
+
label: Optional[str] = Field(
|
|
46
|
+
sa_column=Column("label", String, default=None, index=True)
|
|
47
|
+
)
|
|
48
|
+
bbox_: Optional[str] = Field(sa_column=Column("bbox", String, default=None))
|
|
49
|
+
# Florence grounding/OD returns no per-box confidence, so score is nullable;
|
|
50
|
+
# other detectors may populate it.
|
|
51
|
+
score: Optional[float] = Field(sa_column=Column("score", Float, default=None))
|
|
52
|
+
# Detector provenance, e.g. "florence2:od" or "florence2:grounding".
|
|
53
|
+
source: Optional[str] = Field(sa_column=Column("source", String, default=None))
|
|
54
|
+
# JSON escape-hatch for future per-detection data (masks, generation params).
|
|
55
|
+
attributes_: Optional[str] = Field(
|
|
56
|
+
sa_column=Column("attributes", String, default=None)
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Relationships
|
|
60
|
+
picture: Optional["Picture"] = Relationship(back_populates="detections")
|
|
61
|
+
|
|
62
|
+
__table_args__ = (UniqueConstraint("picture_id", "frame_index", "detection_index"),)
|
|
63
|
+
|
|
64
|
+
def __init__(self, *args, bbox=None, **kwargs):
|
|
65
|
+
super().__init__(*args, **kwargs)
|
|
66
|
+
if bbox is not None:
|
|
67
|
+
self.bbox = bbox
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def bbox(self) -> Optional[List[int]]:
|
|
71
|
+
"""Return the bounding box as ``[x1, y1, x2, y2]`` pixels, or None."""
|
|
72
|
+
if self.bbox_:
|
|
73
|
+
return json.loads(self.bbox_)
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
@bbox.setter
|
|
77
|
+
def bbox(self, bbox: List[int]):
|
|
78
|
+
"""Set the bounding box from a list of integers."""
|
|
79
|
+
self.bbox_ = json.dumps(bbox)
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def find(cls, session, **filters) -> List["Detection"]:
|
|
83
|
+
"""Find detections by picture_id, frame_index, and/or detection_index.
|
|
84
|
+
|
|
85
|
+
Supports passing a list for picture_id (uses ``IN`` if so).
|
|
86
|
+
"""
|
|
87
|
+
query = select(cls)
|
|
88
|
+
for attr, value in filters.items():
|
|
89
|
+
if hasattr(cls, attr):
|
|
90
|
+
col = getattr(cls, attr)
|
|
91
|
+
if attr == "picture_id" and isinstance(value, list):
|
|
92
|
+
query = query.where(col.in_(value))
|
|
93
|
+
else:
|
|
94
|
+
query = query.where(col == value)
|
|
95
|
+
return session.exec(query).all()
|
|
@@ -35,6 +35,7 @@ from pixlstash.pixl_logging import get_logger
|
|
|
35
35
|
|
|
36
36
|
if TYPE_CHECKING:
|
|
37
37
|
from .character import Character
|
|
38
|
+
from .detection import Detection
|
|
38
39
|
from .picture_likeness import PictureLikeness
|
|
39
40
|
from .project import Project
|
|
40
41
|
from .reference_folder import ReferenceFolder
|
|
@@ -307,6 +308,13 @@ class Picture(SQLModel, table=True):
|
|
|
307
308
|
"passive_deletes": True,
|
|
308
309
|
},
|
|
309
310
|
)
|
|
311
|
+
detections: List["Detection"] = Relationship(
|
|
312
|
+
back_populates="picture",
|
|
313
|
+
sa_relationship_kwargs={
|
|
314
|
+
"cascade": "all, delete-orphan",
|
|
315
|
+
"passive_deletes": True,
|
|
316
|
+
},
|
|
317
|
+
)
|
|
310
318
|
tags: List["Tag"] = Relationship(
|
|
311
319
|
back_populates="picture",
|
|
312
320
|
sa_relationship_kwargs={
|
|
@@ -20,6 +20,12 @@ DEFAULT_SMART_SCORE_PENALIZED_TAGS = {
|
|
|
20
20
|
"silicone breasts": 0,
|
|
21
21
|
"malformed foot": 4,
|
|
22
22
|
"pixelated": 2,
|
|
23
|
+
# IQA / signal-degradation tags (added 2026-06-20). Weights are an initial
|
|
24
|
+
# proposal to tune; the tagger detection thresholds come from the post-train gate.
|
|
25
|
+
"compression artifacts": 3,
|
|
26
|
+
"noise": 2,
|
|
27
|
+
"oversaturation": 2,
|
|
28
|
+
"watermark": 4,
|
|
23
29
|
}
|
|
24
30
|
# Tags that PixlTagger merges into a parent just before training (its tag_remap),
|
|
25
31
|
# mirrored here as PixlStash's own editable copy. A picture tagged with a child here
|