flow-frame-core 0.1.0
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.
- package/README.md +64 -0
- package/dist/Dockerfile +86 -0
- package/dist/GPU_DEPLOYMENT_README.md +324 -0
- package/dist/OPS_AGENT_README.md +174 -0
- package/dist/README-H100-VM.md +192 -0
- package/dist/README-worker-pools.md +231 -0
- package/dist/README.md +8 -0
- package/dist/WEB-ELEMENT-REQUESTS-README.md +302 -0
- package/dist/append.d.ts +3 -0
- package/dist/append.d.ts.map +1 -0
- package/dist/append.js +42 -0
- package/dist/append.js.map +1 -0
- package/dist/audioRoutes.d.ts +2 -0
- package/dist/audioRoutes.d.ts.map +1 -0
- package/dist/audioRoutes.js +97 -0
- package/dist/audioRoutes.js.map +1 -0
- package/dist/augment-parallel.d.ts +6 -0
- package/dist/augment-parallel.d.ts.map +1 -0
- package/dist/augment-parallel.js +128 -0
- package/dist/augment-parallel.js.map +1 -0
- package/dist/augment-worker.d.ts +2 -0
- package/dist/augment-worker.d.ts.map +1 -0
- package/dist/augment-worker.js +100 -0
- package/dist/augment-worker.js.map +1 -0
- package/dist/browerRoutes.d.ts +2 -0
- package/dist/browerRoutes.d.ts.map +1 -0
- package/dist/browerRoutes.js +323 -0
- package/dist/browerRoutes.js.map +1 -0
- package/dist/browser-utils/utils.d.ts +6 -0
- package/dist/browser-utils/utils.d.ts.map +1 -0
- package/dist/browser-utils/utils.js +133 -0
- package/dist/browser-utils/utils.js.map +1 -0
- package/dist/capture_training_data_endpoints.d.ts +158 -0
- package/dist/capture_training_data_endpoints.d.ts.map +1 -0
- package/dist/capture_training_data_endpoints.js +1812 -0
- package/dist/capture_training_data_endpoints.js.map +1 -0
- package/dist/config.json +28 -0
- package/dist/configEndpoints.d.ts +2 -0
- package/dist/configEndpoints.d.ts.map +1 -0
- package/dist/configEndpoints.js +459 -0
- package/dist/configEndpoints.js.map +1 -0
- package/dist/constants.d.ts +109 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +110 -0
- package/dist/constants.js.map +1 -0
- package/dist/docs/workflow_nodes.md +257 -0
- package/dist/download.d.ts +11 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +31 -0
- package/dist/download.js.map +1 -0
- package/dist/download.py +61 -0
- package/dist/ecosystem.config.json +63 -0
- package/dist/email-body-extractor.d.ts +20 -0
- package/dist/email-body-extractor.d.ts.map +1 -0
- package/dist/email-body-extractor.js +103 -0
- package/dist/email-body-extractor.js.map +1 -0
- package/dist/express_util.d.ts +2 -0
- package/dist/express_util.d.ts.map +1 -0
- package/dist/express_util.js +30 -0
- package/dist/express_util.js.map +1 -0
- package/dist/extension/background.d.ts +2 -0
- package/dist/extension/background.d.ts.map +1 -0
- package/dist/extension/background.js +268 -0
- package/dist/extension/background.js.map +1 -0
- package/dist/extension/manifest.json +19 -0
- package/dist/extensionUtils.d.ts +2 -0
- package/dist/extensionUtils.d.ts.map +1 -0
- package/dist/extensionUtils.js +48 -0
- package/dist/extensionUtils.js.map +1 -0
- package/dist/filter-gmail-poller/README.md +320 -0
- package/dist/filter-gmail-poller/demo.d.ts +2 -0
- package/dist/filter-gmail-poller/demo.d.ts.map +1 -0
- package/dist/filter-gmail-poller/demo.js +79 -0
- package/dist/filter-gmail-poller/demo.js.map +1 -0
- package/dist/filter-gmail-poller/example-existing-app.d.ts +2 -0
- package/dist/filter-gmail-poller/example-existing-app.d.ts.map +1 -0
- package/dist/filter-gmail-poller/example-existing-app.js +72 -0
- package/dist/filter-gmail-poller/example-existing-app.js.map +1 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.d.ts +160 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.d.ts.map +1 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.js +1048 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.js.map +1 -0
- package/dist/filter-gmail-poller/index.d.ts +3 -0
- package/dist/filter-gmail-poller/index.d.ts.map +1 -0
- package/dist/filter-gmail-poller/index.js +18 -0
- package/dist/filter-gmail-poller/index.js.map +1 -0
- package/dist/filter-gmail-poller/manual-test.d.ts +2 -0
- package/dist/filter-gmail-poller/manual-test.d.ts.map +1 -0
- package/dist/filter-gmail-poller/manual-test.js +70 -0
- package/dist/filter-gmail-poller/manual-test.js.map +1 -0
- package/dist/filter-gmail-poller/poller-prompts.d.ts +12 -0
- package/dist/filter-gmail-poller/poller-prompts.d.ts.map +1 -0
- package/dist/filter-gmail-poller/poller-prompts.js +330 -0
- package/dist/filter-gmail-poller/poller-prompts.js.map +1 -0
- package/dist/filter-gmail-poller/test.js +69 -0
- package/dist/flowframe-auto-firebase-adminsdk.json +13 -0
- package/dist/gmail-poller/README-microsoft-email-poller.md +203 -0
- package/dist/gmail-poller/README.md +129 -0
- package/dist/gmail-poller/example.d.ts +5 -0
- package/dist/gmail-poller/example.d.ts.map +1 -0
- package/dist/gmail-poller/example.js +83 -0
- package/dist/gmail-poller/example.js.map +1 -0
- package/dist/gmail-poller/gmail-poller.d.ts +82 -0
- package/dist/gmail-poller/gmail-poller.d.ts.map +1 -0
- package/dist/gmail-poller/gmail-poller.js +455 -0
- package/dist/gmail-poller/gmail-poller.js.map +1 -0
- package/dist/gmail-poller/manual-test.d.ts +2 -0
- package/dist/gmail-poller/manual-test.d.ts.map +1 -0
- package/dist/gmail-poller/manual-test.js +37 -0
- package/dist/gmail-poller/manual-test.js.map +1 -0
- package/dist/gmail-poller/microsoft-email-example.d.ts +8 -0
- package/dist/gmail-poller/microsoft-email-example.d.ts.map +1 -0
- package/dist/gmail-poller/microsoft-email-example.js +58 -0
- package/dist/gmail-poller/microsoft-email-example.js.map +1 -0
- package/dist/gmail-poller/microsoft-email-poller.d.ts +73 -0
- package/dist/gmail-poller/microsoft-email-poller.d.ts.map +1 -0
- package/dist/gmail-poller/microsoft-email-poller.js +346 -0
- package/dist/gmail-poller/microsoft-email-poller.js.map +1 -0
- package/dist/gmail-poller/setup-auth.d.ts +3 -0
- package/dist/gmail-poller/setup-auth.d.ts.map +1 -0
- package/dist/gmail-poller/setup-auth.js +36 -0
- package/dist/gmail-poller/setup-auth.js.map +1 -0
- package/dist/gmail-poller/test.js +36 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/augment_levels.d.ts +2 -0
- package/dist/inference/augment_levels.d.ts.map +1 -0
- package/dist/inference/augment_levels.js +1 -0
- package/dist/inference/augment_levels.js.map +1 -0
- package/dist/inference/capture-overlay.d.ts +13 -0
- package/dist/inference/capture-overlay.d.ts.map +1 -0
- package/dist/inference/capture-overlay.js +355 -0
- package/dist/inference/capture-overlay.js.map +1 -0
- package/dist/inference/capturescreenshot.d.ts +12 -0
- package/dist/inference/capturescreenshot.d.ts.map +1 -0
- package/dist/inference/capturescreenshot.js +157 -0
- package/dist/inference/capturescreenshot.js.map +1 -0
- package/dist/jsonHandler.d.ts +37 -0
- package/dist/jsonHandler.d.ts.map +1 -0
- package/dist/jsonHandler.js +191 -0
- package/dist/jsonHandler.js.map +1 -0
- package/dist/localStorage.json +11 -0
- package/dist/media_data_endpoints.d.ts +2 -0
- package/dist/media_data_endpoints.d.ts.map +1 -0
- package/dist/media_data_endpoints.js +102 -0
- package/dist/media_data_endpoints.js.map +1 -0
- package/dist/operations/blender-ops.d.ts +4 -0
- package/dist/operations/blender-ops.d.ts.map +1 -0
- package/dist/operations/blender-ops.js +55 -0
- package/dist/operations/blender-ops.js.map +1 -0
- package/dist/operations.d.ts +34 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +1514 -0
- package/dist/operations.js.map +1 -0
- package/dist/pdfRoutes.d.ts +2 -0
- package/dist/pdfRoutes.d.ts.map +1 -0
- package/dist/pdfRoutes.js +56 -0
- package/dist/pdfRoutes.js.map +1 -0
- package/dist/peers.d.ts +9 -0
- package/dist/peers.d.ts.map +1 -0
- package/dist/peers.js +70 -0
- package/dist/peers.js.map +1 -0
- package/dist/playparser.d.ts +2 -0
- package/dist/playparser.d.ts.map +1 -0
- package/dist/playparser.js +281 -0
- package/dist/playparser.js.map +1 -0
- package/dist/process.d.ts +4 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +375 -0
- package/dist/process.js.map +1 -0
- package/dist/promptRoutes.d.ts +7 -0
- package/dist/promptRoutes.d.ts.map +1 -0
- package/dist/promptRoutes.js +68 -0
- package/dist/promptRoutes.js.map +1 -0
- package/dist/queueManager.d.ts +23 -0
- package/dist/queueManager.d.ts.map +1 -0
- package/dist/queueManager.js +96 -0
- package/dist/queueManager.js.map +1 -0
- package/dist/run-flow.d.ts +8 -0
- package/dist/run-flow.d.ts.map +1 -0
- package/dist/run-flow.js +220 -0
- package/dist/run-flow.js.map +1 -0
- package/dist/scraper.d.ts +2 -0
- package/dist/scraper.d.ts.map +1 -0
- package/dist/scraper.js +75 -0
- package/dist/scraper.js.map +1 -0
- package/dist/scraper_endpoints.d.ts +2 -0
- package/dist/scraper_endpoints.d.ts.map +1 -0
- package/dist/scraper_endpoints.js +40 -0
- package/dist/scraper_endpoints.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +528 -0
- package/dist/server.js.map +1 -0
- package/dist/services/ModelContext.d.ts +7 -0
- package/dist/services/ModelContext.d.ts.map +1 -0
- package/dist/services/ModelContext.js +7 -0
- package/dist/services/ModelContext.js.map +1 -0
- package/dist/services/agenticUiPlanner.d.ts +27 -0
- package/dist/services/agenticUiPlanner.d.ts.map +1 -0
- package/dist/services/agenticUiPlanner.js +161 -0
- package/dist/services/agenticUiPlanner.js.map +1 -0
- package/dist/services/apiKeyService.d.ts +3 -0
- package/dist/services/apiKeyService.d.ts.map +1 -0
- package/dist/services/apiKeyService.js +7 -0
- package/dist/services/apiKeyService.js.map +1 -0
- package/dist/services/audioService.d.ts +10 -0
- package/dist/services/audioService.d.ts.map +1 -0
- package/dist/services/audioService.js +140 -0
- package/dist/services/audioService.js.map +1 -0
- package/dist/services/autoPromptOptimizer.d.ts +44 -0
- package/dist/services/autoPromptOptimizer.d.ts.map +1 -0
- package/dist/services/autoPromptOptimizer.js +344 -0
- package/dist/services/autoPromptOptimizer.js.map +1 -0
- package/dist/services/autoPromptOptimizer.manual-test.d.ts +2 -0
- package/dist/services/autoPromptOptimizer.manual-test.d.ts.map +1 -0
- package/dist/services/autoPromptOptimizer.manual-test.js +27 -0
- package/dist/services/autoPromptOptimizer.manual-test.js.map +1 -0
- package/dist/services/chainExecutor.d.ts +26 -0
- package/dist/services/chainExecutor.d.ts.map +1 -0
- package/dist/services/chainExecutor.js +399 -0
- package/dist/services/chainExecutor.js.map +1 -0
- package/dist/services/classifyImageQuestion.d.ts +55 -0
- package/dist/services/classifyImageQuestion.d.ts.map +1 -0
- package/dist/services/classifyImageQuestion.js +428 -0
- package/dist/services/classifyImageQuestion.js.map +1 -0
- package/dist/services/configuration/executor.d.ts +3 -0
- package/dist/services/configuration/executor.d.ts.map +1 -0
- package/dist/services/configuration/executor.js +795 -0
- package/dist/services/configuration/executor.js.map +1 -0
- package/dist/services/error.d.ts +13 -0
- package/dist/services/error.d.ts.map +1 -0
- package/dist/services/error.js +34 -0
- package/dist/services/error.js.map +1 -0
- package/dist/services/executor.d.ts +11 -0
- package/dist/services/executor.d.ts.map +1 -0
- package/dist/services/executor.js +1587 -0
- package/dist/services/executor.js.map +1 -0
- package/dist/services/extractPdf.d.ts +26 -0
- package/dist/services/extractPdf.d.ts.map +1 -0
- package/dist/services/extractPdf.js +256 -0
- package/dist/services/extractPdf.js.map +1 -0
- package/dist/services/generateJsTransformFromPrompt.d.ts +11 -0
- package/dist/services/generateJsTransformFromPrompt.d.ts.map +1 -0
- package/dist/services/generateJsTransformFromPrompt.js +328 -0
- package/dist/services/generateJsTransformFromPrompt.js.map +1 -0
- package/dist/services/localizeFirebaseMedia.d.ts +20 -0
- package/dist/services/localizeFirebaseMedia.d.ts.map +1 -0
- package/dist/services/localizeFirebaseMedia.js +135 -0
- package/dist/services/localizeFirebaseMedia.js.map +1 -0
- package/dist/services/polyfill_canvas.d.ts +2 -0
- package/dist/services/polyfill_canvas.d.ts.map +1 -0
- package/dist/services/polyfill_canvas.js +19 -0
- package/dist/services/polyfill_canvas.js.map +1 -0
- package/dist/services/promptRoutes.d.ts +7 -0
- package/dist/services/promptRoutes.d.ts.map +1 -0
- package/dist/services/promptRoutes.js +70 -0
- package/dist/services/promptRoutes.js.map +1 -0
- package/dist/services/runPrompt.d.ts +29 -0
- package/dist/services/runPrompt.d.ts.map +1 -0
- package/dist/services/runPrompt.js +232 -0
- package/dist/services/runPrompt.js.map +1 -0
- package/dist/services/schemaInference.d.ts +2 -0
- package/dist/services/schemaInference.d.ts.map +1 -0
- package/dist/services/schemaInference.js +17 -0
- package/dist/services/schemaInference.js.map +1 -0
- package/dist/services/self-learning/api.d.ts +2 -0
- package/dist/services/self-learning/api.d.ts.map +1 -0
- package/dist/services/self-learning/api.js +84 -0
- package/dist/services/self-learning/api.js.map +1 -0
- package/dist/services/self-learning/autolearn.d.ts +23 -0
- package/dist/services/self-learning/autolearn.d.ts.map +1 -0
- package/dist/services/self-learning/autolearn.js +308 -0
- package/dist/services/self-learning/autolearn.js.map +1 -0
- package/dist/services/self-learning/discover.d.ts +11 -0
- package/dist/services/self-learning/discover.d.ts.map +1 -0
- package/dist/services/self-learning/discover.js +446 -0
- package/dist/services/self-learning/discover.js.map +1 -0
- package/dist/services/self-learning/image.d.ts +10 -0
- package/dist/services/self-learning/image.d.ts.map +1 -0
- package/dist/services/self-learning/image.js +38 -0
- package/dist/services/self-learning/image.js.map +1 -0
- package/dist/services/self-learning/injest.d.ts +25 -0
- package/dist/services/self-learning/injest.d.ts.map +1 -0
- package/dist/services/self-learning/injest.js +110 -0
- package/dist/services/self-learning/injest.js.map +1 -0
- package/dist/services/self-learning/learn.d.ts +2 -0
- package/dist/services/self-learning/learn.d.ts.map +1 -0
- package/dist/services/self-learning/learn.js +145 -0
- package/dist/services/self-learning/learn.js.map +1 -0
- package/dist/services/self-learning/matcher.d.ts +2 -0
- package/dist/services/self-learning/matcher.d.ts.map +1 -0
- package/dist/services/self-learning/matcher.js +38 -0
- package/dist/services/self-learning/matcher.js.map +1 -0
- package/dist/services/self-learning/openai.d.ts +8 -0
- package/dist/services/self-learning/openai.d.ts.map +1 -0
- package/dist/services/self-learning/openai.js +97 -0
- package/dist/services/self-learning/openai.js.map +1 -0
- package/dist/services/self-learning/phash.d.ts +5 -0
- package/dist/services/self-learning/phash.d.ts.map +1 -0
- package/dist/services/self-learning/phash.js +68 -0
- package/dist/services/self-learning/phash.js.map +1 -0
- package/dist/services/self-learning/recognize.d.ts +17 -0
- package/dist/services/self-learning/recognize.d.ts.map +1 -0
- package/dist/services/self-learning/recognize.js +116 -0
- package/dist/services/self-learning/recognize.js.map +1 -0
- package/dist/services/self-learning/record_transition.d.ts +8 -0
- package/dist/services/self-learning/record_transition.d.ts.map +1 -0
- package/dist/services/self-learning/record_transition.js +20 -0
- package/dist/services/self-learning/record_transition.js.map +1 -0
- package/dist/services/self-learning/registry.d.ts +4 -0
- package/dist/services/self-learning/registry.d.ts.map +1 -0
- package/dist/services/self-learning/registry.js +19 -0
- package/dist/services/self-learning/registry.js.map +1 -0
- package/dist/services/self-learning/schema.d.ts +114 -0
- package/dist/services/self-learning/schema.d.ts.map +1 -0
- package/dist/services/self-learning/schema.js +70 -0
- package/dist/services/self-learning/schema.js.map +1 -0
- package/dist/services/self-learning/schemaStrictify.d.ts +2 -0
- package/dist/services/self-learning/schemaStrictify.d.ts.map +1 -0
- package/dist/services/self-learning/schemaStrictify.js +34 -0
- package/dist/services/self-learning/schemaStrictify.js.map +1 -0
- package/dist/services/self-learning/transition_graph.d.ts +6 -0
- package/dist/services/self-learning/transition_graph.d.ts.map +1 -0
- package/dist/services/self-learning/transition_graph.js +83 -0
- package/dist/services/self-learning/transition_graph.js.map +1 -0
- package/dist/services/self-learning/transition_log.d.ts +3 -0
- package/dist/services/self-learning/transition_log.d.ts.map +1 -0
- package/dist/services/self-learning/transition_log.js +42 -0
- package/dist/services/self-learning/transition_log.js.map +1 -0
- package/dist/services/self-learning/util.d.ts +3 -0
- package/dist/services/self-learning/util.d.ts.map +1 -0
- package/dist/services/self-learning/util.js +11 -0
- package/dist/services/self-learning/util.js.map +1 -0
- package/dist/services/stepByStepAiPlanner.d.ts +39 -0
- package/dist/services/stepByStepAiPlanner.d.ts.map +1 -0
- package/dist/services/stepByStepAiPlanner.js +379 -0
- package/dist/services/stepByStepAiPlanner.js.map +1 -0
- package/dist/services/test-genjs.js +39 -0
- package/dist/services/test-genjs.manual-test.d.ts +2 -0
- package/dist/services/test-genjs.manual-test.d.ts.map +1 -0
- package/dist/services/test-genjs.manual-test.js +40 -0
- package/dist/services/test-genjs.manual-test.js.map +1 -0
- package/dist/services/uiMapPathFinder.d.ts +13 -0
- package/dist/services/uiMapPathFinder.d.ts.map +1 -0
- package/dist/services/uiMapPathFinder.js +79 -0
- package/dist/services/uiMapPathFinder.js.map +1 -0
- package/dist/services/uiMapService.d.ts +26 -0
- package/dist/services/uiMapService.d.ts.map +1 -0
- package/dist/services/uiMapService.js +275 -0
- package/dist/services/uiMapService.js.map +1 -0
- package/dist/services/uiPlanner.d.ts +54 -0
- package/dist/services/uiPlanner.d.ts.map +1 -0
- package/dist/services/uiPlanner.js +558 -0
- package/dist/services/uiPlanner.js.map +1 -0
- package/dist/services/utilityFunctions.d.ts +80 -0
- package/dist/services/utilityFunctions.d.ts.map +1 -0
- package/dist/services/utilityFunctions.js +352 -0
- package/dist/services/utilityFunctions.js.map +1 -0
- package/dist/services/variableGenerator.d.ts +39 -0
- package/dist/services/variableGenerator.d.ts.map +1 -0
- package/dist/services/variableGenerator.js +157 -0
- package/dist/services/variableGenerator.js.map +1 -0
- package/dist/services/workflow/build-workflow.d.ts +49 -0
- package/dist/services/workflow/build-workflow.d.ts.map +1 -0
- package/dist/services/workflow/build-workflow.js +119 -0
- package/dist/services/workflow/build-workflow.js.map +1 -0
- package/dist/standardRoutes.d.ts +2 -0
- package/dist/standardRoutes.d.ts.map +1 -0
- package/dist/standardRoutes.js +1495 -0
- package/dist/standardRoutes.js.map +1 -0
- package/dist/stepWorkflowRoutes.d.ts +2 -0
- package/dist/stepWorkflowRoutes.d.ts.map +1 -0
- package/dist/stepWorkflowRoutes.js +1007 -0
- package/dist/stepWorkflowRoutes.js.map +1 -0
- package/dist/storage.d.ts +19 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.docker.json +61 -0
- package/dist/storage.js +131 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.json +78 -0
- package/dist/storage_cache/boxes.json +48 -0
- package/dist/storage_cache/suno_state.json +3 -0
- package/dist/suno_download.d.ts +11 -0
- package/dist/suno_download.d.ts.map +1 -0
- package/dist/suno_download.js +33 -0
- package/dist/suno_download.js.map +1 -0
- package/dist/suno_download.py +119 -0
- package/dist/test-web-element-requests.d.ts +6 -0
- package/dist/test-web-element-requests.d.ts.map +1 -0
- package/dist/test-web-element-requests.js +114 -0
- package/dist/test-web-element-requests.js.map +1 -0
- package/dist/test_pdf_render.d.ts +2 -0
- package/dist/test_pdf_render.d.ts.map +1 -0
- package/dist/test_pdf_render.js +50 -0
- package/dist/test_pdf_render.js.map +1 -0
- package/dist/training_data_viewer_endpoints.d.ts +2 -0
- package/dist/training_data_viewer_endpoints.d.ts.map +1 -0
- package/dist/training_data_viewer_endpoints.js +141 -0
- package/dist/training_data_viewer_endpoints.js.map +1 -0
- package/dist/utils.d.ts +353 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1517 -0
- package/dist/utils.js.map +1 -0
- package/dist/vm-h100.env.template +55 -0
- package/dist/web-element-requests.d.ts +102 -0
- package/dist/web-element-requests.d.ts.map +1 -0
- package/dist/web-element-requests.js +278 -0
- package/dist/web-element-requests.js.map +1 -0
- package/dist/workflowRoutes.d.ts +2 -0
- package/dist/workflowRoutes.d.ts.map +1 -0
- package/dist/workflowRoutes.js +441 -0
- package/dist/workflowRoutes.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import sharp from 'sharp';
|
|
5
|
+
/**
|
|
6
|
+
* Process hierarchical annotations and generate YOLO training data
|
|
7
|
+
* @param {string} imagePath - Path to the source image
|
|
8
|
+
* @param {Object} annotationData - Annotation data structure
|
|
9
|
+
* @param {string} outputDir - Target output directory
|
|
10
|
+
* @param {Object} options - Processing options
|
|
11
|
+
*/
|
|
12
|
+
export async function processAnnotations(imagePath, annotationData, outputDir, options = {}) {
|
|
13
|
+
try {
|
|
14
|
+
// Load and get image dimensions
|
|
15
|
+
const imageBuffer = await fs.readFile(imagePath);
|
|
16
|
+
console.log('Loaded image:', imagePath);
|
|
17
|
+
const image = sharp(imageBuffer);
|
|
18
|
+
const { width: imgWidth, height: imgHeight } = await image.metadata();
|
|
19
|
+
console.log(`Image dimensions: ${imgWidth}x${imgHeight}`);
|
|
20
|
+
const defaults = {
|
|
21
|
+
prefix: `sample_${Date.now()}`,
|
|
22
|
+
valSplit: 0.2,
|
|
23
|
+
augCount: 100, // For now, just process once without jittering
|
|
24
|
+
jitterPos: Math.min(imgWidth * 0.025, 13),
|
|
25
|
+
jitterSize: Math.min(imgWidth * 0.05, 25),
|
|
26
|
+
rootParentPercentageX: 0.1,
|
|
27
|
+
rootParentPercentageY: 0.1,
|
|
28
|
+
minAreaRatio: 0.05,
|
|
29
|
+
onProgress: null // Callback for progress updates
|
|
30
|
+
};
|
|
31
|
+
const config = { ...defaults, ...options };
|
|
32
|
+
// Parse annotation data structure
|
|
33
|
+
const { classes, parents, boxes } = annotationData;
|
|
34
|
+
// Build class hierarchy helpers
|
|
35
|
+
const classToIndex = {};
|
|
36
|
+
classes.forEach((name, idx) => classToIndex[name] = idx);
|
|
37
|
+
const getDepth = (className) => {
|
|
38
|
+
let depth = 0;
|
|
39
|
+
let current = className;
|
|
40
|
+
while (parents[current]) {
|
|
41
|
+
depth++;
|
|
42
|
+
current = parents[current];
|
|
43
|
+
if (depth > 10)
|
|
44
|
+
break; // Prevent infinite loops
|
|
45
|
+
}
|
|
46
|
+
return depth;
|
|
47
|
+
};
|
|
48
|
+
// Group classes by depth
|
|
49
|
+
const depthToClasses = {};
|
|
50
|
+
classes.forEach(className => {
|
|
51
|
+
const depth = getDepth(className);
|
|
52
|
+
if (!depthToClasses[depth])
|
|
53
|
+
depthToClasses[depth] = [];
|
|
54
|
+
depthToClasses[depth].push(className);
|
|
55
|
+
});
|
|
56
|
+
// Create directory structure for each depth
|
|
57
|
+
for (const depth of Object.keys(depthToClasses)) {
|
|
58
|
+
const levelDir = path.join(outputDir, `level_${depth}`);
|
|
59
|
+
await fs.mkdir(path.join(levelDir, 'images', 'train'), { recursive: true });
|
|
60
|
+
console.log(`Created directory: ${path.join(levelDir, 'images', 'train')}`);
|
|
61
|
+
await fs.mkdir(path.join(levelDir, 'images', 'val'), { recursive: true });
|
|
62
|
+
console.log(`Created directory: ${path.join(levelDir, 'images', 'val')}`);
|
|
63
|
+
await fs.mkdir(path.join(levelDir, 'labels', 'train'), { recursive: true });
|
|
64
|
+
console.log(`Created directory: ${path.join(levelDir, 'labels', 'train')}`);
|
|
65
|
+
await fs.mkdir(path.join(levelDir, 'labels', 'val'), { recursive: true });
|
|
66
|
+
console.log(`Created directory: ${path.join(levelDir, 'labels', 'val')}`);
|
|
67
|
+
}
|
|
68
|
+
// Convert boxes to processing format
|
|
69
|
+
const processBoxes = boxes.map(box => ({
|
|
70
|
+
x1: box.x,
|
|
71
|
+
y1: box.y,
|
|
72
|
+
x2: box.x + box.w,
|
|
73
|
+
y2: box.y + box.h,
|
|
74
|
+
classIdx: classToIndex[box.class],
|
|
75
|
+
className: box.class,
|
|
76
|
+
depth: getDepth(box.class)
|
|
77
|
+
}));
|
|
78
|
+
// Process each augmentation iteration
|
|
79
|
+
for (let i = 0; i < config.augCount; i++) {
|
|
80
|
+
const isVal = Math.random() < config.valSplit;
|
|
81
|
+
const split = isVal ? 'val' : 'train';
|
|
82
|
+
const iterPrefix = `${config.prefix}_${i.toString().padStart(4, '0')}`;
|
|
83
|
+
console.log(`Processing iteration ${i + 1}/${config.augCount} (${split})`);
|
|
84
|
+
// Apply jittering to boxes (for now, minimal jittering)
|
|
85
|
+
const jitteredBoxes = processBoxes.map(box => {
|
|
86
|
+
const dx = Math.floor(Math.random() * (config.jitterPos * 2 + 1)) - config.jitterPos;
|
|
87
|
+
const dy = Math.floor(Math.random() * (config.jitterPos * 2 + 1)) - config.jitterPos;
|
|
88
|
+
const dw = Math.floor(Math.random() * (config.jitterSize * 2 + 1)) - config.jitterSize;
|
|
89
|
+
const dh = Math.floor(Math.random() * (config.jitterSize * 2 + 1)) - config.jitterSize;
|
|
90
|
+
return {
|
|
91
|
+
...box,
|
|
92
|
+
x1: Math.max(0, Math.min(box.x1 + dx, imgWidth - 1)),
|
|
93
|
+
y1: Math.max(0, Math.min(box.y1 + dy, imgHeight - 1)),
|
|
94
|
+
x2: Math.max(box.x1 + dx + 1, Math.min(box.x2 + dx + dw, imgWidth)),
|
|
95
|
+
y2: Math.max(box.y1 + dy + 1, Math.min(box.y2 + dy + dh, imgHeight))
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
// Process regions recursively
|
|
99
|
+
await processRegion(image, { x1: 0, y1: 0, x2: imgWidth, y2: imgHeight }, -1, null, iterPrefix, jitteredBoxes, {
|
|
100
|
+
classes,
|
|
101
|
+
parents,
|
|
102
|
+
classToIndex,
|
|
103
|
+
getDepth,
|
|
104
|
+
depthToClasses,
|
|
105
|
+
outputDir,
|
|
106
|
+
split,
|
|
107
|
+
config,
|
|
108
|
+
imgWidth,
|
|
109
|
+
imgHeight
|
|
110
|
+
});
|
|
111
|
+
await config.onProgress?.({
|
|
112
|
+
step: i + 1,
|
|
113
|
+
totalSteps: config.augCount,
|
|
114
|
+
percentage: Math.round(((i + 1) / config.augCount) * 100),
|
|
115
|
+
message: `Processed augmentation ${i + 1}`
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// Generate data.yaml for each level
|
|
119
|
+
for (const depth of Object.keys(depthToClasses)) {
|
|
120
|
+
await generateDataYaml(path.join(outputDir, `level_${depth}`), classes, config);
|
|
121
|
+
}
|
|
122
|
+
console.log(`Successfully processed ${config.augCount} iterations with ${classes.length} classes`);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error('Error processing annotations:', error);
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Recursive function to process regions at each depth level
|
|
131
|
+
*/
|
|
132
|
+
async function processRegion(sourceImage, regionBox, regionDepth, parentClassIdx, namePrefix, jitteredBoxes, context) {
|
|
133
|
+
const { classes, parents, classToIndex, getDepth, depthToClasses, outputDir, split, config, imgWidth, imgHeight } = context;
|
|
134
|
+
const childDepth = regionDepth + 1;
|
|
135
|
+
// Check if there are classes at this child depth
|
|
136
|
+
if (!depthToClasses[childDepth]) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const { x1: rx1, y1: ry1, x2: rx2, y2: ry2 } = regionBox;
|
|
140
|
+
// Find candidate boxes at this depth level
|
|
141
|
+
const candidateBoxes = jitteredBoxes.filter(box => {
|
|
142
|
+
// Check depth
|
|
143
|
+
if (box.depth !== childDepth)
|
|
144
|
+
return false;
|
|
145
|
+
// Check parent relationship (if not root)
|
|
146
|
+
if (parentClassIdx !== null) {
|
|
147
|
+
const parentClassName = classes[parentClassIdx];
|
|
148
|
+
if (parents[box.className] !== parentClassName)
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
// Check containment within region
|
|
152
|
+
return box.x1 >= rx1 && box.y1 >= ry1 && box.x2 <= rx2 && box.y2 <= ry2;
|
|
153
|
+
});
|
|
154
|
+
if (candidateBoxes.length === 0) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const levelFolder = path.join(outputDir, `level_${childDepth}`);
|
|
158
|
+
// Create ONE image and label file for this parent region containing ALL child boxes
|
|
159
|
+
const parentClassName = parentClassIdx !== null ? classes[parentClassIdx] : 'root';
|
|
160
|
+
const thisPrefix = `${namePrefix}_${parentClassName}_${guid()}`;
|
|
161
|
+
if (childDepth === 0) {
|
|
162
|
+
// Depth 0: Save full image with all root boxes
|
|
163
|
+
const imgPath = path.join(levelFolder, 'images', split, `${thisPrefix}.png`);
|
|
164
|
+
console.log(`Creating full image for root boxes: ${imgPath}`);
|
|
165
|
+
const labelPath = path.join(levelFolder, 'labels', split, `${thisPrefix}.txt`);
|
|
166
|
+
console.log(`Creating label file for root boxes: ${labelPath}`);
|
|
167
|
+
console.log(`Checking for existing image: ${imgPath}`);
|
|
168
|
+
try {
|
|
169
|
+
await fs.access(imgPath);
|
|
170
|
+
console.log(`Image already exists: ${imgPath}`);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// File doesn't exist, save it
|
|
174
|
+
// await sourceImage.png().toFile(imgPath);
|
|
175
|
+
await sourceImage.clone().png().toFile(imgPath);
|
|
176
|
+
console.log(`Saved full image: ${imgPath}`);
|
|
177
|
+
}
|
|
178
|
+
// Create labels with ALL boxes at this depth level
|
|
179
|
+
const labelLines = [];
|
|
180
|
+
for (const box of candidateBoxes) {
|
|
181
|
+
// Main box
|
|
182
|
+
const xc = ((box.x1 + box.x2) / 2) / imgWidth;
|
|
183
|
+
const yc = ((box.y1 + box.y2) / 2) / imgHeight;
|
|
184
|
+
const wn = (box.x2 - box.x1) / imgWidth;
|
|
185
|
+
const hn = (box.y2 - box.y1) / imgHeight;
|
|
186
|
+
labelLines.push(`${box.classIdx} ${xc.toFixed(6)} ${yc.toFixed(6)} ${wn.toFixed(6)} ${hn.toFixed(6)}`);
|
|
187
|
+
// Corner boxes for this box
|
|
188
|
+
const cornerLines = generateCornerBoxes(box, box.classIdx, classes.length, config, imgWidth, imgHeight);
|
|
189
|
+
labelLines.push(...cornerLines);
|
|
190
|
+
}
|
|
191
|
+
await fs.writeFile(labelPath, labelLines.join('\n') + '\n');
|
|
192
|
+
console.log(`Created label file with ${candidateBoxes.length} boxes: ${labelPath}`);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Child depth >= 1: Crop parent region and label ALL child boxes within it
|
|
196
|
+
const parentAbsX1 = Math.floor(regionBox.x1);
|
|
197
|
+
const parentAbsY1 = Math.floor(regionBox.y1);
|
|
198
|
+
const parentAbsX2 = Math.floor(regionBox.x2);
|
|
199
|
+
const parentAbsY2 = Math.floor(regionBox.y2);
|
|
200
|
+
const regionW = parentAbsX2 - parentAbsX1;
|
|
201
|
+
const regionH = parentAbsY2 - parentAbsY1;
|
|
202
|
+
// Crop the image ONCE for this parent region
|
|
203
|
+
const imgPath = path.join(levelFolder, 'images', split, `${thisPrefix}.png`);
|
|
204
|
+
const labelPath = path.join(levelFolder, 'labels', split, `${thisPrefix}.txt`);
|
|
205
|
+
try {
|
|
206
|
+
await fs.access(imgPath);
|
|
207
|
+
console.log(`Image already exists: ${imgPath}`);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// File doesn't exist, crop and save it
|
|
211
|
+
const croppedImage = sourceImage.clone().extract({
|
|
212
|
+
left: parentAbsX1,
|
|
213
|
+
top: parentAbsY1,
|
|
214
|
+
width: regionW,
|
|
215
|
+
height: regionH
|
|
216
|
+
});
|
|
217
|
+
await croppedImage.png().toFile(imgPath);
|
|
218
|
+
console.log(`Saved cropped image: ${imgPath} (${regionW}x${regionH})`);
|
|
219
|
+
}
|
|
220
|
+
// Create labels for ALL child boxes in this cropped region
|
|
221
|
+
const labelLines = [];
|
|
222
|
+
for (const box of candidateBoxes) {
|
|
223
|
+
const mx1 = box.x1 - rx1;
|
|
224
|
+
const my1 = box.y1 - ry1;
|
|
225
|
+
const mx2 = box.x2 - rx1;
|
|
226
|
+
const my2 = box.y2 - ry1;
|
|
227
|
+
const xc = ((mx1 + mx2) / 2) / regionW;
|
|
228
|
+
const yc = ((my1 + my2) / 2) / regionH;
|
|
229
|
+
const wn = (mx2 - mx1) / regionW;
|
|
230
|
+
const hn = (my2 - my1) / regionH;
|
|
231
|
+
labelLines.push(`${box.classIdx} ${xc.toFixed(6)} ${yc.toFixed(6)} ${wn.toFixed(6)} ${hn.toFixed(6)}`);
|
|
232
|
+
}
|
|
233
|
+
await fs.writeFile(labelPath, labelLines.join('\n') + '\n');
|
|
234
|
+
console.log(`Saved label with ${candidateBoxes.length} child boxes for parent "${parentClassName}"`);
|
|
235
|
+
}
|
|
236
|
+
// Now recurse into EACH child box's region for the next depth level
|
|
237
|
+
for (let idx = 0; idx < candidateBoxes.length; idx++) {
|
|
238
|
+
const box = candidateBoxes[idx];
|
|
239
|
+
// Calculate absolute coordinates for recursion
|
|
240
|
+
let absRx1, absRy1, absRx2, absRy2;
|
|
241
|
+
if (childDepth === 0) {
|
|
242
|
+
absRx1 = box.x1;
|
|
243
|
+
absRy1 = box.y1;
|
|
244
|
+
absRx2 = box.x2;
|
|
245
|
+
absRy2 = box.y2;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
const parentAbsX1 = Math.floor(regionBox.x1);
|
|
249
|
+
const parentAbsY1 = Math.floor(regionBox.y1);
|
|
250
|
+
const mx1 = box.x1 - rx1;
|
|
251
|
+
const my1 = box.y1 - ry1;
|
|
252
|
+
const mx2 = box.x2 - rx1;
|
|
253
|
+
const my2 = box.y2 - ry1;
|
|
254
|
+
absRx1 = parentAbsX1 + Math.floor(mx1);
|
|
255
|
+
absRy1 = parentAbsY1 + Math.floor(my1);
|
|
256
|
+
absRx2 = parentAbsX1 + Math.floor(mx2);
|
|
257
|
+
absRy2 = parentAbsY1 + Math.floor(my2);
|
|
258
|
+
}
|
|
259
|
+
// Recurse into this box's region for the next depth level
|
|
260
|
+
await processRegion(sourceImage, { x1: absRx1, y1: absRy1, x2: absRx2, y2: absRy2 }, childDepth, box.classIdx, `${box.className}_c_${childDepth}_${idx}`, // Unique prefix for this child's descendants
|
|
261
|
+
jitteredBoxes, context);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const SKIP_CORNER_BOXES = true; // Set to true to skip corner boxes
|
|
265
|
+
/**
|
|
266
|
+
* Generate corner box labels for depth 0 boxes
|
|
267
|
+
*/
|
|
268
|
+
function generateCornerBoxes(box, classIdx, numClasses, config, imgWidth, imgHeight) {
|
|
269
|
+
const cornerBase = numClasses + (classIdx * 4);
|
|
270
|
+
const pw = box.x2 - box.x1;
|
|
271
|
+
const ph = box.y2 - box.y1;
|
|
272
|
+
const cw = config.rootParentPercentageX * pw;
|
|
273
|
+
const ch = config.rootParentPercentageY * ph;
|
|
274
|
+
if (SKIP_CORNER_BOXES) {
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
const corners = [
|
|
278
|
+
// Top-left
|
|
279
|
+
{ x1: box.x1, y1: box.y1, x2: box.x1 + cw, y2: box.y1 + ch },
|
|
280
|
+
// Top-right
|
|
281
|
+
{ x1: box.x2 - cw, y1: box.y1, x2: box.x2, y2: box.y1 + ch },
|
|
282
|
+
// Bottom-left
|
|
283
|
+
{ x1: box.x1, y1: box.y2 - ch, x2: box.x1 + cw, y2: box.y2 },
|
|
284
|
+
// Bottom-right
|
|
285
|
+
{ x1: box.x2 - cw, y1: box.y2 - ch, x2: box.x2, y2: box.y2 }
|
|
286
|
+
];
|
|
287
|
+
return corners.map((corner, i) => {
|
|
288
|
+
const cx = (corner.x1 + corner.x2) / 2;
|
|
289
|
+
const cy = (corner.y1 + corner.y2) / 2;
|
|
290
|
+
const xc = cx / imgWidth;
|
|
291
|
+
const yc = cy / imgHeight;
|
|
292
|
+
const wn = cw / imgWidth;
|
|
293
|
+
const hn = ch / imgHeight;
|
|
294
|
+
return `${cornerBase + i} ${xc.toFixed(6)} ${yc.toFixed(6)} ${wn.toFixed(6)} ${hn.toFixed(6)}`;
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
function guid() {
|
|
298
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
299
|
+
var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
300
|
+
return v.toString(16);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Generate data.yaml file for YOLO training
|
|
305
|
+
*/
|
|
306
|
+
async function generateDataYaml(levelDir, classes, config) {
|
|
307
|
+
// Build expanded names list (original classes + corner classes)
|
|
308
|
+
const expandedNames = [...classes];
|
|
309
|
+
if (!SKIP_CORNER_BOXES) {
|
|
310
|
+
classes.forEach(className => {
|
|
311
|
+
expandedNames.push(`${className}#tl`, `${className}#tr`, `${className}#bl`, `${className}#br`);
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
const yamlData = {
|
|
315
|
+
train: 'images/train',
|
|
316
|
+
val: 'images/val',
|
|
317
|
+
nc: expandedNames.length,
|
|
318
|
+
names: expandedNames
|
|
319
|
+
};
|
|
320
|
+
const yamlContent = yaml.dump(yamlData);
|
|
321
|
+
const yamlPath = path.join(levelDir, 'data.yaml');
|
|
322
|
+
await fs.writeFile(yamlPath, yamlContent);
|
|
323
|
+
console.log(`Generated data.yaml in ${levelDir} (nc=${expandedNames.length})`);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Example usage function
|
|
327
|
+
*/
|
|
328
|
+
export async function processImageAnnotations(imagePath, annotationJsonPath, outputDir, options = {}) {
|
|
329
|
+
try {
|
|
330
|
+
const annotationData = JSON.parse(await fs.readFile(annotationJsonPath, 'utf8'));
|
|
331
|
+
await processAnnotations(imagePath, annotationData, outputDir, options);
|
|
332
|
+
console.log('Processing completed successfully');
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
console.error('Error processing image annotations:', error);
|
|
336
|
+
throw error;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
///Users/andrewporter/Documents/ai/yolo_training_data
|
|
340
|
+
// Example usage:
|
|
341
|
+
/*
|
|
342
|
+
await processImageAnnotations(
|
|
343
|
+
'/path/to/image.png',
|
|
344
|
+
'/path/to/annotations.json',
|
|
345
|
+
'/path/to/output',
|
|
346
|
+
{
|
|
347
|
+
prefix: 'my_sample',
|
|
348
|
+
valSplit: 0.2,
|
|
349
|
+
augCount: 100,
|
|
350
|
+
rootParentPercentageX: 0.1,
|
|
351
|
+
rootParentPercentageY: 0.1
|
|
352
|
+
}
|
|
353
|
+
);
|
|
354
|
+
*/
|
|
355
|
+
//# sourceMappingURL=capture-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-overlay.js","sourceRoot":"","sources":["../../src/inference/capture-overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Take a full‑screen shot via robotjs, re‑pack its BGRA buffer
|
|
3
|
+
* into a tightly‑packed RGBA buffer, write out a GUID.png, and return
|
|
4
|
+
* just the filename.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} targetFolder – Where to save the PNG.
|
|
7
|
+
* @returns {Promise<string>} – The generated <guid>.png filename.
|
|
8
|
+
*/
|
|
9
|
+
export declare function captureFullScreenshot(targetFolder: any): Promise<string>;
|
|
10
|
+
export declare function captureScreenshotBase64(region: any): Promise<string>;
|
|
11
|
+
export declare function captureScreenshot(targetFolder: any, filename: any, region: any): Promise<any>;
|
|
12
|
+
//# sourceMappingURL=capturescreenshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capturescreenshot.d.ts","sourceRoot":"","sources":["../../src/inference/capturescreenshot.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,YAAY,KAAA,mBA4CvD;AAGD,wBAAsB,uBAAuB,CAAC,MAAM,KAAA,mBAgEnD;AAED,wBAAsB,iBAAiB,CAAC,YAAY,KAAA,EAAE,QAAQ,KAAA,EAAE,MAAM,KAAA,gBAkErE"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// screenshot.mjs
|
|
2
|
+
import robot from 'robotjs';
|
|
3
|
+
import { promises as fs } from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import sharp from 'sharp';
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
+
/**
|
|
8
|
+
* Take a full‑screen shot via robotjs, re‑pack its BGRA buffer
|
|
9
|
+
* into a tightly‑packed RGBA buffer, write out a GUID.png, and return
|
|
10
|
+
* just the filename.
|
|
11
|
+
*
|
|
12
|
+
* @param {string} targetFolder – Where to save the PNG.
|
|
13
|
+
* @returns {Promise<string>} – The generated <guid>.png filename.
|
|
14
|
+
*/
|
|
15
|
+
export async function captureFullScreenshot(targetFolder) {
|
|
16
|
+
// ensure output dir
|
|
17
|
+
await fs.mkdir(targetFolder, { recursive: true });
|
|
18
|
+
// grab the raw robotjs bitmap
|
|
19
|
+
const screenSize = robot.getScreenSize();
|
|
20
|
+
const bmp = robot.screen.capture(0, 0, screenSize.width, screenSize.height);
|
|
21
|
+
const { width, height, byteWidth, bytesPerPixel, image: bgra } = bmp;
|
|
22
|
+
// allocate a tight RGBA buffer
|
|
23
|
+
const rgba = Buffer.alloc(width * height * 4);
|
|
24
|
+
// unpack row by row accounting for stride
|
|
25
|
+
for (let row = 0; row < height; row++) {
|
|
26
|
+
const rowStartSrc = row * byteWidth;
|
|
27
|
+
const rowStartDst = row * width * 4;
|
|
28
|
+
for (let col = 0; col < width; col++) {
|
|
29
|
+
const srcIdx = rowStartSrc + col * bytesPerPixel;
|
|
30
|
+
const dstIdx = rowStartDst + col * 4;
|
|
31
|
+
// BGRA → RGBA
|
|
32
|
+
rgba[dstIdx] = bgra[srcIdx + 2]; // R
|
|
33
|
+
rgba[dstIdx + 1] = bgra[srcIdx + 1]; // G
|
|
34
|
+
rgba[dstIdx + 2] = bgra[srcIdx]; // B
|
|
35
|
+
rgba[dstIdx + 3] = bgra[srcIdx + 3]; // A
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// encode & save
|
|
39
|
+
const filename = `${uuidv4()}.png`;
|
|
40
|
+
const outPath = path.join(targetFolder, filename);
|
|
41
|
+
await sharp(rgba, {
|
|
42
|
+
raw: { width, height, channels: 4 }
|
|
43
|
+
})
|
|
44
|
+
.png()
|
|
45
|
+
.toFile(outPath);
|
|
46
|
+
return filename;
|
|
47
|
+
}
|
|
48
|
+
export async function captureScreenshotBase64(region) {
|
|
49
|
+
// Get screen size for bounds checking
|
|
50
|
+
const screenSize = robot.getScreenSize();
|
|
51
|
+
// Use region if provided, otherwise capture full screen
|
|
52
|
+
let captureX = 0;
|
|
53
|
+
let captureY = 0;
|
|
54
|
+
let captureWidth;
|
|
55
|
+
let captureHeight;
|
|
56
|
+
if (region && region.x !== undefined && region.y !== undefined && region.width && region.height) {
|
|
57
|
+
// Validate and clamp region to screen bounds, rounding to integers
|
|
58
|
+
captureX = Math.max(0, Math.min(Math.round(region.x), screenSize.width - 1));
|
|
59
|
+
captureY = Math.max(0, Math.min(Math.round(region.y), screenSize.height - 1));
|
|
60
|
+
captureWidth = Math.max(1, Math.min(Math.round(region.width), screenSize.width - captureX));
|
|
61
|
+
captureHeight = Math.max(1, Math.min(Math.round(region.height), screenSize.height - captureY));
|
|
62
|
+
// If the region is completely outside screen bounds, return early with error
|
|
63
|
+
if (captureWidth < 1 || captureHeight < 1) {
|
|
64
|
+
throw new Error(`Region is outside screen bounds: ${JSON.stringify(region)} (screen: ${screenSize.width}x${screenSize.height})`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Fallback to full screen if no region specified
|
|
69
|
+
captureWidth = screenSize.width;
|
|
70
|
+
captureHeight = screenSize.height;
|
|
71
|
+
}
|
|
72
|
+
console.log(`Capturing screenshot for base64 at (${captureX},${captureY}) ${captureWidth}x${captureHeight}`);
|
|
73
|
+
// grab the raw robotjs bitmap for the specified region
|
|
74
|
+
const bmp = robot.screen.capture(captureX, captureY, captureWidth, captureHeight);
|
|
75
|
+
const { width, height, byteWidth, bytesPerPixel, image: bgra } = bmp;
|
|
76
|
+
// allocate a tight RGBA buffer
|
|
77
|
+
const rgba = Buffer.alloc(width * height * 4);
|
|
78
|
+
// unpack row by row accounting for stride
|
|
79
|
+
for (let row = 0; row < height; row++) {
|
|
80
|
+
const rowStartSrc = row * byteWidth;
|
|
81
|
+
const rowStartDst = row * width * 4;
|
|
82
|
+
for (let col = 0; col < width; col++) {
|
|
83
|
+
const srcIdx = rowStartSrc + col * bytesPerPixel;
|
|
84
|
+
const dstIdx = rowStartDst + col * 4;
|
|
85
|
+
// BGRA → RGBA
|
|
86
|
+
rgba[dstIdx] = bgra[srcIdx + 2]; // R
|
|
87
|
+
rgba[dstIdx + 1] = bgra[srcIdx + 1]; // G
|
|
88
|
+
rgba[dstIdx + 2] = bgra[srcIdx]; // B
|
|
89
|
+
rgba[dstIdx + 3] = bgra[srcIdx + 3]; // A
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// encode to PNG buffer and convert to base64
|
|
93
|
+
const pngBuffer = await sharp(rgba, {
|
|
94
|
+
raw: { width, height, channels: 4 }
|
|
95
|
+
})
|
|
96
|
+
.png()
|
|
97
|
+
.toBuffer();
|
|
98
|
+
const base64 = pngBuffer.toString('base64');
|
|
99
|
+
const dataUrl = `data:image/png;base64,${base64}`;
|
|
100
|
+
return dataUrl;
|
|
101
|
+
}
|
|
102
|
+
export async function captureScreenshot(targetFolder, filename, region) {
|
|
103
|
+
// ensure output dir
|
|
104
|
+
await fs.mkdir(targetFolder, { recursive: true });
|
|
105
|
+
// Get screen size for bounds checking
|
|
106
|
+
const screenSize = robot.getScreenSize();
|
|
107
|
+
// Use region if provided, otherwise capture full screen
|
|
108
|
+
let captureX = 0;
|
|
109
|
+
let captureY = 0;
|
|
110
|
+
let captureWidth;
|
|
111
|
+
let captureHeight;
|
|
112
|
+
if (region && region.x !== undefined && region.y !== undefined && region.width && region.height) {
|
|
113
|
+
// Validate and clamp region to screen bounds, rounding to integers
|
|
114
|
+
captureX = Math.max(0, Math.min(Math.round(region.x), screenSize.width - 1));
|
|
115
|
+
captureY = Math.max(0, Math.min(Math.round(region.y), screenSize.height - 1));
|
|
116
|
+
captureWidth = Math.max(1, Math.min(Math.round(region.width), screenSize.width - captureX));
|
|
117
|
+
captureHeight = Math.max(1, Math.min(Math.round(region.height), screenSize.height - captureY));
|
|
118
|
+
// If the region is completely outside screen bounds, return early with error
|
|
119
|
+
if (captureWidth < 1 || captureHeight < 1) {
|
|
120
|
+
throw new Error(`Region is outside screen bounds: ${JSON.stringify(region)} (screen: ${screenSize.width}x${screenSize.height})`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Fallback to full screen if no region specified
|
|
125
|
+
captureWidth = screenSize.width;
|
|
126
|
+
captureHeight = screenSize.height;
|
|
127
|
+
}
|
|
128
|
+
console.log(`Capturing screenshot at (${captureX},${captureY}) ${captureWidth}x${captureHeight}`);
|
|
129
|
+
// grab the raw robotjs bitmap for the specified region
|
|
130
|
+
const bmp = robot.screen.capture(captureX, captureY, captureWidth, captureHeight);
|
|
131
|
+
const { width, height, byteWidth, bytesPerPixel, image: bgra } = bmp;
|
|
132
|
+
// allocate a tight RGBA buffer
|
|
133
|
+
const rgba = Buffer.alloc(width * height * 4);
|
|
134
|
+
// unpack row by row accounting for stride
|
|
135
|
+
for (let row = 0; row < height; row++) {
|
|
136
|
+
const rowStartSrc = row * byteWidth;
|
|
137
|
+
const rowStartDst = row * width * 4;
|
|
138
|
+
for (let col = 0; col < width; col++) {
|
|
139
|
+
const srcIdx = rowStartSrc + col * bytesPerPixel;
|
|
140
|
+
const dstIdx = rowStartDst + col * 4;
|
|
141
|
+
// BGRA → RGBA
|
|
142
|
+
rgba[dstIdx] = bgra[srcIdx + 2]; // R
|
|
143
|
+
rgba[dstIdx + 1] = bgra[srcIdx + 1]; // G
|
|
144
|
+
rgba[dstIdx + 2] = bgra[srcIdx]; // B
|
|
145
|
+
rgba[dstIdx + 3] = bgra[srcIdx + 3]; // A
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// encode & save
|
|
149
|
+
const outPath = path.join(targetFolder, filename);
|
|
150
|
+
await sharp(rgba, {
|
|
151
|
+
raw: { width, height, channels: 4 }
|
|
152
|
+
})
|
|
153
|
+
.png()
|
|
154
|
+
.toFile(outPath);
|
|
155
|
+
return filename;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=capturescreenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capturescreenshot.js","sourceRoot":"","sources":["../../src/inference/capturescreenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts JSON from a string or returns the object as-is
|
|
3
|
+
* @param {string|object} input - The input to process
|
|
4
|
+
* @returns {object|null} - The parsed JSON object or null if parsing fails
|
|
5
|
+
*/
|
|
6
|
+
declare function extractJSON(input: any): any;
|
|
7
|
+
/**
|
|
8
|
+
* Cleans a string to extract pure JSON
|
|
9
|
+
* @param {string} str - The string to clean
|
|
10
|
+
* @returns {string} - The cleaned JSON string
|
|
11
|
+
*/
|
|
12
|
+
declare function cleanJSONString(str: any): any;
|
|
13
|
+
/**
|
|
14
|
+
* Safe JSON extraction with fallback options
|
|
15
|
+
* @param {string|object} input - The input to process
|
|
16
|
+
* @param {object} options - Options for extraction
|
|
17
|
+
* @returns {object} - The result object
|
|
18
|
+
*/
|
|
19
|
+
declare function safeExtractJSON(input: any, options?: {
|
|
20
|
+
returnOriginalOnFail?: boolean;
|
|
21
|
+
defaultValue?: any;
|
|
22
|
+
throwOnError?: boolean;
|
|
23
|
+
}): any;
|
|
24
|
+
/**
|
|
25
|
+
* Validates if a string contains valid JSON
|
|
26
|
+
* @param {string} str - The string to validate
|
|
27
|
+
* @returns {boolean} - True if contains valid JSON
|
|
28
|
+
*/
|
|
29
|
+
declare function containsJSON(str: any): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Extracts multiple JSON objects from a string
|
|
32
|
+
* @param {string} str - The string to process
|
|
33
|
+
* @returns {array} - Array of JSON objects found
|
|
34
|
+
*/
|
|
35
|
+
declare function extractMultipleJSON(str: any): any[];
|
|
36
|
+
export { extractJSON, cleanJSONString, safeExtractJSON, containsJSON, extractMultipleJSON };
|
|
37
|
+
//# sourceMappingURL=jsonHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonHandler.d.ts","sourceRoot":"","sources":["../src/jsonHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,iBAAS,WAAW,CAAC,KAAK,KAAA,OAwBzB;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,GAAG,KAAA,OAsD3B;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CACpB,KAAK,KAAA,EACL,OAAO,GAAE;IACL,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACrB,OAuCT;AAED;;;;GAIG;AACH,iBAAS,YAAY,CAAC,GAAG,KAAA,WAYxB;AAED;;;;GAIG;AACH,iBAAS,mBAAmB,CAAC,GAAG,KAAA,SAyD/B;AAED,OAAO,EACH,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACtB,CAAA"}
|