synapse-sdk 1.0.0a13__py3-none-any.whl → 2025.11.7__py3-none-any.whl
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.
Potentially problematic release.
This version of synapse-sdk might be problematic. Click here for more details.
- synapse_sdk/__init__.py +24 -0
- synapse_sdk/cli/__init__.py +310 -5
- synapse_sdk/cli/alias/__init__.py +22 -0
- synapse_sdk/cli/alias/create.py +36 -0
- synapse_sdk/cli/alias/dataclass.py +31 -0
- synapse_sdk/cli/alias/default.py +16 -0
- synapse_sdk/cli/alias/delete.py +15 -0
- synapse_sdk/cli/alias/list.py +19 -0
- synapse_sdk/cli/alias/read.py +15 -0
- synapse_sdk/cli/alias/update.py +17 -0
- synapse_sdk/cli/alias/utils.py +61 -0
- synapse_sdk/cli/code_server.py +687 -0
- synapse_sdk/cli/config.py +440 -0
- synapse_sdk/cli/devtools.py +90 -0
- synapse_sdk/cli/plugin/__init__.py +33 -0
- synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
- synapse_sdk/cli/plugin/publish.py +45 -0
- synapse_sdk/{plugins/cli → cli/plugin}/run.py +12 -5
- synapse_sdk/clients/agent/__init__.py +9 -3
- synapse_sdk/clients/agent/container.py +133 -0
- synapse_sdk/clients/agent/core.py +19 -0
- synapse_sdk/clients/agent/ray.py +298 -9
- synapse_sdk/clients/backend/__init__.py +41 -12
- synapse_sdk/clients/backend/annotation.py +13 -5
- synapse_sdk/clients/backend/core.py +59 -0
- synapse_sdk/clients/backend/data_collection.py +186 -0
- synapse_sdk/clients/backend/hitl.py +17 -0
- synapse_sdk/clients/backend/integration.py +19 -4
- synapse_sdk/clients/backend/ml.py +10 -7
- synapse_sdk/clients/backend/models.py +78 -0
- synapse_sdk/clients/base.py +381 -34
- synapse_sdk/clients/ray/serve.py +2 -0
- synapse_sdk/clients/validators/collections.py +31 -0
- synapse_sdk/devtools/config.py +94 -0
- synapse_sdk/devtools/docs/.gitignore +20 -0
- synapse_sdk/devtools/docs/README.md +41 -0
- synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
- synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
- synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
- synapse_sdk/devtools/docs/blog/authors.yml +25 -0
- synapse_sdk/devtools/docs/blog/tags.yml +19 -0
- synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
- synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
- synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
- synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
- synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
- synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
- synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/docs/api/index.md +52 -0
- synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
- synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
- synapse_sdk/devtools/docs/docs/categories.md +0 -0
- synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/docs/configuration.md +83 -0
- synapse_sdk/devtools/docs/docs/contributing.md +306 -0
- synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
- synapse_sdk/devtools/docs/docs/faq.md +179 -0
- synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
- synapse_sdk/devtools/docs/docs/features/index.md +24 -0
- synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
- synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/docs/installation.md +94 -0
- synapse_sdk/devtools/docs/docs/introduction.md +47 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
- synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
- synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
- synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
- synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
- synapse_sdk/devtools/docs/package-lock.json +18784 -0
- synapse_sdk/devtools/docs/package.json +48 -0
- synapse_sdk/devtools/docs/sidebars.ts +122 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
- synapse_sdk/devtools/docs/src/css/custom.css +30 -0
- synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
- synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
- synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
- synapse_sdk/devtools/docs/static/.nojekyll +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
- synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
- synapse_sdk/devtools/docs/static/img/logo.png +0 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
- synapse_sdk/devtools/docs/tsconfig.json +8 -0
- synapse_sdk/devtools/server.py +41 -0
- synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
- synapse_sdk/devtools/streamlit_app/app.py +128 -0
- synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
- synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
- synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
- synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
- synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
- synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
- synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
- synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
- synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
- synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
- synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
- synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
- synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
- synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
- synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
- synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
- synapse_sdk/devtools/streamlit_app.py +10 -0
- synapse_sdk/loggers.py +74 -9
- synapse_sdk/plugins/README.md +1340 -0
- synapse_sdk/plugins/__init__.py +0 -13
- synapse_sdk/plugins/categories/base.py +145 -30
- synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
- synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
- synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
- synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
- synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
- synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
- synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
- synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
- synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
- synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
- synapse_sdk/plugins/categories/export/templates/config.yaml +21 -0
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
- synapse_sdk/plugins/categories/export/templates/plugin/export.py +160 -0
- synapse_sdk/plugins/categories/neural_net/actions/deployment.py +29 -14
- synapse_sdk/plugins/categories/neural_net/actions/inference.py +13 -1
- synapse_sdk/plugins/categories/neural_net/actions/train.py +1084 -38
- synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
- synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
- synapse_sdk/plugins/categories/neural_net/base/inference.py +37 -0
- synapse_sdk/plugins/categories/neural_net/templates/config.yaml +30 -5
- synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
- synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
- synapse_sdk/plugins/categories/{export/actions/export.py → pre_annotation/actions/pre_annotation/action.py} +4 -4
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
- synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +5 -2
- synapse_sdk/plugins/categories/upload/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
- synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
- synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
- synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
- synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
- synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
- synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
- synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
- synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
- synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
- synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
- synapse_sdk/plugins/categories/upload/templates/config.yaml +33 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +102 -0
- synapse_sdk/plugins/enums.py +3 -1
- synapse_sdk/plugins/models.py +140 -16
- synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
- synapse_sdk/plugins/templates/schema.json +491 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
- synapse_sdk/plugins/utils/__init__.py +46 -0
- synapse_sdk/plugins/utils/actions.py +119 -0
- synapse_sdk/plugins/utils/config.py +203 -0
- synapse_sdk/plugins/utils/legacy.py +95 -0
- synapse_sdk/plugins/utils/ray_gcs.py +66 -0
- synapse_sdk/plugins/utils/registry.py +58 -0
- synapse_sdk/shared/__init__.py +25 -0
- synapse_sdk/shared/enums.py +93 -0
- synapse_sdk/types.py +19 -0
- synapse_sdk/utils/converters/__init__.py +240 -0
- synapse_sdk/utils/converters/coco/__init__.py +0 -0
- synapse_sdk/utils/converters/coco/from_dm.py +322 -0
- synapse_sdk/utils/converters/coco/to_dm.py +215 -0
- synapse_sdk/utils/converters/dm/__init__.py +56 -0
- synapse_sdk/utils/converters/dm/from_v1.py +627 -0
- synapse_sdk/utils/converters/dm/to_v1.py +367 -0
- synapse_sdk/utils/converters/pascal/__init__.py +0 -0
- synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
- synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
- synapse_sdk/utils/converters/yolo/__init__.py +0 -0
- synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
- synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
- synapse_sdk/utils/dataset.py +46 -0
- synapse_sdk/utils/encryption.py +158 -0
- synapse_sdk/utils/file/__init__.py +39 -0
- synapse_sdk/utils/file/archive.py +32 -0
- synapse_sdk/utils/file/checksum.py +56 -0
- synapse_sdk/utils/file/chunking.py +31 -0
- synapse_sdk/utils/file/download.py +385 -0
- synapse_sdk/utils/file/encoding.py +40 -0
- synapse_sdk/utils/file/io.py +22 -0
- synapse_sdk/utils/file/video/__init__.py +29 -0
- synapse_sdk/utils/file/video/transcode.py +307 -0
- synapse_sdk/utils/file.py.backup +301 -0
- synapse_sdk/utils/http.py +138 -0
- synapse_sdk/utils/network.py +309 -0
- synapse_sdk/utils/storage/__init__.py +72 -0
- synapse_sdk/utils/storage/providers/__init__.py +183 -0
- synapse_sdk/utils/storage/providers/file_system.py +134 -0
- synapse_sdk/utils/storage/providers/gcp.py +13 -0
- synapse_sdk/utils/storage/providers/http.py +190 -0
- synapse_sdk/utils/storage/providers/s3.py +91 -0
- synapse_sdk/utils/storage/providers/sftp.py +47 -0
- synapse_sdk/utils/storage/registry.py +17 -0
- synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
- synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
- synapse_sdk/clients/backend/dataset.py +0 -51
- synapse_sdk/plugins/categories/import/actions/import.py +0 -10
- synapse_sdk/plugins/cli/__init__.py +0 -21
- synapse_sdk/plugins/cli/publish.py +0 -37
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
- synapse_sdk/plugins/utils.py +0 -50
- synapse_sdk/utils/file.py +0 -87
- synapse_sdk/utils/storage.py +0 -91
- synapse_sdk-1.0.0a13.dist-info/METADATA +0 -43
- synapse_sdk-1.0.0a13.dist-info/RECORD +0 -111
- /synapse_sdk/{plugins/categories/import → clients/validators}/__init__.py +0 -0
- /synapse_sdk/{plugins/categories/import/actions → devtools}/__init__.py +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info/licenses}/LICENSE +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: file
|
|
3
|
+
title: File Utilities
|
|
4
|
+
sidebar_position: 1
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# File Utilities
|
|
8
|
+
|
|
9
|
+
Comprehensive file operations and handling utilities organized in a modular structure for better maintainability and functionality.
|
|
10
|
+
|
|
11
|
+
## Module Overview
|
|
12
|
+
|
|
13
|
+
The file utilities have been refactored into a modular structure with specialized modules for different operations:
|
|
14
|
+
|
|
15
|
+
- **`synapse_sdk.utils.file.archive`** - ZIP archive creation and extraction
|
|
16
|
+
- **`synapse_sdk.utils.file.checksum`** - File hash calculations and verification
|
|
17
|
+
- **`synapse_sdk.utils.file.chunking`** - Memory-efficient file reading in chunks
|
|
18
|
+
- **`synapse_sdk.utils.file.download`** - File downloading utilities with async support
|
|
19
|
+
- **`synapse_sdk.utils.file.encoding`** - Base64 encoding and file format handling
|
|
20
|
+
- **`synapse_sdk.utils.file.io`** - General I/O operations for JSON/YAML files
|
|
21
|
+
- **`synapse_sdk.utils.file.video`** - Video transcoding and format conversion
|
|
22
|
+
|
|
23
|
+
### Backward Compatibility
|
|
24
|
+
|
|
25
|
+
All functions remain accessible from the main module import:
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
# Both approaches work identically
|
|
29
|
+
from synapse_sdk.utils.file import read_file_in_chunks, download_file
|
|
30
|
+
from synapse_sdk.utils.file.chunking import read_file_in_chunks
|
|
31
|
+
from synapse_sdk.utils.file.download import download_file
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Archive Operations
|
|
35
|
+
|
|
36
|
+
Functions for creating and extracting ZIP archives.
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from synapse_sdk.utils.file.archive import archive, unarchive
|
|
40
|
+
|
|
41
|
+
# Create archive
|
|
42
|
+
archive('/path/to/directory', '/path/to/output.zip')
|
|
43
|
+
|
|
44
|
+
# Extract archive
|
|
45
|
+
unarchive('/path/to/archive.zip', '/path/to/extract/directory')
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Chunked File Operations
|
|
49
|
+
|
|
50
|
+
### read_file_in_chunks
|
|
51
|
+
|
|
52
|
+
Read files in chunks for efficient memory usage, particularly useful for large files or when processing files in chunks for uploading or hashing.
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from synapse_sdk.utils.file.chunking import read_file_in_chunks
|
|
56
|
+
|
|
57
|
+
# Read a file in default 50MB chunks
|
|
58
|
+
for chunk in read_file_in_chunks('/path/to/large_file.bin'):
|
|
59
|
+
process_chunk(chunk)
|
|
60
|
+
|
|
61
|
+
# Read with custom chunk size (10MB)
|
|
62
|
+
for chunk in read_file_in_chunks('/path/to/file.bin', chunk_size=1024*1024*10):
|
|
63
|
+
upload_chunk(chunk)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Parameters:**
|
|
67
|
+
|
|
68
|
+
- `file_path` (str | Path): Path to the file to read
|
|
69
|
+
- `chunk_size` (int, optional): Size of each chunk in bytes. Defaults to 50MB (52,428,800 bytes)
|
|
70
|
+
|
|
71
|
+
**Returns:**
|
|
72
|
+
|
|
73
|
+
- Generator yielding file content chunks as bytes
|
|
74
|
+
|
|
75
|
+
**Raises:**
|
|
76
|
+
|
|
77
|
+
- `FileNotFoundError`: If the file doesn't exist
|
|
78
|
+
- `PermissionError`: If the file can't be read due to permissions
|
|
79
|
+
- `OSError`: If there's an OS-level error reading the file
|
|
80
|
+
|
|
81
|
+
### Use Cases
|
|
82
|
+
|
|
83
|
+
**Large File Processing**: Efficiently process files that are too large to fit in memory:
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
import hashlib
|
|
87
|
+
|
|
88
|
+
def calculate_hash_for_large_file(file_path):
|
|
89
|
+
hash_md5 = hashlib.md5()
|
|
90
|
+
for chunk in read_file_in_chunks(file_path):
|
|
91
|
+
hash_md5.update(chunk)
|
|
92
|
+
return hash_md5.hexdigest()
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Chunked Upload Integration**: The function integrates seamlessly with the `CoreClientMixin.create_chunked_upload` method:
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from synapse_sdk.clients.backend.core import CoreClientMixin
|
|
99
|
+
|
|
100
|
+
client = CoreClientMixin(base_url='https://api.example.com')
|
|
101
|
+
result = client.create_chunked_upload('/path/to/large_file.zip')
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Best Practices:**
|
|
105
|
+
|
|
106
|
+
- Use default chunk size (50MB) for optimal upload performance
|
|
107
|
+
- Adjust chunk size based on available memory and network conditions
|
|
108
|
+
- For very large files (>1GB), consider using smaller chunks for better progress tracking
|
|
109
|
+
- Always handle exceptions when working with file operations
|
|
110
|
+
|
|
111
|
+
## Checksum Functions
|
|
112
|
+
|
|
113
|
+
### calculate_checksum
|
|
114
|
+
|
|
115
|
+
Calculate checksum for regular files:
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
from synapse_sdk.utils.file.checksum import calculate_checksum
|
|
119
|
+
|
|
120
|
+
checksum = calculate_checksum('/path/to/file.bin')
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### get_checksum_from_file
|
|
124
|
+
|
|
125
|
+
Calculate checksum for file-like objects without requiring Django dependencies. This function works with any file-like object that has a `read()` method, making it compatible with Django's File objects, BytesIO, StringIO, and regular file objects.
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
import hashlib
|
|
129
|
+
from io import BytesIO
|
|
130
|
+
from synapse_sdk.utils.file.checksum import get_checksum_from_file
|
|
131
|
+
|
|
132
|
+
# Basic usage with BytesIO (defaults to SHA1)
|
|
133
|
+
data = BytesIO(b'Hello, world!')
|
|
134
|
+
checksum = get_checksum_from_file(data)
|
|
135
|
+
print(checksum) # SHA1 hash as hexadecimal string
|
|
136
|
+
|
|
137
|
+
# Using different hash algorithms
|
|
138
|
+
checksum_md5 = get_checksum_from_file(data, digest_mod=hashlib.md5)
|
|
139
|
+
checksum_sha256 = get_checksum_from_file(data, digest_mod=hashlib.sha256)
|
|
140
|
+
|
|
141
|
+
# With real file objects
|
|
142
|
+
with open('/path/to/file.txt', 'rb') as f:
|
|
143
|
+
checksum = get_checksum_from_file(f)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Parameters:**
|
|
147
|
+
|
|
148
|
+
- `file` (IO[Any]): File-like object with read() method that supports reading in chunks
|
|
149
|
+
- `digest_mod` (Callable[[], Any], optional): Hash algorithm from hashlib. Defaults to `hashlib.sha1`
|
|
150
|
+
|
|
151
|
+
**Returns:**
|
|
152
|
+
|
|
153
|
+
- `str`: Hexadecimal digest of the file contents
|
|
154
|
+
|
|
155
|
+
**Key Features:**
|
|
156
|
+
|
|
157
|
+
- **Memory Efficient**: Reads files in 4KB chunks to handle large files
|
|
158
|
+
- **Automatic File Pointer Reset**: Resets to beginning if the file object supports seeking
|
|
159
|
+
- **Text/Binary Agnostic**: Handles both text (StringIO) and binary (BytesIO) file objects
|
|
160
|
+
- **No Django Dependency**: Works without Django while being compatible with Django File objects
|
|
161
|
+
- **Flexible Hash Algorithms**: Supports any hashlib algorithm (SHA1, SHA256, MD5, etc.)
|
|
162
|
+
|
|
163
|
+
## Download Functions
|
|
164
|
+
|
|
165
|
+
Utilities for downloading files from URLs with both synchronous and asynchronous support.
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
from synapse_sdk.utils.file.download import download_file, adownload_file
|
|
169
|
+
|
|
170
|
+
# Synchronous download
|
|
171
|
+
local_path = download_file(url, destination)
|
|
172
|
+
|
|
173
|
+
# Asynchronous download
|
|
174
|
+
import asyncio
|
|
175
|
+
local_path = await adownload_file(url, destination)
|
|
176
|
+
|
|
177
|
+
# URL to path conversion for multiple files
|
|
178
|
+
from synapse_sdk.utils.file.download import files_url_to_path
|
|
179
|
+
paths = files_url_to_path(url_list, destination_directory)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Encoding Functions
|
|
183
|
+
|
|
184
|
+
Base64 encoding utilities for files.
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
from synapse_sdk.utils.file.encoding import convert_file_to_base64
|
|
188
|
+
|
|
189
|
+
# Convert file to base64
|
|
190
|
+
base64_data = convert_file_to_base64('/path/to/file.jpg')
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## I/O Functions
|
|
194
|
+
|
|
195
|
+
General I/O operations for structured data files.
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
from synapse_sdk.utils.file.io import get_dict_from_file, get_temp_path
|
|
199
|
+
|
|
200
|
+
# Load dictionary from JSON or YAML file
|
|
201
|
+
config = get_dict_from_file('/path/to/config.json')
|
|
202
|
+
settings = get_dict_from_file('/path/to/settings.yaml')
|
|
203
|
+
|
|
204
|
+
# Get temporary file path
|
|
205
|
+
temp_path = get_temp_path()
|
|
206
|
+
temp_subpath = get_temp_path('subdir/file.tmp')
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Video Transcoding
|
|
210
|
+
|
|
211
|
+
Advanced video transcoding capabilities using FFmpeg for format conversion, compression, and optimization.
|
|
212
|
+
|
|
213
|
+
### Requirements
|
|
214
|
+
|
|
215
|
+
- **ffmpeg-python**: `pip install ffmpeg-python`
|
|
216
|
+
- **FFmpeg**: Must be installed on the system and available in PATH
|
|
217
|
+
|
|
218
|
+
### Supported Video Formats
|
|
219
|
+
|
|
220
|
+
The video module supports a wide range of input formats:
|
|
221
|
+
- **MP4** (.mp4, .m4v)
|
|
222
|
+
- **AVI** (.avi)
|
|
223
|
+
- **MOV** (.mov)
|
|
224
|
+
- **MKV** (.mkv)
|
|
225
|
+
- **WebM** (.webm)
|
|
226
|
+
- **FLV** (.flv)
|
|
227
|
+
- **WMV** (.wmv)
|
|
228
|
+
- **MPEG** (.mpeg, .mpg)
|
|
229
|
+
- **3GP** (.3gp)
|
|
230
|
+
- **OGV** (.ogv)
|
|
231
|
+
|
|
232
|
+
### Core Functions
|
|
233
|
+
|
|
234
|
+
#### validate_video_format
|
|
235
|
+
|
|
236
|
+
Check if a file has a supported video format:
|
|
237
|
+
|
|
238
|
+
```python
|
|
239
|
+
from synapse_sdk.utils.file.video.transcode import validate_video_format
|
|
240
|
+
|
|
241
|
+
if validate_video_format('video.mp4'):
|
|
242
|
+
print("Supported format")
|
|
243
|
+
else:
|
|
244
|
+
print("Unsupported format")
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
#### get_video_info
|
|
248
|
+
|
|
249
|
+
Extract metadata from video files:
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
from synapse_sdk.utils.file.video.transcode import get_video_info
|
|
253
|
+
|
|
254
|
+
info = get_video_info('input.mp4')
|
|
255
|
+
print(f"Duration: {info['duration']} seconds")
|
|
256
|
+
print(f"Resolution: {info['width']}x{info['height']}")
|
|
257
|
+
print(f"Video Codec: {info['video_codec']}")
|
|
258
|
+
print(f"Audio Codec: {info['audio_codec']}")
|
|
259
|
+
print(f"FPS: {info['fps']}")
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
#### transcode_video
|
|
263
|
+
|
|
264
|
+
Main transcoding function with extensive configuration options:
|
|
265
|
+
|
|
266
|
+
```python
|
|
267
|
+
from synapse_sdk.utils.file.video.transcode import transcode_video, TranscodeConfig
|
|
268
|
+
from pathlib import Path
|
|
269
|
+
|
|
270
|
+
# Basic transcoding with default settings
|
|
271
|
+
output_path = transcode_video('input.avi', 'output.mp4')
|
|
272
|
+
|
|
273
|
+
# Custom configuration
|
|
274
|
+
config = TranscodeConfig(
|
|
275
|
+
vcodec='libx264', # Video codec
|
|
276
|
+
preset='fast', # Encoding speed vs quality
|
|
277
|
+
crf=20, # Quality (lower = better quality)
|
|
278
|
+
acodec='aac', # Audio codec
|
|
279
|
+
audio_bitrate='128k', # Audio bitrate
|
|
280
|
+
resolution='1920x1080', # Output resolution
|
|
281
|
+
fps=30, # Frame rate
|
|
282
|
+
start_time=10.0, # Start from 10 seconds
|
|
283
|
+
duration=60.0 # Only process 60 seconds
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
output_path = transcode_video('input.mkv', 'output.mp4', config)
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### TranscodeConfig Options
|
|
290
|
+
|
|
291
|
+
```python
|
|
292
|
+
@dataclass
|
|
293
|
+
class TranscodeConfig:
|
|
294
|
+
vcodec: str = 'libx264' # Video codec (libx264, libx265, etc.)
|
|
295
|
+
preset: str = 'medium' # Encoding preset (fast, medium, slow)
|
|
296
|
+
crf: int = 28 # Quality factor (0-51, lower = better)
|
|
297
|
+
acodec: str = 'aac' # Audio codec (aac, opus, etc.)
|
|
298
|
+
audio_bitrate: str = '128k' # Audio bitrate
|
|
299
|
+
movflags: str = '+faststart' # MP4 optimization flags
|
|
300
|
+
resolution: Optional[str] = None # Output resolution (e.g., '1920x1080')
|
|
301
|
+
fps: Optional[int] = None # Output frame rate
|
|
302
|
+
start_time: Optional[float] = None # Start time in seconds
|
|
303
|
+
duration: Optional[float] = None # Duration to process in seconds
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### Progress Callback Support
|
|
307
|
+
|
|
308
|
+
Monitor transcoding progress with callback functions:
|
|
309
|
+
|
|
310
|
+
```python
|
|
311
|
+
def progress_callback(progress_percent):
|
|
312
|
+
print(f"Progress: {progress_percent:.1f}%")
|
|
313
|
+
|
|
314
|
+
output_path = transcode_video(
|
|
315
|
+
'input.mp4',
|
|
316
|
+
'output.mp4',
|
|
317
|
+
progress_callback=progress_callback
|
|
318
|
+
)
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
#### optimize_for_web
|
|
322
|
+
|
|
323
|
+
Quick web optimization with predefined settings:
|
|
324
|
+
|
|
325
|
+
```python
|
|
326
|
+
from synapse_sdk.utils.file.video.transcode import optimize_for_web
|
|
327
|
+
|
|
328
|
+
# Optimized for web streaming with fast start
|
|
329
|
+
web_video = optimize_for_web('input.mov', 'web_output.mp4')
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
This function uses optimized settings:
|
|
333
|
+
- Fast encoding preset
|
|
334
|
+
- Web-friendly compression (CRF 23)
|
|
335
|
+
- Fast start flag for streaming
|
|
336
|
+
- Fragment keyframes for better web compatibility
|
|
337
|
+
|
|
338
|
+
### Error Handling
|
|
339
|
+
|
|
340
|
+
The video module provides specific exceptions:
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
from synapse_sdk.utils.file.video.transcode import (
|
|
344
|
+
VideoTranscodeError,
|
|
345
|
+
UnsupportedFormatError,
|
|
346
|
+
FFmpegNotFoundError,
|
|
347
|
+
TranscodingFailedError
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
try:
|
|
351
|
+
transcode_video('input.xyz', 'output.mp4')
|
|
352
|
+
except UnsupportedFormatError:
|
|
353
|
+
print("Input format not supported")
|
|
354
|
+
except FFmpegNotFoundError:
|
|
355
|
+
print("FFmpeg not installed")
|
|
356
|
+
except TranscodingFailedError as e:
|
|
357
|
+
print(f"Transcoding failed: {e}")
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Advanced Usage Examples
|
|
361
|
+
|
|
362
|
+
**Batch Processing**:
|
|
363
|
+
|
|
364
|
+
```python
|
|
365
|
+
import os
|
|
366
|
+
from pathlib import Path
|
|
367
|
+
|
|
368
|
+
input_dir = Path('/path/to/videos')
|
|
369
|
+
output_dir = Path('/path/to/output')
|
|
370
|
+
|
|
371
|
+
for video_file in input_dir.glob('*'):
|
|
372
|
+
if validate_video_format(video_file):
|
|
373
|
+
output_file = output_dir / f"{video_file.stem}.mp4"
|
|
374
|
+
try:
|
|
375
|
+
transcode_video(video_file, output_file)
|
|
376
|
+
print(f"Processed: {video_file.name}")
|
|
377
|
+
except VideoTranscodeError as e:
|
|
378
|
+
print(f"Failed to process {video_file.name}: {e}")
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Quality Optimization**:
|
|
382
|
+
|
|
383
|
+
```python
|
|
384
|
+
# High quality for archival
|
|
385
|
+
archive_config = TranscodeConfig(
|
|
386
|
+
preset='slow',
|
|
387
|
+
crf=18,
|
|
388
|
+
audio_bitrate='256k'
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
# Small size for mobile
|
|
392
|
+
mobile_config = TranscodeConfig(
|
|
393
|
+
preset='fast',
|
|
394
|
+
crf=28,
|
|
395
|
+
resolution='1280x720',
|
|
396
|
+
audio_bitrate='96k'
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
# Apply different configs
|
|
400
|
+
archive_output = transcode_video(input_file, 'archive.mp4', archive_config)
|
|
401
|
+
mobile_output = transcode_video(input_file, 'mobile.mp4', mobile_config)
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Video Clipping**:
|
|
405
|
+
|
|
406
|
+
```python
|
|
407
|
+
# Extract 30-second clip starting from 1 minute
|
|
408
|
+
clip_config = TranscodeConfig(
|
|
409
|
+
start_time=60.0, # Start at 1 minute
|
|
410
|
+
duration=30.0, # Extract 30 seconds
|
|
411
|
+
crf=20 # High quality
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
clip = transcode_video('long_video.mp4', 'clip.mp4', clip_config)
|
|
415
|
+
```
|