local-file-organizer 2.0.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.
- local_file_organizer-2.0.0/LICENSE +21 -0
- local_file_organizer-2.0.0/PKG-INFO +435 -0
- local_file_organizer-2.0.0/README.md +280 -0
- local_file_organizer-2.0.0/pyproject.toml +1445 -0
- local_file_organizer-2.0.0/setup.cfg +4 -0
- local_file_organizer-2.0.0/src/file_organizer/__init__.py +14 -0
- local_file_organizer-2.0.0/src/file_organizer/_compat.py +15 -0
- local_file_organizer-2.0.0/src/file_organizer/api/__init__.py +80 -0
- local_file_organizer-2.0.0/src/file_organizer/api/api_keys.py +94 -0
- local_file_organizer-2.0.0/src/file_organizer/api/auth.py +176 -0
- local_file_organizer-2.0.0/src/file_organizer/api/auth_db.py +79 -0
- local_file_organizer-2.0.0/src/file_organizer/api/auth_models.py +31 -0
- local_file_organizer-2.0.0/src/file_organizer/api/auth_rate_limit.py +157 -0
- local_file_organizer-2.0.0/src/file_organizer/api/auth_store.py +125 -0
- local_file_organizer-2.0.0/src/file_organizer/api/cache.py +171 -0
- local_file_organizer-2.0.0/src/file_organizer/api/config.py +478 -0
- local_file_organizer-2.0.0/src/file_organizer/api/database.py +158 -0
- local_file_organizer-2.0.0/src/file_organizer/api/db.py +127 -0
- local_file_organizer-2.0.0/src/file_organizer/api/db_models.py +162 -0
- local_file_organizer-2.0.0/src/file_organizer/api/dependencies.py +230 -0
- local_file_organizer-2.0.0/src/file_organizer/api/exceptions.py +76 -0
- local_file_organizer-2.0.0/src/file_organizer/api/integration_models.py +104 -0
- local_file_organizer-2.0.0/src/file_organizer/api/jobs.py +147 -0
- local_file_organizer-2.0.0/src/file_organizer/api/main.py +183 -0
- local_file_organizer-2.0.0/src/file_organizer/api/middleware.py +176 -0
- local_file_organizer-2.0.0/src/file_organizer/api/models.py +449 -0
- local_file_organizer-2.0.0/src/file_organizer/api/openapi_responses.py +191 -0
- local_file_organizer-2.0.0/src/file_organizer/api/rate_limit.py +124 -0
- local_file_organizer-2.0.0/src/file_organizer/api/realtime.py +191 -0
- local_file_organizer-2.0.0/src/file_organizer/api/repositories/__init__.py +15 -0
- local_file_organizer-2.0.0/src/file_organizer/api/repositories/file_metadata_repo.py +178 -0
- local_file_organizer-2.0.0/src/file_organizer/api/repositories/job_repo.py +159 -0
- local_file_organizer-2.0.0/src/file_organizer/api/repositories/session_repo.py +115 -0
- local_file_organizer-2.0.0/src/file_organizer/api/repositories/settings_repo.py +134 -0
- local_file_organizer-2.0.0/src/file_organizer/api/repositories/workspace_repo.py +114 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/__init__.py +42 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/analyze.py +131 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/auth.py +340 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/config.py +163 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/daemon.py +95 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/dedupe.py +233 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/files.py +539 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/health.py +122 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/integrations.py +334 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/marketplace.py +305 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/organize.py +349 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/realtime.py +189 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/search.py +388 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/setup.py +306 -0
- local_file_organizer-2.0.0/src/file_organizer/api/routers/system.py +232 -0
- local_file_organizer-2.0.0/src/file_organizer/api/service_facade.py +576 -0
- local_file_organizer-2.0.0/src/file_organizer/api/test_utils.py +110 -0
- local_file_organizer-2.0.0/src/file_organizer/api/utils.py +86 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/__init__.py +65 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/analytics.py +382 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/api.py +269 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/api_keys.py +49 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/autotag.py +279 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/autotag_v2.py +256 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/benchmark.py +1368 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/completion.py +54 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/config_cli.py +118 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/copilot.py +102 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/daemon.py +246 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe.py +314 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe_display.py +213 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe_hash.py +153 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe_removal.py +125 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe_renderer.py +465 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe_strategy.py +143 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/dedupe_v2.py +343 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/doctor.py +464 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/interactive.py +107 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/lazy.py +270 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/main.py +647 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/marketplace.py +255 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/models_cli.py +56 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/organize.py +362 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/path_validation.py +212 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/profile.py +520 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/rules.py +426 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/setup.py +265 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/state.py +47 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/suggest.py +248 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/undo_history.py +319 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/undo_recover.py +149 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/undo_redo.py +184 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/update.py +96 -0
- local_file_organizer-2.0.0/src/file_organizer/cli/utilities.py +470 -0
- local_file_organizer-2.0.0/src/file_organizer/client/__init__.py +21 -0
- local_file_organizer-2.0.0/src/file_organizer/client/async_client.py +641 -0
- local_file_organizer-2.0.0/src/file_organizer/client/exceptions.py +39 -0
- local_file_organizer-2.0.0/src/file_organizer/client/models.py +197 -0
- local_file_organizer-2.0.0/src/file_organizer/client/sync_client.py +644 -0
- local_file_organizer-2.0.0/src/file_organizer/config/__init__.py +18 -0
- local_file_organizer-2.0.0/src/file_organizer/config/manager.py +524 -0
- local_file_organizer-2.0.0/src/file_organizer/config/migrations.py +218 -0
- local_file_organizer-2.0.0/src/file_organizer/config/path_manager.py +157 -0
- local_file_organizer-2.0.0/src/file_organizer/config/path_migration.py +140 -0
- local_file_organizer-2.0.0/src/file_organizer/config/provider_env.py +362 -0
- local_file_organizer-2.0.0/src/file_organizer/config/schema.py +107 -0
- local_file_organizer-2.0.0/src/file_organizer/core/__init__.py +10 -0
- local_file_organizer-2.0.0/src/file_organizer/core/backend_detector.py +268 -0
- local_file_organizer-2.0.0/src/file_organizer/core/dispatcher.py +617 -0
- local_file_organizer-2.0.0/src/file_organizer/core/display.py +100 -0
- local_file_organizer-2.0.0/src/file_organizer/core/file_ops.py +219 -0
- local_file_organizer-2.0.0/src/file_organizer/core/hardware_profile.py +315 -0
- local_file_organizer-2.0.0/src/file_organizer/core/initializer.py +117 -0
- local_file_organizer-2.0.0/src/file_organizer/core/organizer.py +639 -0
- local_file_organizer-2.0.0/src/file_organizer/core/path_guard.py +243 -0
- local_file_organizer-2.0.0/src/file_organizer/core/setup_wizard.py +375 -0
- local_file_organizer-2.0.0/src/file_organizer/core/types.py +122 -0
- local_file_organizer-2.0.0/src/file_organizer/daemon/__init__.py +20 -0
- local_file_organizer-2.0.0/src/file_organizer/daemon/config.py +59 -0
- local_file_organizer-2.0.0/src/file_organizer/daemon/pid.py +568 -0
- local_file_organizer-2.0.0/src/file_organizer/daemon/scheduler.py +197 -0
- local_file_organizer-2.0.0/src/file_organizer/daemon/service.py +591 -0
- local_file_organizer-2.0.0/src/file_organizer/deploy/__init__.py +12 -0
- local_file_organizer-2.0.0/src/file_organizer/deploy/compose_scaler.py +152 -0
- local_file_organizer-2.0.0/src/file_organizer/deploy/config.py +164 -0
- local_file_organizer-2.0.0/src/file_organizer/deploy/health.py +245 -0
- local_file_organizer-2.0.0/src/file_organizer/deploy/monitoring.py +259 -0
- local_file_organizer-2.0.0/src/file_organizer/deploy/scaling.py +278 -0
- local_file_organizer-2.0.0/src/file_organizer/desktop/__init__.py +13 -0
- local_file_organizer-2.0.0/src/file_organizer/desktop/__main__.py +6 -0
- local_file_organizer-2.0.0/src/file_organizer/desktop/app.py +331 -0
- local_file_organizer-2.0.0/src/file_organizer/events/__init__.py +82 -0
- local_file_organizer-2.0.0/src/file_organizer/events/audit.py +282 -0
- local_file_organizer-2.0.0/src/file_organizer/events/config.py +46 -0
- local_file_organizer-2.0.0/src/file_organizer/events/consumer.py +260 -0
- local_file_organizer-2.0.0/src/file_organizer/events/discovery.py +263 -0
- local_file_organizer-2.0.0/src/file_organizer/events/health.py +275 -0
- local_file_organizer-2.0.0/src/file_organizer/events/middleware.py +464 -0
- local_file_organizer-2.0.0/src/file_organizer/events/monitor.py +251 -0
- local_file_organizer-2.0.0/src/file_organizer/events/publisher.py +179 -0
- local_file_organizer-2.0.0/src/file_organizer/events/pubsub.py +301 -0
- local_file_organizer-2.0.0/src/file_organizer/events/replay.py +322 -0
- local_file_organizer-2.0.0/src/file_organizer/events/service_bus.py +374 -0
- local_file_organizer-2.0.0/src/file_organizer/events/stream.py +432 -0
- local_file_organizer-2.0.0/src/file_organizer/events/subscription.py +285 -0
- local_file_organizer-2.0.0/src/file_organizer/events/types.py +134 -0
- local_file_organizer-2.0.0/src/file_organizer/history/__init__.py +30 -0
- local_file_organizer-2.0.0/src/file_organizer/history/cleanup.py +425 -0
- local_file_organizer-2.0.0/src/file_organizer/history/database.py +287 -0
- local_file_organizer-2.0.0/src/file_organizer/history/export.py +343 -0
- local_file_organizer-2.0.0/src/file_organizer/history/models.py +262 -0
- local_file_organizer-2.0.0/src/file_organizer/history/tracker.py +347 -0
- local_file_organizer-2.0.0/src/file_organizer/history/transaction.py +292 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/__init__.py +25 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/base.py +73 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/browser.py +68 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/manager.py +109 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/obsidian.py +156 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/vscode.py +96 -0
- local_file_organizer-2.0.0/src/file_organizer/integrations/workflow.py +103 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/__init__.py +43 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/intelligence.py +63 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/model.py +75 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/pipeline.py +120 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/processor.py +71 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/search.py +97 -0
- local_file_organizer-2.0.0/src/file_organizer/interfaces/storage.py +77 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/__init__.py +3 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/__init__.py +147 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/adapters.py +392 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/categories.py +493 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/compatibility.py +426 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/config.py +411 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/migrator.py +443 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/numbering.py +526 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/scanner.py +363 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/system.py +568 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/transformer.py +360 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/johnny_decimal/validator.py +349 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/__init__.py +59 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/ai/__init__.py +59 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/ai/feature_extractor.py +496 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/ai/feedback.py +538 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/ai/file_mover.py +455 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/ai/suggestion_engine.py +622 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/categories.py +379 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/config.py +346 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/detection/__init__.py +27 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/detection/heuristics.py +1000 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/folder_generator.py +267 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/folder_mapper.py +382 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/migration_manager.py +718 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/rules/__init__.py +37 -0
- local_file_organizer-2.0.0/src/file_organizer/methodologies/para/rules/engine.py +585 -0
- local_file_organizer-2.0.0/src/file_organizer/models/__init__.py +60 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_claude_client.py +76 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_claude_response.py +56 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_llama_cpp_helpers.py +53 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_ollama_response.py +90 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_openai_client.py +82 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_openai_response.py +35 -0
- local_file_organizer-2.0.0/src/file_organizer/models/_vision_helpers.py +76 -0
- local_file_organizer-2.0.0/src/file_organizer/models/analytics.py +263 -0
- local_file_organizer-2.0.0/src/file_organizer/models/audio_model.py +246 -0
- local_file_organizer-2.0.0/src/file_organizer/models/audio_registry.py +78 -0
- local_file_organizer-2.0.0/src/file_organizer/models/audio_transcriber.py +462 -0
- local_file_organizer-2.0.0/src/file_organizer/models/base.py +331 -0
- local_file_organizer-2.0.0/src/file_organizer/models/claude_text_model.py +174 -0
- local_file_organizer-2.0.0/src/file_organizer/models/claude_vision_model.py +283 -0
- local_file_organizer-2.0.0/src/file_organizer/models/llama_cpp_text_model.py +243 -0
- local_file_organizer-2.0.0/src/file_organizer/models/mlx_text_model.py +238 -0
- local_file_organizer-2.0.0/src/file_organizer/models/model_manager.py +359 -0
- local_file_organizer-2.0.0/src/file_organizer/models/openai_text_model.py +183 -0
- local_file_organizer-2.0.0/src/file_organizer/models/openai_vision_model.py +259 -0
- local_file_organizer-2.0.0/src/file_organizer/models/provider_factory.py +56 -0
- local_file_organizer-2.0.0/src/file_organizer/models/provider_registry.py +302 -0
- local_file_organizer-2.0.0/src/file_organizer/models/registry.py +74 -0
- local_file_organizer-2.0.0/src/file_organizer/models/suggestion_types.py +171 -0
- local_file_organizer-2.0.0/src/file_organizer/models/text_model.py +371 -0
- local_file_organizer-2.0.0/src/file_organizer/models/text_registry.py +49 -0
- local_file_organizer-2.0.0/src/file_organizer/models/vision_model.py +336 -0
- local_file_organizer-2.0.0/src/file_organizer/models/vision_registry.py +51 -0
- local_file_organizer-2.0.0/src/file_organizer/models/vision_schema.py +26 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/__init__.py +58 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/batch_sizer.py +275 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/buffer_pool.py +219 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/connection_pool.py +240 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/database.py +491 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/lazy_loader.py +206 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/leak_detector.py +219 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/memory_limiter.py +207 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/memory_profiler.py +287 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/model_cache.py +284 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/query_cache.py +226 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/resource_monitor.py +290 -0
- local_file_organizer-2.0.0/src/file_organizer/optimization/warmup.py +208 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/__init__.py +45 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/checkpoint.py +261 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/config.py +61 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/executor.py +66 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/models.py +158 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/persistence.py +162 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/priority_queue.py +191 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/processor.py +763 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/resource_manager.py +196 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/result.py +86 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/resume.py +279 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/scheduler.py +117 -0
- local_file_organizer-2.0.0/src/file_organizer/parallel/throttle.py +155 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/__init__.py +24 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/config.py +145 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/orchestrator.py +1010 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/processor_pool.py +198 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/resource_aware_executor.py +426 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/router.py +221 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/stages/__init__.py +25 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/stages/analyzer.py +125 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/stages/postprocessor.py +61 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/stages/preprocessor.py +111 -0
- local_file_organizer-2.0.0/src/file_organizer/pipeline/stages/writer.py +67 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/__init__.py +98 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/api/__init__.py +20 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/api/endpoints.py +318 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/api/hooks.py +445 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/api/models.py +155 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/base.py +207 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/config.py +142 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/errors.py +43 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/executor.py +440 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/hooks.py +86 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/ipc.py +152 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/lifecycle.py +128 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/__init__.py +41 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/errors.py +25 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/installer.py +284 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/metadata.py +112 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/models.py +281 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/repository.py +288 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/reviews.py +166 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/service.py +143 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/marketplace/validators.py +39 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/registry.py +366 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/sdk/__init__.py +23 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/sdk/client.py +223 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/sdk/decorators.py +69 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/sdk/testing.py +39 -0
- local_file_organizer-2.0.0/src/file_organizer/plugins/security.py +96 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/__init__.py +73 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/api_compat.py +344 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/audit.py +128 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/correctness.py +358 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/framework.py +273 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/memory_lifecycle.py +494 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/security.py +839 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/template_js.py +196 -0
- local_file_organizer-2.0.0/src/file_organizer/review_regressions/test_quality.py +299 -0
- local_file_organizer-2.0.0/src/file_organizer/services/__init__.py +47 -0
- local_file_organizer-2.0.0/src/file_organizer/services/analytics/__init__.py +17 -0
- local_file_organizer-2.0.0/src/file_organizer/services/analytics/analytics_service.py +422 -0
- local_file_organizer-2.0.0/src/file_organizer/services/analytics/metrics_calculator.py +131 -0
- local_file_organizer-2.0.0/src/file_organizer/services/analytics/storage_analyzer.py +265 -0
- local_file_organizer-2.0.0/src/file_organizer/services/analyzer.py +165 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/__init__.py +58 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/classifier.py +541 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/content_analyzer.py +274 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/lexicons.py +191 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/metadata_extractor.py +387 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/organizer.py +404 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/preprocessor.py +378 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/transcriber.py +326 -0
- local_file_organizer-2.0.0/src/file_organizer/services/audio/utils.py +384 -0
- local_file_organizer-2.0.0/src/file_organizer/services/auto_tagging/__init__.py +92 -0
- local_file_organizer-2.0.0/src/file_organizer/services/auto_tagging/content_analyzer.py +467 -0
- local_file_organizer-2.0.0/src/file_organizer/services/auto_tagging/tag_learning.py +495 -0
- local_file_organizer-2.0.0/src/file_organizer/services/auto_tagging/tag_recommender.py +406 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/__init__.py +31 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/conversation.py +156 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/engine.py +262 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/executor.py +453 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/intent_parser.py +301 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/models.py +118 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/rules/__init__.py +29 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/rules/actions.py +130 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/rules/executor.py +476 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/rules/models.py +204 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/rules/preview.py +256 -0
- local_file_organizer-2.0.0/src/file_organizer/services/copilot/rules/rule_manager.py +209 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/__init__.py +60 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/backup.py +343 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/detector.py +308 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/document_dedup.py +181 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/embedder.py +318 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/extractor.py +468 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/hasher.py +167 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/image_dedup.py +490 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/image_utils.py +569 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/index.py +207 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/quality.py +428 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/reporter.py +151 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/semantic.py +305 -0
- local_file_organizer-2.0.0/src/file_organizer/services/deduplication/viewer.py +608 -0
- local_file_organizer-2.0.0/src/file_organizer/services/inference_timer.py +127 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/__init__.py +96 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/confidence.py +530 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/conflict_resolver.py +412 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/directory_prefs.py +251 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/feedback_processor.py +445 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/folder_learner.py +332 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/naming_analyzer.py +457 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/pattern_extractor.py +495 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/pattern_learner.py +409 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/preference_database.py +591 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/preference_storage.py +735 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/preference_store.py +590 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/preference_tracker.py +466 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/profile_exporter.py +335 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/profile_importer.py +532 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/profile_manager.py +497 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/profile_merger.py +497 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/profile_migrator.py +481 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/scoring.py +412 -0
- local_file_organizer-2.0.0/src/file_organizer/services/intelligence/template_manager.py +556 -0
- local_file_organizer-2.0.0/src/file_organizer/services/misplacement_detector.py +490 -0
- local_file_organizer-2.0.0/src/file_organizer/services/pattern_analyzer.py +451 -0
- local_file_organizer-2.0.0/src/file_organizer/services/search/__init__.py +5 -0
- local_file_organizer-2.0.0/src/file_organizer/services/search/bm25_index.py +129 -0
- local_file_organizer-2.0.0/src/file_organizer/services/search/embedding_cache.py +258 -0
- local_file_organizer-2.0.0/src/file_organizer/services/search/hybrid_retriever.py +367 -0
- local_file_organizer-2.0.0/src/file_organizer/services/search/vector_index.py +122 -0
- local_file_organizer-2.0.0/src/file_organizer/services/smart_suggestions.py +524 -0
- local_file_organizer-2.0.0/src/file_organizer/services/suggestion_feedback.py +392 -0
- local_file_organizer-2.0.0/src/file_organizer/services/text_processor.py +499 -0
- local_file_organizer-2.0.0/src/file_organizer/services/video/__init__.py +25 -0
- local_file_organizer-2.0.0/src/file_organizer/services/video/metadata_extractor.py +291 -0
- local_file_organizer-2.0.0/src/file_organizer/services/video/organizer.py +171 -0
- local_file_organizer-2.0.0/src/file_organizer/services/video/scene_detector.py +425 -0
- local_file_organizer-2.0.0/src/file_organizer/services/vision_fallback.py +186 -0
- local_file_organizer-2.0.0/src/file_organizer/services/vision_processor.py +868 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/__init__.py +42 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/analytics_view.py +308 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/app.py +417 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/audio_view.py +373 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/copilot_view.py +199 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/file_browser.py +280 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/file_preview.py +341 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/methodology_view.py +306 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/organization_preview.py +232 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/settings_view.py +312 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/setup_wizard_view.py +774 -0
- local_file_organizer-2.0.0/src/file_organizer/tui/undo_history_view.py +358 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/__init__.py +26 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/_journal.py +29 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/durable_move.py +1701 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/models.py +125 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/rollback.py +666 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/trash_gc.py +549 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/undo_manager.py +441 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/validator.py +750 -0
- local_file_organizer-2.0.0/src/file_organizer/undo/viewer.py +384 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/__init__.py +34 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/background.py +43 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/checker.py +231 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/installer.py +413 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/manager.py +165 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/sidecar_updater.py +285 -0
- local_file_organizer-2.0.0/src/file_organizer/updater/state.py +99 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/__init__.py +15 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/atomic_io.py +36 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/atomic_write.py +357 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/chart_generator.py +150 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/cli_errors.py +55 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/epub_enhanced.py +798 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/file_readers.py +62 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/file_times.py +21 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/log_redact.py +610 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/__init__.py +374 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/_base.py +134 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/_scientific_stub.py +46 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/archives.py +458 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/cad.py +537 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/documents.py +385 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/ebook.py +119 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/readers/scientific.py +324 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/safe_copy.py +147 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/safedir.py +671 -0
- local_file_organizer-2.0.0/src/file_organizer/utils/text_processing.py +562 -0
- local_file_organizer-2.0.0/src/file_organizer/version.py +146 -0
- local_file_organizer-2.0.0/src/file_organizer/watcher/__init__.py +21 -0
- local_file_organizer-2.0.0/src/file_organizer/watcher/config.py +137 -0
- local_file_organizer-2.0.0/src/file_organizer/watcher/handler.py +374 -0
- local_file_organizer-2.0.0/src/file_organizer/watcher/monitor.py +318 -0
- local_file_organizer-2.0.0/src/file_organizer/watcher/queue.py +157 -0
- local_file_organizer-2.0.0/src/file_organizer/web/__init__.py +5 -0
- local_file_organizer-2.0.0/src/file_organizer/web/_helpers.py +319 -0
- local_file_organizer-2.0.0/src/file_organizer/web/csrf.py +185 -0
- local_file_organizer-2.0.0/src/file_organizer/web/file_operations.py +636 -0
- local_file_organizer-2.0.0/src/file_organizer/web/file_validators.py +108 -0
- local_file_organizer-2.0.0/src/file_organizer/web/files_routes.py +256 -0
- local_file_organizer-2.0.0/src/file_organizer/web/marketplace_routes.py +289 -0
- local_file_organizer-2.0.0/src/file_organizer/web/organize_routes.py +1074 -0
- local_file_organizer-2.0.0/src/file_organizer/web/profile_routes.py +1321 -0
- local_file_organizer-2.0.0/src/file_organizer/web/router.py +62 -0
- local_file_organizer-2.0.0/src/file_organizer/web/settings_routes.py +705 -0
- local_file_organizer-2.0.0/src/file_organizer/web/setup_routes.py +50 -0
- local_file_organizer-2.0.0/src/file_organizer/web/static/css/styles.css +1409 -0
- local_file_organizer-2.0.0/src/file_organizer/web/static/images/logo.png +0 -0
- local_file_organizer-2.0.0/src/file_organizer/web/static/js/app.js +563 -0
- local_file_organizer-2.0.0/src/file_organizer/web/static/js/desktop_api.js +150 -0
- local_file_organizer-2.0.0/src/file_organizer/web/static/js/htmx.min.js +1 -0
- local_file_organizer-2.0.0/src/file_organizer/web/static/js/setup_wizard.js +364 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/base.html +81 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/files/_preview.html +46 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/files/_results.html +239 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/files/_tree.html +45 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/files/browser.html +42 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/index.html +59 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/marketplace/index.html +176 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/marketplace/plugin_details.html +47 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/organize/_history.html +40 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/organize/_job_status.html +86 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/organize/_plan.html +125 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/organize/_stats.html +33 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/organize/dashboard.html +143 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_account_settings.html +42 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_activity.html +12 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_api_keys.html +48 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_edit.html +39 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_notifications.html +22 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_shared.html +45 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_team.html +52 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/_workspaces.html +49 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/forgot_password.html +29 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/index.html +98 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/login.html +26 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/register.html +30 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/profile/reset_password.html +32 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/settings/_advanced.html +68 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/settings/_appearance.html +44 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/settings/_general.html +68 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/settings/_models.html +66 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/settings/_organization.html +78 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/settings/index.html +132 -0
- local_file_organizer-2.0.0/src/file_organizer/web/templates/setup_wizard.html +636 -0
- local_file_organizer-2.0.0/src/local_file_organizer.egg-info/PKG-INFO +435 -0
- local_file_organizer-2.0.0/src/local_file_organizer.egg-info/SOURCES.txt +482 -0
- local_file_organizer-2.0.0/src/local_file_organizer.egg-info/dependency_links.txt +1 -0
- local_file_organizer-2.0.0/src/local_file_organizer.egg-info/entry_points.txt +4 -0
- local_file_organizer-2.0.0/src/local_file_organizer.egg-info/requires.txt +150 -0
- local_file_organizer-2.0.0/src/local_file_organizer.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Yanhao Qiu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: local-file-organizer
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: AI-powered local file management with state-of-the-art models
|
|
5
|
+
Author-email: Local File Organizer Team <noreply@example.com>
|
|
6
|
+
License: MIT OR Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/curdriceaurora/Local-File-Organizer
|
|
8
|
+
Project-URL: Documentation, https://github.com/curdriceaurora/Local-File-Organizer#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/curdriceaurora/Local-File-Organizer
|
|
10
|
+
Project-URL: Issues, https://github.com/curdriceaurora/Local-File-Organizer/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/curdriceaurora/Local-File-Organizer/releases
|
|
12
|
+
Keywords: file-management,ai,organization,local-llm,privacy
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Desktop Environment :: File Managers
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
24
|
+
Requires-Python: >=3.11
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: ollama>=0.1.0
|
|
28
|
+
Requires-Dist: Pillow~=12.0
|
|
29
|
+
Requires-Dist: snowballstemmer>=2.2
|
|
30
|
+
Requires-Dist: numpy<2.5,>=1.26.4
|
|
31
|
+
Requires-Dist: tqdm~=4.66
|
|
32
|
+
Requires-Dist: defusedxml>=0.7
|
|
33
|
+
Requires-Dist: typer[all]<0.26,>=0.12
|
|
34
|
+
Requires-Dist: rich~=13.0
|
|
35
|
+
Requires-Dist: textual~=0.50
|
|
36
|
+
Requires-Dist: fastapi~=0.109
|
|
37
|
+
Requires-Dist: starlette~=1.3
|
|
38
|
+
Requires-Dist: aiofiles~=23.0
|
|
39
|
+
Requires-Dist: jinja2~=3.1
|
|
40
|
+
Requires-Dist: markupsafe~=3.0
|
|
41
|
+
Requires-Dist: uvicorn[standard]~=0.27
|
|
42
|
+
Requires-Dist: websockets<17,>=12.0
|
|
43
|
+
Requires-Dist: httpx~=0.26
|
|
44
|
+
Requires-Dist: python-multipart>=0.0.9
|
|
45
|
+
Requires-Dist: Pygments>=2.20.0
|
|
46
|
+
Requires-Dist: pyjwt~=2.8
|
|
47
|
+
Requires-Dist: bcrypt<6.0.0,>=4.0.0
|
|
48
|
+
Requires-Dist: sqlalchemy~=2.0
|
|
49
|
+
Requires-Dist: alembic~=1.13
|
|
50
|
+
Requires-Dist: redis~=8.0
|
|
51
|
+
Requires-Dist: pyyaml~=6.0
|
|
52
|
+
Requires-Dist: platformdirs~=4.10
|
|
53
|
+
Requires-Dist: pydantic~=2.5
|
|
54
|
+
Requires-Dist: pydantic-settings~=2.1
|
|
55
|
+
Requires-Dist: email-validator~=2.1
|
|
56
|
+
Requires-Dist: python-dotenv~=1.0
|
|
57
|
+
Requires-Dist: click~=8.1
|
|
58
|
+
Requires-Dist: watchdog<7,>=3.0
|
|
59
|
+
Requires-Dist: psutil<8,>=5.9
|
|
60
|
+
Requires-Dist: loguru>=0.7.0
|
|
61
|
+
Provides-Extra: parsers
|
|
62
|
+
Requires-Dist: PyMuPDF~=1.23; extra == "parsers"
|
|
63
|
+
Requires-Dist: python-docx~=1.0; extra == "parsers"
|
|
64
|
+
Requires-Dist: openpyxl~=3.1; extra == "parsers"
|
|
65
|
+
Requires-Dist: python-pptx>=0.6.0; extra == "parsers"
|
|
66
|
+
Requires-Dist: ebooklib<1,>=0.20; extra == "parsers"
|
|
67
|
+
Requires-Dist: beautifulsoup4~=4.12; extra == "parsers"
|
|
68
|
+
Requires-Dist: lxml~=6.1; extra == "parsers"
|
|
69
|
+
Provides-Extra: web
|
|
70
|
+
Requires-Dist: fastapi~=0.109; extra == "web"
|
|
71
|
+
Requires-Dist: jinja2~=3.1; extra == "web"
|
|
72
|
+
Requires-Dist: uvicorn[standard]~=0.27; extra == "web"
|
|
73
|
+
Requires-Dist: websockets<17,>=12.0; extra == "web"
|
|
74
|
+
Requires-Dist: httpx~=0.26; extra == "web"
|
|
75
|
+
Requires-Dist: python-multipart>=0.0.9; extra == "web"
|
|
76
|
+
Requires-Dist: Pygments>=2.20.0; extra == "web"
|
|
77
|
+
Requires-Dist: pyjwt~=2.8; extra == "web"
|
|
78
|
+
Requires-Dist: bcrypt<6.0.0,>=4.0.0; extra == "web"
|
|
79
|
+
Requires-Dist: redis~=8.0; extra == "web"
|
|
80
|
+
Provides-Extra: dev
|
|
81
|
+
Requires-Dist: pytest~=9.0.3; extra == "dev"
|
|
82
|
+
Requires-Dist: pytest-asyncio~=1.4; extra == "dev"
|
|
83
|
+
Requires-Dist: pytest-cov<8,>=4.1; extra == "dev"
|
|
84
|
+
Requires-Dist: pytest-mock~=3.12; extra == "dev"
|
|
85
|
+
Requires-Dist: pytest-timeout<2.5.0,>=2.2.0; extra == "dev"
|
|
86
|
+
Requires-Dist: pytest-xdist~=3.5; extra == "dev"
|
|
87
|
+
Requires-Dist: pytest-randomly~=3.15; extra == "dev"
|
|
88
|
+
Requires-Dist: mypy<1.20,>=1.8; extra == "dev"
|
|
89
|
+
Requires-Dist: types-PyYAML~=6.0; extra == "dev"
|
|
90
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
91
|
+
Requires-Dist: black<27.0,>=23.12; extra == "dev"
|
|
92
|
+
Requires-Dist: isort~=5.13; extra == "dev"
|
|
93
|
+
Requires-Dist: pre-commit~=3.6; extra == "dev"
|
|
94
|
+
Requires-Dist: codespell~=2.2; extra == "dev"
|
|
95
|
+
Requires-Dist: faker~=40.12; extra == "dev"
|
|
96
|
+
Requires-Dist: pytest-benchmark<6,>=4.0; extra == "dev"
|
|
97
|
+
Requires-Dist: interrogate~=1.5; extra == "dev"
|
|
98
|
+
Requires-Dist: pymarkdownlnt>=0.9.25; extra == "dev"
|
|
99
|
+
Requires-Dist: deptry>=0.16.0; extra == "dev"
|
|
100
|
+
Requires-Dist: diff-cover~=7.0; extra == "dev"
|
|
101
|
+
Requires-Dist: asgi-lifespan~=2.1; extra == "dev"
|
|
102
|
+
Requires-Dist: pytest-playwright>=0.5.0; extra == "dev"
|
|
103
|
+
Requires-Dist: axe-playwright-python>=0.1.7; extra == "dev"
|
|
104
|
+
Provides-Extra: cloud
|
|
105
|
+
Requires-Dist: openai~=2.44; extra == "cloud"
|
|
106
|
+
Provides-Extra: llama
|
|
107
|
+
Requires-Dist: llama-cpp-python>=0.2.0; extra == "llama"
|
|
108
|
+
Provides-Extra: mlx
|
|
109
|
+
Requires-Dist: mlx-lm>=0.0.19; platform_system == "Darwin" and extra == "mlx"
|
|
110
|
+
Provides-Extra: claude
|
|
111
|
+
Requires-Dist: anthropic>=0.20.0; extra == "claude"
|
|
112
|
+
Provides-Extra: gui
|
|
113
|
+
Requires-Dist: PyQt6~=6.6; extra == "gui"
|
|
114
|
+
Provides-Extra: desktop
|
|
115
|
+
Requires-Dist: pywebview>=4.4; extra == "desktop"
|
|
116
|
+
Requires-Dist: uvicorn[standard]~=0.27; extra == "desktop"
|
|
117
|
+
Provides-Extra: audio
|
|
118
|
+
Requires-Dist: faster-whisper~=1.0; extra == "audio"
|
|
119
|
+
Requires-Dist: torch~=2.1; extra == "audio"
|
|
120
|
+
Requires-Dist: mutagen~=1.47; extra == "audio"
|
|
121
|
+
Requires-Dist: tinytag<3.0,>=1.10; extra == "audio"
|
|
122
|
+
Requires-Dist: pydub>=0.25.0; extra == "audio"
|
|
123
|
+
Requires-Dist: audioop-lts; python_version >= "3.13" and extra == "audio"
|
|
124
|
+
Provides-Extra: video
|
|
125
|
+
Requires-Dist: opencv-python~=4.8; extra == "video"
|
|
126
|
+
Requires-Dist: scenedetect[opencv]>=0.6.0; extra == "video"
|
|
127
|
+
Provides-Extra: dedup
|
|
128
|
+
Requires-Dist: imagededup>=0.3.0; extra == "dedup"
|
|
129
|
+
Requires-Dist: scikit-learn~=1.4; extra == "dedup"
|
|
130
|
+
Requires-Dist: pypdf<7,>=4; extra == "dedup"
|
|
131
|
+
Requires-Dist: striprtf>=0.0.26; extra == "dedup"
|
|
132
|
+
Provides-Extra: archive
|
|
133
|
+
Requires-Dist: py7zr>=0.20.0; extra == "archive"
|
|
134
|
+
Requires-Dist: rarfile~=4.1; extra == "archive"
|
|
135
|
+
Provides-Extra: scientific
|
|
136
|
+
Requires-Dist: h5py~=3.10; extra == "scientific"
|
|
137
|
+
Requires-Dist: netCDF4~=1.6; extra == "scientific"
|
|
138
|
+
Requires-Dist: scipy~=1.11; extra == "scientific"
|
|
139
|
+
Provides-Extra: cad
|
|
140
|
+
Requires-Dist: ezdxf~=1.1; extra == "cad"
|
|
141
|
+
Provides-Extra: build
|
|
142
|
+
Requires-Dist: pyinstaller~=6.0; extra == "build"
|
|
143
|
+
Provides-Extra: docs
|
|
144
|
+
Requires-Dist: mkdocs~=1.5; extra == "docs"
|
|
145
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "docs"
|
|
146
|
+
Requires-Dist: pymdown-extensions~=11.0; extra == "docs"
|
|
147
|
+
Requires-Dist: mkdocs-minify-plugin>=0.8.0; extra == "docs"
|
|
148
|
+
Requires-Dist: mkdocstrings[python]>=0.24.0; extra == "docs"
|
|
149
|
+
Provides-Extra: search
|
|
150
|
+
Requires-Dist: rank-bm25>=0.2.0; extra == "search"
|
|
151
|
+
Requires-Dist: scikit-learn~=1.4; extra == "search"
|
|
152
|
+
Provides-Extra: all
|
|
153
|
+
Requires-Dist: local-file-organizer[archive,audio,build,cad,claude,cloud,dedup,dev,gui,llama,mlx,parsers,scientific,search,video,web]; extra == "all"
|
|
154
|
+
Dynamic: license-file
|
|
155
|
+
|
|
156
|
+
# File Organizer v2.0
|
|
157
|
+
|
|
158
|
+
[](https://github.com/curdriceaurora/Local-File-Organizer/actions/workflows/ci.yml)
|
|
159
|
+
[](docs/USER_GUIDE.md)
|
|
160
|
+
[](https://www.python.org/)
|
|
161
|
+
[](LICENSE)
|
|
162
|
+
[](CHANGELOG.md)
|
|
163
|
+
|
|
164
|
+
> AI-powered local file management. Local-first by default (Ollama, no cloud required) --
|
|
165
|
+
> or connect any OpenAI-compatible endpoint or Anthropic Claude when you need it.
|
|
166
|
+
|
|
167
|
+
**840 tests** | **408 modules** | **39 file types**
|
|
168
|
+
|
|
169
|
+

|
|
170
|
+
|
|
171
|
+
## Contents
|
|
172
|
+
|
|
173
|
+
- [Features](#features)
|
|
174
|
+
- [How It Works](#how-it-works)
|
|
175
|
+
- [Quick Start](#quick-start)
|
|
176
|
+
- [Web UI](#web-ui)
|
|
177
|
+
- [Documentation](#documentation)
|
|
178
|
+
- [Optional Feature Packs](#optional-feature-packs)
|
|
179
|
+
- [Project Structure](#project-structure)
|
|
180
|
+
- [Development](#development)
|
|
181
|
+
- [Contributing](#contributing)
|
|
182
|
+
- [Configuration](#configuration)
|
|
183
|
+
- [License](#license)
|
|
184
|
+
|
|
185
|
+
## Features
|
|
186
|
+
|
|
187
|
+
### AI and Analysis
|
|
188
|
+
|
|
189
|
+
- **AI-Powered Organization**: Qwen 2.5 3B (text) + Qwen 2.5-VL 7B (vision) via Ollama — or any OpenAI-compatible endpoint (OpenAI, LM Studio, vLLM) — or Anthropic Claude
|
|
190
|
+
- **Audio Transcription**: Local speech-to-text with faster-whisper (GPU-accelerated)
|
|
191
|
+
- **Video Analysis**: Scene detection and keyframe extraction
|
|
192
|
+
- **Intelligence**: Pattern learning, preference tracking, smart suggestions, auto-tagging
|
|
193
|
+
|
|
194
|
+
### Interfaces
|
|
195
|
+
|
|
196
|
+
- **Terminal UI**: 8-view Textual TUI (Files, Analytics, Audio, History, Copilot, and more)
|
|
197
|
+
- **Web UI**: Browser-based interface via FastAPI and HTMX
|
|
198
|
+
- **Desktop App**: Native OS window via pywebview — single Python process, no Electron, no Rust
|
|
199
|
+
- **Full CLI**: Organize, rules, suggest, dedupe, daemon, analytics, update, api-keys
|
|
200
|
+
- **Copilot Chat**: Natural-language assistant -- "organize ./Downloads", "find report.pdf", "undo"
|
|
201
|
+
|
|
202
|
+
### Organization
|
|
203
|
+
|
|
204
|
+
- **Organization Rules**: Automated sorting with conditions, preview, and YAML persistence
|
|
205
|
+
- **PARA + Johnny Decimal**: Built-in organizational methodologies
|
|
206
|
+
- **Deduplication**: Hash and semantic duplicate detection
|
|
207
|
+
- **Undo/Redo**: Full operation history
|
|
208
|
+
- **Auto-Update**: Linux AppImage self-updates from GitHub Releases (verified downloads + rollback); macOS/Windows update via `pip`/`pipx`
|
|
209
|
+
- **Cross-Platform**: Runs on macOS, Windows, and Linux (verified in CI). Linux ships a standalone AppImage plus executables; install on macOS/Windows via `pip`/`pipx`
|
|
210
|
+
|
|
211
|
+
## How It Works
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
Source Directory AI Analysis Organized Output
|
|
215
|
+
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
|
216
|
+
│ ./Downloads │ │ Content │ │ ./Organized │
|
|
217
|
+
│ │ │ Extraction │ │ │
|
|
218
|
+
│ report.pdf │────>│ (text, vision, │────>│ Work/ │
|
|
219
|
+
│ photo.jpg │ │ audio, video) │ │ Reports/ │
|
|
220
|
+
│ meeting.mp3 │ │ │ │ Photos/ │
|
|
221
|
+
│ clip.mp4 │ │ AI Categorize │ │ Vacation/ │
|
|
222
|
+
│ notes.txt │ │ (Ollama/OpenAI/ │ │ Audio/ │
|
|
223
|
+
│ │ │ Claude) │ │ Meetings/ │
|
|
224
|
+
└──────────────┘ └──────────────────┘ └──────────────────┘
|
|
225
|
+
│
|
|
226
|
+
┌────────┴────────┐
|
|
227
|
+
│ Learn & Adapt │
|
|
228
|
+
│ (patterns, │
|
|
229
|
+
│ preferences, │
|
|
230
|
+
│ rules) │
|
|
231
|
+
└─────────────────┘
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
1. **Scan** — Reads files from a source directory, extracting text, metadata, and visual content per file type (80+ formats supported)
|
|
235
|
+
2. **Analyze** — Sends extracted content to an AI model (Ollama, OpenAI, or Claude) for categorization and naming
|
|
236
|
+
3. **Organize** — Moves or copies files into a structured folder hierarchy with AI-generated names
|
|
237
|
+
4. **Learn** — Tracks your patterns and preferences over time for smarter future suggestions
|
|
238
|
+
|
|
239
|
+
## Screenshots
|
|
240
|
+
|
|
241
|
+

|
|
242
|
+
|
|
243
|
+
## Quick Start (Essentials)
|
|
244
|
+
|
|
245
|
+
### With Ollama (local, default)
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
# Install from PyPI — pipx keeps it isolated and on your PATH:
|
|
249
|
+
pipx install local-file-organizer
|
|
250
|
+
# or: pip install local-file-organizer
|
|
251
|
+
|
|
252
|
+
# 1) Configure defaults
|
|
253
|
+
fo setup
|
|
254
|
+
|
|
255
|
+
# 2) Preview a folder before changing anything
|
|
256
|
+
fo preview ~/Downloads
|
|
257
|
+
|
|
258
|
+
# 3) Run organization
|
|
259
|
+
fo organize ~/Downloads ~/Organized
|
|
260
|
+
|
|
261
|
+
# 4) Roll back the most recent organize run if needed
|
|
262
|
+
fo undo
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Prefer a browser?
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
file-organizer serve --reload
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Then visit `http://localhost:8000/ui/`.
|
|
272
|
+
|
|
273
|
+
### Need cloud providers instead of the default local flow?
|
|
274
|
+
|
|
275
|
+
Use the [AI Provider Setup guide](docs/setup/ai-providers.md) for OpenAI-compatible endpoints and Claude.
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# OpenAI-compatible providers
|
|
279
|
+
export FO_PROVIDER=openai
|
|
280
|
+
|
|
281
|
+
# Anthropic Claude
|
|
282
|
+
export FO_PROVIDER=claude
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Web UI
|
|
286
|
+
|
|
287
|
+
Start the FastAPI server and open the UI:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
file-organizer serve --reload
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Then visit `http://localhost:8000/ui/` for the HTMX interface.
|
|
294
|
+
|
|
295
|
+
## Documentation
|
|
296
|
+
|
|
297
|
+
### Essentials
|
|
298
|
+
|
|
299
|
+
- [Documentation Home](docs/index.md)
|
|
300
|
+
- [Getting Started](docs/getting-started.md)
|
|
301
|
+
- [CLI Reference](docs/cli-reference.md#core-first-run-commands)
|
|
302
|
+
- [User Guide Workflow Map](docs/USER_GUIDE.md#workflow-map-quick-paths)
|
|
303
|
+
- [Web UI Quick Start](docs/web-ui/getting-started.md)
|
|
304
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
305
|
+
|
|
306
|
+
### Advanced / Admin / Developer
|
|
307
|
+
|
|
308
|
+
- [Full CLI Reference](docs/cli-reference.md)
|
|
309
|
+
- [Terminal UI Guide](docs/tui.md)
|
|
310
|
+
- [Desktop App Guide](docs/desktop-app.md)
|
|
311
|
+
- [AI Provider Setup](docs/setup/ai-providers.md)
|
|
312
|
+
- [Audio & Video Processing Guide](docs/setup/audio-video.md)
|
|
313
|
+
- [Configuration Guide](docs/CONFIGURATION.md)
|
|
314
|
+
- [API Reference](docs/api/index.md)
|
|
315
|
+
- [File Format Reference](docs/admin/file-format-reference.md)
|
|
316
|
+
- [Path Standardization & Migration](docs/config/path-standardization.md)
|
|
317
|
+
- [Johnny Decimal User Guide](docs/methodologies/johnny-decimal/user-guide.md)
|
|
318
|
+
- [Johnny Decimal Migration Guide](docs/methodologies/johnny-decimal/migration.md)
|
|
319
|
+
|
|
320
|
+
## Optional Feature Packs
|
|
321
|
+
|
|
322
|
+
Canonical extras matrix:
|
|
323
|
+
|
|
324
|
+
- [Dependencies & Optional Extras](docs/setup/dependencies.md#optional-extras-matrix)
|
|
325
|
+
|
|
326
|
+
Common installs:
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
pip install "local-file-organizer[parsers,web]"
|
|
330
|
+
pip install "local-file-organizer[cloud,claude]"
|
|
331
|
+
pip install "local-file-organizer[all]"
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
> **From source (development):** clone the repo and use an editable install
|
|
335
|
+
> instead, e.g. `pip install -e ".[all]"`.
|
|
336
|
+
|
|
337
|
+
### Audio system dependencies
|
|
338
|
+
|
|
339
|
+
For full audio format support, the `[audio]` pack uses **FFmpeg** (all platforms) and optionally **CUDA + cuDNN** (NVIDIA GPU users).
|
|
340
|
+
|
|
341
|
+
**FFmpeg** — required for non-`.wav` formats (MP3, M4A, FLAC, OGG); optional if you only transcribe raw `.wav`:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# macOS
|
|
345
|
+
brew install ffmpeg
|
|
346
|
+
|
|
347
|
+
# Ubuntu / Debian
|
|
348
|
+
sudo apt install ffmpeg
|
|
349
|
+
|
|
350
|
+
# Windows (winget)
|
|
351
|
+
winget install ffmpeg
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**CUDA + cuDNN** — optional, for significantly faster transcription (see [faster-whisper benchmarks](https://github.com/SYSTRAN/faster-whisper) for hardware-specific numbers):
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Install CUDA Toolkit from https://developer.nvidia.com/cuda-downloads
|
|
358
|
+
# Install cuDNN from https://developer.nvidia.com/cudnn
|
|
359
|
+
|
|
360
|
+
# Verify the full transcription backend (not just PyTorch)
|
|
361
|
+
python3 -c "from faster_whisper import WhisperModel; print('faster-whisper OK')"
|
|
362
|
+
python3 -c "import torch; print('CUDA:', torch.cuda.is_available())"
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
**Fallback behavior**: without FFmpeg, only `.wav` files are transcribed; other formats are organized by filename/metadata but not content-analyzed. Without CUDA, transcription runs on CPU (slower but fully functional).
|
|
366
|
+
|
|
367
|
+
See the [Installation Guide](docs/admin/installation.md) for troubleshooting and advanced configuration.
|
|
368
|
+
|
|
369
|
+
## Project Structure
|
|
370
|
+
|
|
371
|
+
<details>
|
|
372
|
+
<summary>Click to expand</summary>
|
|
373
|
+
|
|
374
|
+
```
|
|
375
|
+
src/file_organizer/
|
|
376
|
+
├── api/ # FastAPI web backend
|
|
377
|
+
├── cli/ # CLI commands and entry points
|
|
378
|
+
├── client/ # HTTP client utilities
|
|
379
|
+
├── config/ # Configuration management
|
|
380
|
+
├── core/ # Organization engine and business logic
|
|
381
|
+
├── daemon/ # Background file watcher daemon
|
|
382
|
+
├── deploy/ # Deployment helpers
|
|
383
|
+
├── desktop/ # Native desktop app (pywebview)
|
|
384
|
+
├── events/ # Event system
|
|
385
|
+
├── history/ # Operation history and undo/redo
|
|
386
|
+
├── integrations/ # External service integrations
|
|
387
|
+
├── interfaces/ # Abstract interfaces and protocols
|
|
388
|
+
├── methodologies/ # PARA, Johnny Decimal implementations
|
|
389
|
+
├── models/ # Data models
|
|
390
|
+
├── optimization/ # Performance optimization
|
|
391
|
+
├── parallel/ # Parallel processing
|
|
392
|
+
├── pipeline/ # File processing pipeline
|
|
393
|
+
├── plugins/ # Plugin system (audio, video, archives, etc.)
|
|
394
|
+
├── review_regressions/ # Code quality detectors
|
|
395
|
+
├── services/ # Core services (analytics, dedup, text, etc.)
|
|
396
|
+
├── tui/ # Textual terminal UI (8 views)
|
|
397
|
+
├── undo/ # Undo/redo infrastructure
|
|
398
|
+
├── updater/ # Auto-update from GitHub Releases
|
|
399
|
+
├── utils/ # Shared utilities
|
|
400
|
+
├── watcher/ # File system watcher
|
|
401
|
+
└── web/ # HTMX web UI templates and assets
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
</details>
|
|
405
|
+
|
|
406
|
+
## Development
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# Run tests
|
|
410
|
+
pytest
|
|
411
|
+
|
|
412
|
+
# Lint
|
|
413
|
+
ruff check src/
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Contributing
|
|
417
|
+
|
|
418
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, coding standards, and how to submit changes.
|
|
419
|
+
|
|
420
|
+
## Configuration
|
|
421
|
+
|
|
422
|
+
Configuration is stored in platform-appropriate locations using `platformdirs`:
|
|
423
|
+
- **macOS**: `~/Library/Application Support/file-organizer/`
|
|
424
|
+
- **Linux**: `~/.config/file-organizer/` (or `$XDG_CONFIG_HOME/file-organizer/`)
|
|
425
|
+
- **Windows**: `%APPDATA%/file-organizer/`
|
|
426
|
+
|
|
427
|
+
See [Configuration Guide](docs/CONFIGURATION.md) for details.
|
|
428
|
+
|
|
429
|
+
## License
|
|
430
|
+
|
|
431
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
**Status**: Stable | **Version**: 2.0.0 | **Last Updated**: 2026-07-05
|