Skip to content

rohitaryal/whisk-api

Repository files navigation

whisk-api

Unofficial free reverse engineered API for Google's Whisk from labs.google.

Banner

Installation

npm i -g @rohitaryal/whisk-api
# or
bun i -g @rohitaryal/whisk-api

Features

  1. Text to Image using IMAGEN_3_5
  2. Image to Video (Animation) using VEO
  3. Image Refinement (Editing/Inpainting using NanoBanana)
  4. Image to Text
  5. Project & Media Management
  6. Command line support

Usage

whisk can be invoked through both command line and as a module.

Command Line

Make sure you have:

  1. Installed whisk-api globally (How to install?)

  2. Obtained your google account cookies (How to get cookies?)

  3. Set env variable COOKIE containing your cookie

    Bash:

    export COOKIE="__YOUR__COOKIE__HERE__"

    Command Prompt:

    set "COOKIE=__YOUR__COOKIE__HERE__"

    Powershell:

    $COOKIE = "__YOUR__GOOGLE__COOKIE__HERE__"

Basic Usages

NOTE: If you are using environment variables, keep the quotes around cookie to avoid word-splitting and authentication errors.

  • Linux/macOS: "$COOKIE"
  • PowerShell: "$env:COOKIE"
  • Command Prompt: "%COOKIE%"
  • Generating image with prompt

    # saves generated image at ./output/ by default
    whisk generate --prompt "A bad friend" --cookie "$COOKIE"
  • Selecting a specific aspect ratio

    # Available: SQUARE, PORTRAIT, LANDSCAPE (Default: LANDSCAPE)
    whisk generate --prompt "Reptillian CEO" --aspect "PORTRAIT" --cookie "$COOKIE"
  • Animating an existing image (Image to Video)

    # Requires the Media ID of a LANDSCAPE image
    whisk animate "__MEDIA__ID__HERE__" --script "Camera pans slowly to the left" --cookie "$COOKIE"
  • Refining (Editing) an image

    whisk refine "__MEDIA__ID__HERE__" --prompt "Add a red hat to the character" --cookie "$COOKIE"
  • Generating caption from a local image file

    whisk caption --file /path/to/img.webp --count 3 --cookie "$COOKIE"
  • Deleting media from the cloud

    whisk delete "__MEDIA__ID__HERE__" --cookie "$COOKIE"

Full generation help:

whisk generate <options>

Options:
      --version     Show version number
  -h, --help        Show help
  -p, --prompt      Description of the image
  -m, --model       Image generation model (Default: IMAGEN_3_5)
  -a, --aspect      Aspect ratio (SQUARE, PORTRAIT, LANDSCAPE)
  -s, --seed        Seed value (0 for random)
  -d, --dir         Output directory
  -c, --cookie      Google account cookie

Full animation help:

whisk animate <mediaId>

Positionals:
  mediaId  The ID of the image to animate

Options:
  -s, --script    Prompt/Script for the video animation
  -m, --model     Video generation model (Default: VEO_FAST_3_1)
  -d, --dir       Output directory
  -c, --cookie    Google account cookie

Full fetch help:

whisk fetch <mediaId>

Positionals:
  mediaId  Unique ID of generated media

Options:
  -d, --dir      Output directory
  -c, --cookie   Google account cookie
Importing as module
  • Basic image generation

    import { Whisk } from "@rohitaryal/whisk-api";
    
    const whisk = new Whisk(process.env.COOKIE);
    
    // 1. Create a project context
    const project = await whisk.newProject("My Project");
    
    // 2. Generate image
    const media = await project.generateImage("A big black cockroach");
    
    // 3. Save to disk
    const savedPath = media.save("./output");
    console.log("[+] Image saved at: " + savedPath);
  • Advanced Workflow (Gen -> Refine -> Animate)

    import { Whisk, ImageAspectRatio } from "@rohitaryal/whisk-api";
    
    const whisk = new Whisk(process.env.COOKIE);
    const project = await whisk.newProject("Video Workflow");
    
    // 1. Generate Base Image (Must be LANDSCAPE for video)
    const baseImage = await project.generateImage({
        prompt: "A cybernetic city",
        aspectRatio: "IMAGE_ASPECT_RATIO_LANDSCAPE"
    });
    
    // 2. Refine (Edit)
    const refinedImage = await baseImage.refine("Make it raining neon rain");
    
    // 3. Animate (Video)
    const video = await refinedImage.animate("Camera flies through the streets", "VEO_FAST_3_1");
    
    video.save("./videos");

More examples are at: /examples

Help

How to extract cookies?

Easy way

  1. Install Cookie Editor extension in your browser.
  2. Open labs.google, make sure you are logged in
  3. Click on Cookie Editor icon from Extensions section.
  4. Click on Export -> Header String

Manual way

  1. Open labs.google, make sure you are logged in
  2. Press CTRL + SHIFT + I to open console
  3. Click on Network tab at top of console
  4. Press CTRL + L to clear network logs
  5. Click CTRL + R to refresh page
  6. Click on image-fx which should be at top
  7. Goto Request Headers section and copy all the content of Cookie
ImageFX not available in your country?
  1. Install a free VPN (Windscribe, Proton, etc)
  2. Open labs.google and login
  3. From here follow the "How to extract cookie?" in HELP section (above).
  4. Once you have obtained this cookie, you don't need VPN anymore.
Not able to generate images?

Create an issue here. Make sure the pasted logs don't contain cookie or tokens.

Contributions

Contribution are welcome but ensure to pass all test cases and follow existing coding standard.

Disclaimer

This project demonstrates usage of Google's private API but is not affiliated with Google. Use at your own risk.