How to use FAI SDK : https://pypi.org/project/fai-gensdk/

In order to use our SDK module you first need to log in or sign up to our dashboard and buy some credits : https://api-dashboard.fotographer.ai/login.html

Once you are authenticated with your api key visible in your dashboard, please proceed with the installation of our sdk module

API dashboard : https://api-dashboard.fotographer.ai/login.html

Installation

Install the SDK using pip:


pip install fai-gensdk

Note : when sending a request, please make sure to update your_api_key and [email protected] with the actual values in the example usage section.

Usage of InstantLight (relight your image by specifying the type of light you want and it’s placement)

1 credit / call

Here’s an example of how to use the InstantLight SDK to make an API call and handle the response:


from InstantLight import InstantLightSDK
from PIL import Image
import base64
from io import BytesIO

# Initialize the SDK
sdk = InstantLightSDK(
    base_url='<https://api.fotographer.ai/instantLight>',
    api_key='your_api_key',
    email='[email protected]'
)

# Convert images to base64
def image_to_base64(image_path):
    with Image.open(image_path) as img:
        buffered = BytesIO()
        img.save(buffered, format="PNG")
        return base64.b64encode(buffered.getvalue()).decode('utf-8')

# Prepare the image data
foreground_image64 = image_to_base64('path_to_foreground_image.png')
background_image64 = image_to_base64('path_to_background_image.png')

# Example mode 0: Edit Light With a Prompt
# Mode 0 is used to edit the light in an image using a prompt.
image_data_mode_0 = {
    "foreground_image64": foreground_image64,
    "background_image64": background_image64,
    "prompt": "neon light",
    "mode": 0,
    "prompt_strength": 3.0,
    "inf_factor": 1.00,
    "mask_strength": 0.5,
    "image_width": 1400,
    "image_height": 1400,
    "additional_prompt": "",
    "negative_prompt": "",
    "lights": []  # Specify the lighting parameters as needed
}

# Example mode 1: Edit Light With a Prompt
# Mode 1 is used to edit the light in an image using a prompt.
image_data_mode_1 = {
    "foreground_image64": foreground_image64,
    "background_image64": background_image64,
    "prompt": "neon light",
    "mode": 1,
    "prompt_strength": 3.0,
    "inf_factor": 1.00,
    "mask_strength": 0.5,
    "image_width": 1400,
    "image_height": 1400,
    "additional_prompt": "",
    "negative_prompt": "",
    "lights": []  # Specify the lighting parameters as needed
}

# Example mode 2: Edit Light and Change Background
# Mode 2 is used to edit the light and change the background of an image.
image_data_mode_2 = {
    "foreground_image64": foreground_image64,
    "background_image64": background_image64,
    "prompt": "sunset background",
    "mode": 2,
    "prompt_strength": 3.0,
    "inf_factor": 1.00,
    "mask_strength": 0.5,
    "image_width": 1400,
    "image_height": 1400,
    "additional_prompt": "",
    "negative_prompt": "",
    "lights": []  # Specify the lighting parameters as needed
}

# Select the desired mode for the example
image_data = image_data_mode_2

# Make the API call
response = sdk.image_generation.get_image_gen(image_data)

# Print the response keys for debugging
print("Response Keys:", response.keys())

# Print the keys at all levels of the response for debugging
for key, value in response.items():
    if isinstance(value, dict):
        print(f"Response[{key}] Keys: {value.keys()}")

# Save the image and mask image if they exist in the response
if 'image' in response:
    image_data = response['image']
    image_bytes = base64.b64decode(image_data)
    image = Image.open(BytesIO(image_bytes))
    image.save("output_image.png")
    print("Image retrieved and saved as output_image.png.")
    
    if 'mask_image' in response:
        mask_data = response['mask_image']
        mask_bytes = base64.b64decode(mask_data)
        mask_image = Image.open(BytesIO(mask_bytes))
        mask_image.save("output_mask_image.png")
        print("Mask retrieved and saved as output_mask_image.png.")
else:
    print("Response does not contain 'image'")

Make sure to update your_api_key and [email protected] with the actual values in the example usage section.

Usage of ImageGen (generate AI product photography for your product using our model)

1 credit / call


from FAImageGen import ImageGen as FAImageGenSDK
from PIL import Image
import base64
from io import BytesIO

# Initialize the SDK API
api = FAImageGenSDK(
    base_url='<https://api.fotographer.ai/Image-gen>',
    api_key='your_api_key',
    email='[email protected]'
)

# Convert images to base64
def image_to_base64(image_path):
    with Image.open(image_path) as img:
        buffered = BytesIO()
        img.save(buffered, format="PNG")
        return base64.b64encode(buffered.getvalue()).decode('utf-8')

# Prepare the image data
image_path = 'path_to_foreground_image.png'
prompt = 'a black perfume bottle on top of mountain in front of the sea'

try:
    # Make the API call
    response = api.image_generation.get_image_gen(image_path, prompt)

    # Print the response keys for debugging
    # logging.debug("Response Keys: %s", response.keys())

    # Print the keys at all levels of the response for debugging
    for key, value in response.items():
        if isinstance(value, dict):
            logging.debug(f"Response[{key}] Keys: %s", value.keys())

    # Save the image and mask image if they exist in the response
    if 'image' in response:
        logging.debug("Success")
    else:
        logging.debug("Response does not contain 'image'")
except requests.exceptions.RequestException as e:
    logging.error(f"HTTP error occurred: {e}")
    if hasattr(e, 'response') and e.response is not None:
        logging.error(f"Response content: {e.response.content}")
except Exception as e:
    logging.error("An unexpected error occurred: %s", e)

Usage of Fuzer v0.1 : https://huggingface.co/spaces/fotographerai/Fai-Fuzer