Diffusers documentation
PRX Pixel
PRX Pixel
PRXPixel es un modelo de generación de texto a imagen en el espacio de píxeles de Photoroom. Un PRXTransformer2DModel de ~7B desruidifica imágenes RGB crudas directamente: no se necesita un VAE. El modelo se condiciona con un codificador de texto Qwen3-VL y utiliza flow matching, donde el transformer predice la imagen limpia en cada paso (x-prediction). La resolución de generación se introduce en la modulación del timestep para que el modelo sea consciente del tamaño objetivo.
Modelos disponibles
| Modelo | Resolución | Descripción | Parámetros sugeridos | dtype recomendado |
|---|---|---|---|---|
Photoroom/prxpixel-t2i | 1024 | Modelo de espacio de píxeles ~7B con codificador de texto Qwen3-VL | 28 pasos, cfg=5.0 | torch.bfloat16 |
Carga del pipeline
PRXPixelPipeline requiere transformers >= 4.57 (la versión que introdujo Qwen3VLTextModel). Cargalo con from_pretrained():
import torch
from diffusers import PRXPixelPipeline
pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "A front-facing portrait of a lion in the golden savanna at sunset."
image = pipe(prompt, num_inference_steps=28, guidance_scale=5.0).images[0]
image.save("prxpixel_output.png")Optimización de memoria
Para entornos con limitaciones de memoria:
import torch
from diffusers import PRXPixelPipeline
pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", dtype=torch.bfloat16)
pipe.enable_model_cpu_offload()
# Or use sequential CPU offload for even lower memory
pipe.enable_sequential_cpu_offload()PRXPixelPipeline
clase diffusers.PRXPixelPipeline
< source >( transformer: PRXTransformer2DModelscheduler: FlowMatchEulerDiscreteSchedulertext_encoder: PreTrainedModeltokenizer: transformers.models.auto.tokenization_auto.AutoTokenizer | transformers.tokenization_utils_base.PreTrainedTokenizerBasedefault_sample_size: int | None = 1024prompt_max_tokens: int = 256noise_scale: float = 2.0 )
Parámetros
- transformer (
PRXTransformer2DModel) — El denoiser PRX de ~7B parámetros. Para PRXPixel se construye conin_channels=3, un cuello de botellaimg_inyresolution_embeds=True, y se entrena para predecir la imagen limpiax0. - scheduler (FlowMatchEulerDiscreteScheduler) — Programador de flujo de correspondencia (flow-matching) utilizado para desruidar los latentes (en el espacio de píxeles).
- text_encoder (
PreTrainedModel) — El backbone de texto de Qwen3-VL utilizado para codificar los prompts (la torre de visión se descarta). Debe devolver unlast_hidden_state. - tokenizer (
PreTrainedTokenizerBase) — Tokenizer paratext_encoder(generalmente cargado medianteAutoTokenizer). - default_sample_size (
int, opcional, valor predeterminado 1024) — Altura/ancho predeterminados utilizados cuando no se proporciona ninguno a__call__. - prompt_max_tokens (
int, opcional, valor predeterminado 256) — Número de tokens de texto al que se rellena o trunca el prompt antes de codificarlo. - noise_scale (
float, opcional, valor predeterminado 2.0) — Escala aplicada al ruido gaussiano inicial. PRXPixel se entrena con una escala de ruido inicial no unitaria, por lo que la muestreo debe comenzar desderandn * noise_scale.
Pipeline para la generación de imágenes a partir de texto con el modelo PRXPixel.
PRXPixel es una pipeline independiente de texto a imagen en el espacio de píxeles. Ruidifica directamente el RGB crudo con un PRXTransformer2DModel de ~7B parámetros y no tiene VAE (la generación ocurre por completo en el espacio de píxeles, por lo que la salida desruidada es la imagen). Los prompts se codifican con un codificador de texto Qwen3-VL (la torre de visión se descarta). A diferencia de PRXPipeline, el transformer se entrena con x-predicción: en cada paso predice la imagen limpia x0, que se convierte en una velocidad de flow-matching antes del paso del scheduler. El muestreo comienza desde randn * noise_scale (noise_scale=2.0 por defecto) y la resolución predeterminada es de 1024px.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)
Ejemplos:
>>> import torch
>>> from diffusers import PRXPixelPipeline
>>> pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A front-facing portrait of a lion in the golden savanna at sunset."
>>> image = pipe(prompt, num_inference_steps=28, guidance_scale=5.0).images[0]
>>> image.save("prxpixel_output.png")__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str = ''height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 28timesteps: list = Noneguidance_scale: float = 4.0num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneprompt_attention_mask: typing.Optional[torch.BoolTensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.BoolTensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueuse_resolution_binning: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents'] ) → PRXPipelineOutput or tuple
Parámetros
- prompt (
strolist[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasarprompt_embedsen su lugar. - negative_prompt (
str, opcional, valor predeterminado"") — El prompt o prompts que no deben guiar la generación de la imagen. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - height (
int, opcional, valor predeterminadodefault_sample_size) — La altura en píxeles de la imagen generada. - width (
int, opcional, valor predeterminadodefault_sample_size) — El ancho en píxeles de la imagen generada. - num_inference_steps (
int, opcional, valor predeterminado 28) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta. - timesteps (
list[int], opcional) — Pasos de tiempo personalizados para usar en el proceso de desruido con programadores que admiten un argumentotimestepsen su métodoset_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pasenum_inference_steps. Debe estar en orden descendente. - guidance_scale (
float, opcional, valor predeterminado 4.0) — Escala de guía definida en Classifier-Free Diffusion Guidance.guidance_scalese define comowde la ecuación 2 del Imagen Paper. La escala de guía se habilita estableciendoguidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas alpromptde texto, generalmente a costa de una menor calidad de imagen. - num_images_per_prompt (
int, opcional, valor predeterminado 1) — El número de imágenes que se generarán por indicación. - generator (
torch.Generatorolist[torch.Generator], opcional) — Un generador o una lista de generadores de torch para hacer la generación determinista. - latents (
torch.Tensor, opcional) — Latentes ruidosos pregenerados, muestreados de una distribución gaussiana, que se usarán como entradas para la generación de imágenes. Se pueden utilizar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se generará un tensor de latentes mediante muestreo usando elgeneratoraleatorio suministrado. - prompt_embeds (
torch.FloatTensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - negative_prompt_embeds (
torch.FloatTensor, opcional) — Incrustaciones de texto negativas pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporcionan yguidance_scale > 1, se generarán incrustaciones negativas a partir de una cadena vacía. - prompt_attention_mask (
torch.BoolTensor, opcional) — Máscara de atención pregenerada paraprompt_embeds. Si no se proporciona, la máscara de atención se generará a partir del argumento de entradaprompt. - negative_prompt_attention_mask (
torch.BoolTensor, opcional) — Máscara de atención pregenerada paranegative_prompt_embeds. Si no se proporciona yguidance_scale > 1, se generará la máscara de atención a partir de una cadena vacía. - output_type (
str, opcional, valor predeterminado"pil") — El formato de salida de la imagen generada. Elija entre PIL:PIL.Image.Imageonp.array. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver un PRXPipelineOutput en lugar de una tupla simple. - use_resolution_binning (
bool, opcional, valor predeterminadoTrue) — Si se establece enTrue, la altura y el ancho solicitados se mapean primero a las resoluciones más cercanas utilizando bins de relación de aspecto predefinidos. Después de que los latentes generados se decodifican en imágenes, se redimensionan de nuevo a la resolución solicitada. Útil para generar imágenes no cuadradas en resoluciones óptimas. - callback_on_step_end (
Callable, opcional) — Una función que se llama al final de cada paso de desruido durante la inferencia. La función se llama con los siguientes argumentos:callback_on_step_end(self, step, timestep, callback_kwargs).callback_kwargsincluirá una lista de todos los tensores especificados porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opcional) — La lista de entradas de tensor para la funcióncallback_on_step_end. Los tensores especificados en la lista se pasarán como argumentocallback_kwargs. Solo podrá incluir tensores que estén listados en el atributo._callback_tensor_inputs.
Devuelve
PRXPipelineOutput o tuple
PRXPipelineOutput si return_dict es
True, de lo contrario una `tuple. Al devolver una tupla, el primer elemento es una lista con las imágenes generadas.
Función invocada al llamar a la pipeline para la generación.
Ejemplos:
>>> import torch
>>> from diffusers import PRXPixelPipeline
>>> pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A front-facing portrait of a lion in the golden savanna at sunset."
>>> image = pipe(prompt, num_inference_steps=28, guidance_scale=5.0).images[0]
>>> image.save("prxpixel_output.png")check_inputs
< source >( prompt: str | list[str]height: intwidth: intguidance_scale: floatcallback_on_step_end_tensor_inputs: list[str] | None = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = None )
Comprueba que todas las entradas estén en el formato correcto.
encode_prompt
< source >( prompt: str | list[str]device: typing.Optional[torch.device] = Nonedo_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneprompt_attention_mask: typing.Optional[torch.BoolTensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.BoolTensor] = Nonetokenizer_max_length: int | None = Noneskip_text_cleaning: bool = False )
Codifica el prompt de texto usando el codificador y el tokenizador de texto estándar, o usa embeddings precalculados.
prepare_latents
< source >( batch_size: intnum_channels_latents: intheight: intwidth: intdtype: dtypedevice: devicegenerator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = None )
Prepara los latentes iniciales para el proceso de difusión.
PRXPixel se entrena con una escala de ruido inicial no unitaria, por lo que el ruido muestreado se multiplica por self.config.noise_scale.
PRXPipelineOutput
clase diffusers.pipelines.prx.PRXPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Clase de salida para las tuberías de PRX.