diff --git a/modules/advancedFeatureSettings/wanAnimateAdvancedFeatureSettings.py b/modules/advancedFeatureSettings/wanAnimateAdvancedFeatureSettings.py index 0638317..6381a91 100644 --- a/modules/advancedFeatureSettings/wanAnimateAdvancedFeatureSettings.py +++ b/modules/advancedFeatureSettings/wanAnimateAdvancedFeatureSettings.py @@ -3,7 +3,7 @@ Runware Wan Animate Advanced Feature Settings Node Provides Wan Animate-specific settings for video generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareWanAnimateAdvancedFeatureSettings: """Runware Wan Animate Advanced Feature Settings Node""" diff --git a/modules/audioInference.py b/modules/audioInference.py index 363ad76..a958620 100644 --- a/modules/audioInference.py +++ b/modules/audioInference.py @@ -1,7 +1,6 @@ import uuid import requests import torch -import numpy as np import librosa import tempfile import os diff --git a/modules/audioInferenceInputs.py b/modules/audioInferenceInputs.py index 18a5838..da5c5e1 100644 --- a/modules/audioInferenceInputs.py +++ b/modules/audioInferenceInputs.py @@ -1,5 +1,5 @@ from .utils import runwareUtils as rwUtils -from typing import Dict, Any, List +from typing import Dict, Any class audioInferenceInputs: diff --git a/modules/audioInferenceSpeechVoices.py b/modules/audioInferenceSpeechVoices.py index 794749a..c7f7008 100644 --- a/modules/audioInferenceSpeechVoices.py +++ b/modules/audioInferenceSpeechVoices.py @@ -4,7 +4,6 @@ Builds speech.voices[] for multi-speaker audio inference speech payloads. """ import re -from typing import Dict, List class RunwareAudioInferenceSpeechVoices: diff --git a/modules/audioInput.py b/modules/audioInput.py index 6420d3a..ca43ecd 100644 --- a/modules/audioInput.py +++ b/modules/audioInput.py @@ -3,7 +3,7 @@ Runware Audio Input Node Creates an audio input configuration with id and source """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareAudioInput: diff --git a/modules/mediaUpload.py b/modules/mediaUpload.py index 1b4f691..ffa6fef 100644 --- a/modules/mediaUpload.py +++ b/modules/mediaUpload.py @@ -7,10 +7,10 @@ import soundfile as sf import numpy as np from io import BytesIO from .utils.runwareUtils import ( - RUNWARE_API_KEY, RUNWARE_API_BASE_URL, generalRequestWrapper, genRandUUID, + getRunwareApiHeaders, sanitize_for_logging, safe_json_dumps, sendMediaUUID, @@ -237,21 +237,13 @@ class RunwareMediaUpload: "media": mediaData, }] - def _getApiHeaders(self): - """Get API request headers""" - return { - "Authorization": f"Bearer {RUNWARE_API_KEY}", - "Content-Type": "application/json", - "Accept-Encoding": "gzip, deflate, br, zstd", - } - def _makeUploadRequest(self, uploadConfig): """Make upload request to Runware API""" def recaller(): print(f"[Debug] Making POST request to Runware API...") return requests.post( RUNWARE_API_BASE_URL, - headers=self._getApiHeaders(), + headers=getRunwareApiHeaders(), json=uploadConfig, timeout=self.REQUEST_TIMEOUT, allow_redirects=False, @@ -301,7 +293,7 @@ class RunwareMediaUpload: def recaller(): return requests.post( RUNWARE_API_BASE_URL, - headers=self._getApiHeaders(), + headers=getRunwareApiHeaders(), json=pollConfig, timeout=self.REQUEST_TIMEOUT, allow_redirects=False, diff --git a/modules/providerSettings/alibabaProviderSettings.py b/modules/providerSettings/alibabaProviderSettings.py index 9f49e2b..098f197 100644 --- a/modules/providerSettings/alibabaProviderSettings.py +++ b/modules/providerSettings/alibabaProviderSettings.py @@ -3,7 +3,7 @@ Runware Alibaba Provider Settings Node Provides Alibaba-specific settings for image/video generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareAlibabaProviderSettings: diff --git a/modules/providerSettings/blackForestProviderSettings.py b/modules/providerSettings/blackForestProviderSettings.py index 56ec3bf..b831473 100644 --- a/modules/providerSettings/blackForestProviderSettings.py +++ b/modules/providerSettings/blackForestProviderSettings.py @@ -3,7 +3,7 @@ Runware BlackForest Labs Provider Settings Node Provides BlackForest Labs-specific settings for image generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareBlackForestProviderSettings: """Runware BlackForest Labs Provider Settings Node""" diff --git a/modules/providerSettings/briaProviderMask.py b/modules/providerSettings/briaProviderMask.py index 75ab6ab..ee2c8a7 100644 --- a/modules/providerSettings/briaProviderMask.py +++ b/modules/providerSettings/briaProviderMask.py @@ -3,7 +3,7 @@ Runware Bria Provider Mask Node Creates mask configuration for Bria video eraser settings """ -from typing import Optional, Dict, Any, List +from typing import Dict, Any, List class RunwareBriaProviderMask: diff --git a/modules/providerSettings/briaProviderSettings.py b/modules/providerSettings/briaProviderSettings.py index a97dd63..c7701d7 100644 --- a/modules/providerSettings/briaProviderSettings.py +++ b/modules/providerSettings/briaProviderSettings.py @@ -3,8 +3,7 @@ Runware Bria Provider Settings Node Provides Bria-specific settings for image/video generation """ -import torch -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareBriaProviderSettings: """Runware Bria Provider Settings Node""" diff --git a/modules/providerSettings/bytedanceProviderSettings.py b/modules/providerSettings/bytedanceProviderSettings.py index f42c967..11ccde4 100644 --- a/modules/providerSettings/bytedanceProviderSettings.py +++ b/modules/providerSettings/bytedanceProviderSettings.py @@ -3,7 +3,7 @@ Runware Bytedance Provider Settings Node Provides Bytedance-specific settings for image/video generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareBytedanceProviderSettings: """Runware Bytedance Provider Settings Node""" diff --git a/modules/providerSettings/googleProviderSettings.py b/modules/providerSettings/googleProviderSettings.py index b8b4d73..c2bbaed 100644 --- a/modules/providerSettings/googleProviderSettings.py +++ b/modules/providerSettings/googleProviderSettings.py @@ -3,7 +3,7 @@ Runware Google Provider Settings Node Provides Google-specific settings for image/video generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareGoogleProviderSettings: diff --git a/modules/providerSettings/klingProviderSettings.py b/modules/providerSettings/klingProviderSettings.py index b9283d8..2015df1 100644 --- a/modules/providerSettings/klingProviderSettings.py +++ b/modules/providerSettings/klingProviderSettings.py @@ -3,7 +3,7 @@ Runware KlingAI Provider Settings Node Provides KlingAI-specific settings for video generation """ -from typing import Optional, Dict, Any, List +from typing import Dict, Any, List class RunwareKlingProviderSettings: diff --git a/modules/providerSettings/lightricksProviderSettings.py b/modules/providerSettings/lightricksProviderSettings.py index 5953335..e5ff6c5 100644 --- a/modules/providerSettings/lightricksProviderSettings.py +++ b/modules/providerSettings/lightricksProviderSettings.py @@ -3,7 +3,7 @@ Runware Lightricks Provider Settings Node Provides Lightricks-specific settings for video generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareLightricksProviderSettings: """Runware Lightricks Provider Settings Node""" diff --git a/modules/providerSettings/minimaxProviderSettings.py b/modules/providerSettings/minimaxProviderSettings.py index 07b48fd..39d699f 100644 --- a/modules/providerSettings/minimaxProviderSettings.py +++ b/modules/providerSettings/minimaxProviderSettings.py @@ -3,7 +3,7 @@ Runware MiniMax Provider Settings Node Provides MiniMax-specific settings for video generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareMiniMaxProviderSettings: """Runware MiniMax Provider Settings Node""" diff --git a/modules/providerSettings/mireloProviderSettings.py b/modules/providerSettings/mireloProviderSettings.py index ff3074a..b3c7f61 100644 --- a/modules/providerSettings/mireloProviderSettings.py +++ b/modules/providerSettings/mireloProviderSettings.py @@ -3,7 +3,7 @@ Runware Mirelo Provider Settings Node Provides Mirelo-specific settings for audio generation """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareMireloProviderSettings: diff --git a/modules/providerSettings/openaiProviderSettings.py b/modules/providerSettings/openaiProviderSettings.py index 9c20010..2fd7653 100644 --- a/modules/providerSettings/openaiProviderSettings.py +++ b/modules/providerSettings/openaiProviderSettings.py @@ -1,4 +1,3 @@ -from ..utils import runwareUtils as rwUtils class RunwareOpenAIProviderSettings: diff --git a/modules/providerSettings/pixverseProviderSettings.py b/modules/providerSettings/pixverseProviderSettings.py index 15e43ea..aff763d 100644 --- a/modules/providerSettings/pixverseProviderSettings.py +++ b/modules/providerSettings/pixverseProviderSettings.py @@ -1,4 +1,3 @@ -from ..utils import runwareUtils as rwUtils class RunwarePixverseProviderSettings: diff --git a/modules/providerSettings/sourcefulProviderSettings.py b/modules/providerSettings/sourcefulProviderSettings.py index 068a314..63d5545 100644 --- a/modules/providerSettings/sourcefulProviderSettings.py +++ b/modules/providerSettings/sourcefulProviderSettings.py @@ -3,7 +3,7 @@ Runware Sourceful Provider Settings Node Provides Sourceful-specific settings for image generation (providerSettings.sourceful.*) """ -from typing import Dict, Any, List +from typing import Dict, Any class RunwareSourcefulProviderSettings: diff --git a/modules/providerSettings/syncProviderSettings.py b/modules/providerSettings/syncProviderSettings.py index f81cf80..98bcbd7 100644 --- a/modules/providerSettings/syncProviderSettings.py +++ b/modules/providerSettings/syncProviderSettings.py @@ -3,7 +3,7 @@ Runware Sync Provider Settings Node Provides Sync-specific settings for video generation with lip-sync capabilities """ -from typing import Optional, Dict, Any, List +from typing import Dict, Any, List class RunwareSyncProviderSettings: diff --git a/modules/providerSettings/syncSegment.py b/modules/providerSettings/syncSegment.py index 460afdb..0f412c2 100644 --- a/modules/providerSettings/syncSegment.py +++ b/modules/providerSettings/syncSegment.py @@ -3,7 +3,7 @@ Runware Sync Segment Node Creates a sync segment configuration for sync provider settings """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareSyncSegment: diff --git a/modules/providerSettings/viduProviderSettings.py b/modules/providerSettings/viduProviderSettings.py index 283540f..a3f14c6 100644 --- a/modules/providerSettings/viduProviderSettings.py +++ b/modules/providerSettings/viduProviderSettings.py @@ -1,4 +1,3 @@ -from ..utils import runwareUtils as rwUtils class RunwareViduProviderSettings: @classmethod diff --git a/modules/safetyInputs.py b/modules/safetyInputs.py index 5e9c54a..1e2b230 100644 --- a/modules/safetyInputs.py +++ b/modules/safetyInputs.py @@ -1,4 +1,4 @@ -from typing import Optional, Dict, Any +from typing import Dict, Any class safetyInputs: diff --git a/modules/speechInput.py b/modules/speechInput.py index 84ab6c9..0a4f424 100644 --- a/modules/speechInput.py +++ b/modules/speechInput.py @@ -3,7 +3,7 @@ Runware Speech Input Node Creates a speech input configuration with TTS provider settings """ -from typing import Optional, Dict, Any +from typing import Dict, Any class RunwareSpeechInput: diff --git a/modules/speechInputCombine.py b/modules/speechInputCombine.py index 041d38d..14094c1 100644 --- a/modules/speechInputCombine.py +++ b/modules/speechInputCombine.py @@ -3,7 +3,6 @@ Runware Speech Input Combine Node Combines multiple speech inputs into a list """ -from typing import List, Dict, Any class RunwareSpeechInputCombine: diff --git a/modules/utils/runwareUtils.py b/modules/utils/runwareUtils.py index 0c97b0f..d16c907 100644 --- a/modules/utils/runwareUtils.py +++ b/modules/utils/runwareUtils.py @@ -20,8 +20,27 @@ import io import threading import re +from ..version import __version__ + load_dotenv() +def getRunwareApiHeaders(include_auth=True): + headers = { + "Content-Type": "application/json", + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, br, zstd", + "X-SDK-Name": "comfyui", + "X-SDK-Version": __version__, + } + if include_auth: + api_key = getAPIKey() + if not api_key: + raise Exception( + "Runware API key is not configured. Add your API key in the Runware API Manager node." + ) + headers["Authorization"] = f"Bearer {api_key}" + return headers + BASEFOLDER = Path(__file__).parent.parent.parent IMAGE_CACHE_FILE = BASEFOLDER / "imagesCache.json" @@ -250,12 +269,7 @@ def getOrdinal(num): return ordinals.get(num, f"{num}th") def checkAPIKey(apiKey): - headers = { - "Accept": "application/json", - "Content-Type": "application/json", - "Accept-Encoding": "gzip, deflate, br, zstd", - } - + headers = getRunwareApiHeaders(include_auth=False) genConfig = [ { "taskType": "authentication", @@ -359,11 +373,7 @@ def inferenecRequest(genConfig): global RUNWARE_API_KEY, RUNWARE_API_BASE_URL, SESSION_TIMEOUT RUNWARE_API_KEY = os.getenv("RUNWARE_API_KEY") SESSION_TIMEOUT = int(os.getenv("RUNWARE_TIMEOUT")) - headers = { - "Authorization": f"Bearer {RUNWARE_API_KEY}", - "Content-Type": "application/json", - "Accept-Encoding": "gzip, deflate, br, zstd", - } + headers = getRunwareApiHeaders() try: def recaller(): @@ -720,11 +730,7 @@ def pollVideoResult(taskUUID): } ] - headers = { - "Authorization": f"Bearer {RUNWARE_API_KEY}", - "Content-Type": "application/json", - "Accept-Encoding": "gzip, deflate, br, zstd", - } + headers = getRunwareApiHeaders() try: def recaller(): diff --git a/modules/version.py b/modules/version.py new file mode 100644 index 0000000..17ecd62 --- /dev/null +++ b/modules/version.py @@ -0,0 +1 @@ +__version__ = "1.8.6" diff --git a/modules/videoAdvancedFeatureInputs.py b/modules/videoAdvancedFeatureInputs.py index c23be82..6c613cf 100644 --- a/modules/videoAdvancedFeatureInputs.py +++ b/modules/videoAdvancedFeatureInputs.py @@ -1,4 +1,4 @@ -from typing import Optional, Dict, Any +from typing import Dict, Any class videoAdvancedFeatureInputs: """Runware Video Advanced Feature Inputs Node""" diff --git a/modules/videoInference.py b/modules/videoInference.py index 8151f9b..747719e 100644 --- a/modules/videoInference.py +++ b/modules/videoInference.py @@ -1,5 +1,4 @@ from .utils import runwareUtils as rwUtils -from .videoModelSearch import videoModelSearch import comfy.model_management diff --git a/modules/videoInferenceInputs.py b/modules/videoInferenceInputs.py index 79f8f31..8267f0d 100644 --- a/modules/videoInferenceInputs.py +++ b/modules/videoInferenceInputs.py @@ -1,5 +1,4 @@ from .utils import runwareUtils as rwUtils -from typing import List class videoInferenceInputs: diff --git a/modules/videoInferenceSettingsActiveSpeakerBoundingBoxes.py b/modules/videoInferenceSettingsActiveSpeakerBoundingBoxes.py index 3de117c..c62e2e9 100644 --- a/modules/videoInferenceSettingsActiveSpeakerBoundingBoxes.py +++ b/modules/videoInferenceSettingsActiveSpeakerBoundingBoxes.py @@ -4,7 +4,6 @@ Builds settings.activeSpeakerDetection.boundingBoxes for Sync models. Each element is [x1, y1, x2, y2] or null. Up to 4 elements. """ -from typing import Dict, Any def _parse_box(raw: str, label: str):