An open API service indexing awesome lists of open source software.

https://github.com/raupulus/python-ai-image-from-api-generator


https://github.com/raupulus/python-ai-image-from-api-generator

Last synced: 10 months ago
JSON representation

Awesome Lists containing this project

README

          

# Python AI Image generator from apis with autogenerated prompt

## Descripción

Herramienta para generar "prompts" que son básicamente cadenas de texto indicando/describiendo
una imagen.
Posteriormente se pueden utilizar varias API con las que utilizar ese "prompt" generado.

Para generar el prompt, se utiliza la api de GPT.

En el directorio "Tuning" se encuentran los ejemplos para poner en contexto a GPT cuando le pedimos datos.

Esperamos que GPT devuelva una cadena compatible con JSON que contenga estas claves:

- title: Contexto general de la imagen, también usado para el nombre del directorio.
- description: Descripción con detalles de la imagen.
- metatags: Etiquetas separadas por comas indicando lo más relevante sobre la imagen.

## Dependencias

El listado de dependencias se encuentra en el archivo **requeriments.txt**

## Modo de uso

Primero necesitas configurar las variables de entorno.

Copia el archivo **.env.example** a **.env** y rellena los datos para conectar a la API tras generarlos en tu panel.

Una vez tengas las variables de entorno seteadas, puedes ejecutar el script de la siguiente forma para generar 10 imágenes a 256x256 con Stable Diffusion:

```bash
python main.py 10 1024x576 --stable-diffusion
```

Y en este ejemplo usando la api de OpenAi con Dall-e:

```bash
python main.py 10 256x256 --dalle
```

Como puedes observar, el script recibe **cantidad** de imágenes, luego **tamaño** y la **api** con la que generarlos.

Una vez generado un lote de imágenes podemos observar que en el directorio se incluyen dos archivos con información.
Uno de estos archivos está en markdown **info.md** y otro con los datos en json **info.json** para poder reutilizar esos metadatos en otras aplicaciones.

Nota: No puedes usar varias apis a la vez, se tomará la primera e ignorará las demás. No es compatible con generación multi-api en paralelo.

### Solo crear CSV con un listado de prompts

Podemos generar un listado de promtps con la estructura:

Al script principal, le pasaremos el argumento **--only-prompts** y esto deshabilitará automáticamente generar imágenes. Es decir, solo vamos a generar un listado de prompts en el directorio **output** con el nombre **batch_prompts.csv**

Necesitamos pasar obligatoriamente una cantidad de prompts a generar como en el siguiente ejemplo para 10 prompts

```bash
python3 main.py 10 --only-prompts
```

Veremos tras ejecutar que hay un nuevo archivo dentro de "output" con los datos en csv.

Si ejecutamos varias veces el comando, los datos se van añadiendo al archivo sin borrar los anteriores. Se agregan al listado existente.

## Directorios

- Data: Almacena parámetros para sugerir tema, elementos y entorno sobre la imagen que pediremos a chatgpt describirnos.
- Models: Contiene los Modelos para conectar a las api y selector de roles.
- output: Aquí se almacena la salida, al generar imágenes quedarán aquí agrupadas en un directorio. También se guarda el csv cuando generamos un listado de prompts solamente.
- tuning: Archivos JSONL con distintas respuestas json (una por línea) para poner en contexto a GPT cuando le pidamos datos. En estos archivos exponemos respuestas tal y como nos gustaría que lo haga GPT desde la API.

## Tareas pendientes -> TODO

- [] Implementar entrada (inputs/prompts.jsonl) para obtener los datos de aquí en lugar de la api de GPT
- [] Añadir tipos de renders en los proveedores de datos para los roles (pixar, octane, unity...)
- [] Dividir proveedores de datos para distinguir sobre todo en fotografías el realismo (quitar 2d, 3d, renders...), animales y personas (prevenir deformaciones, sobre todo de cara). Es decir: Crear varios provider de fotografos para personas/animales/paisajes/general
- [] Implementar entorno virtual para python
- [] Implementar personalización de modelos para cada data provider en los roles usando variables de entorno. La idea es poder modificar este parámetro sin editar archivos con seguimientos en git tal como se hace actualmente. En este momento para cambiar un modelo enviado a la api txt2img hay que editar su archivo dentro del directorio "Data" y cambiar el valor de "model" en el proveedor.