Skip to content

Commit 3ef2db7

Browse files
committed
Added support for layerDiffuse, hiresFix, and watermark
1 parent 9df0226 commit 3ef2db7

2 files changed

Lines changed: 40 additions & 19 deletions

File tree

runware/base.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2063,6 +2063,8 @@ async def _requestVideo(self, requestVideo: "IVideoInference") -> "Union[List[IV
20632063
await self._processVideoImages(requestVideo)
20642064
requestVideo.taskUUID = requestVideo.taskUUID or getUUID()
20652065
request_object = self._buildVideoRequest(requestVideo)
2066+
import json
2067+
print(f"request_object: {json.dumps(request_object, indent=4)}")
20662068

20672069
if requestVideo.webhookURL:
20682070
request_object["webhookURL"] = requestVideo.webhookURL
@@ -2462,15 +2464,7 @@ def _addImageSpecialFields(self, request_object: Dict[str, Any], requestImage: I
24622464

24632465
# Add acceleratorOptions if present
24642466
self._addOptionalField(request_object, requestImage.acceleratorOptions)
2465-
2466-
# Add advancedFeatures if present
2467-
if requestImage.advancedFeatures:
2468-
pipeline_options_dict = {
2469-
k: v.__dict__
2470-
for k, v in vars(requestImage.advancedFeatures).items()
2471-
if v is not None
2472-
}
2473-
request_object["advancedFeatures"] = pipeline_options_dict
2467+
self._addOptionalField(request_object, requestImage.advancedFeatures)
24742468

24752469
# Add extraArgs if present
24762470
if hasattr(requestImage, "extraArgs") and isinstance(requestImage.extraArgs, dict):

runware/types.py

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -472,14 +472,24 @@ def request_key(self) -> str:
472472

473473

474474
@dataclass
475-
class IFluxKontext:
475+
class IFluxKontext(SerializableMixin):
476476
guidanceEndStep: Optional[int] = None
477477
guidanceEndStepPercentage: Optional[float] = None
478478

479+
@property
480+
def request_key(self) -> str:
481+
return "fluxKontext"
482+
479483

480484
@dataclass
481-
class IAdvancedFeatures:
485+
class IAdvancedFeatures(SerializableMixin):
482486
fluxKontext: Optional[IFluxKontext] = None
487+
layerDiffuse: Optional[bool] = None
488+
hiresfix: Optional[bool] = None
489+
490+
@property
491+
def request_key(self) -> str:
492+
return "advancedFeatures"
483493

484494

485495
@dataclass
@@ -495,6 +505,20 @@ def request_key(self) -> str:
495505

496506
VideoAdvancedFeatureTypes = IWanAnimate
497507

508+
@dataclass
509+
class IWatermark(SerializableMixin):
510+
text: Optional[str] = None
511+
image: Optional[str] = None
512+
displayPosition: Optional[str] = None
513+
tiled: Optional[bool] = None
514+
opacity: Optional[float] = None
515+
fontColor: Optional[str] = None
516+
bgColor: Optional[str] = None
517+
518+
@property
519+
def request_key(self) -> str:
520+
return "watermark"
521+
498522

499523
@dataclass
500524
class IVideoAdvancedFeatures(SerializableMixin):
@@ -505,20 +529,23 @@ class IVideoAdvancedFeatures(SerializableMixin):
505529
audioNegativePrompt: Optional[str] = None
506530
slgLayer: Optional[int] = None
507531
advancedFeature: Optional[VideoAdvancedFeatureTypes] = None
532+
watermark: Optional[IWatermark] = None
508533

509534
@property
510535
def request_key(self) -> str:
511536
return "advancedFeatures"
512537

513538
def serialize(self) -> Dict[str, Any]:
514-
result = {k: v for k, v in asdict(self).items()
515-
if v is not None and not k.startswith('_')}
516-
517-
518-
if self.advancedFeature:
519-
result.pop('advancedFeature', None)
520-
result.update(self.advancedFeature.to_request_dict())
521-
539+
result: Dict[str, Any] = {}
540+
for k, v in vars(self).items():
541+
if v is None or k.startswith("_"):
542+
continue
543+
if isinstance(v, SerializableMixin):
544+
result.update(v.to_request_dict())
545+
elif isinstance(v, (list, tuple)) and v and all(isinstance(x, SerializableMixin) for x in v):
546+
result[k] = [x.serialize() for x in v]
547+
else:
548+
result[k] = v
522549
return result
523550

524551

0 commit comments

Comments
 (0)