Spaces:
Runtime error
Runtime error
| import torch | |
| class Emphasis: | |
| name: str = "Base" | |
| description: str = "" | |
| tokens: list[list[int]] | |
| multipliers: torch.Tensor | |
| z: torch.Tensor | |
| def after_transformers(self): | |
| pass | |
| class EmphasisNone(Emphasis): | |
| name = "None" | |
| description = "disable the mechanism entirely and treat (:.1.1) as literal characters" | |
| class EmphasisIgnore(Emphasis): | |
| name = "Ignore" | |
| description = "treat all empasised words as if they have no emphasis" | |
| class EmphasisOriginal(Emphasis): | |
| name = "Original" | |
| description = "the original emphasis implementation" | |
| def after_transformers(self): | |
| original_mean = self.z.mean() | |
| self.z = self.z * self.multipliers.reshape(self.multipliers.shape + (1,)).expand(self.z.shape) | |
| new_mean = self.z.mean() | |
| self.z = self.z * (original_mean / new_mean) | |
| class EmphasisOriginalNoNorm(EmphasisOriginal): | |
| name = "No norm" | |
| description = "same as original, but without normalization (seems to work better for SDXL)" | |
| def after_transformers(self): | |
| self.z = self.z * self.multipliers.reshape(self.multipliers.shape + (1,)).expand(self.z.shape) | |
| def get_current_option(emphasis_option_name): | |
| return next(iter([x for x in options if x.name == emphasis_option_name]), EmphasisOriginal) | |
| def get_options_descriptions(): | |
| return ", ".join(f"{x.name}: {x.description}" for x in options) | |
| options = [ | |
| EmphasisNone, | |
| EmphasisIgnore, | |
| EmphasisOriginal, | |
| EmphasisOriginalNoNorm, | |
| ] | |