> ## Documentation Index
> Fetch the complete documentation index at: https://agno-v2-codex-docs-audit-20260719-0149.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Image Input File Upload

> Migrate the v2.7.4 Anthropic image upload example to a supported model and local image input.

Preserve the released Files API source, then apply the required model and image-input changes before running it.

<Warning>
  The source passes an Anthropic uploaded `FileMetadata` object to `Image.content`, which accepts bytes in Agno v2.7.4. Use the downloaded local file path directly before running. Anthropic retired `claude-opus-4-20250514` on June 15, 2026. Replace it with `claude-opus-4-8` before running. See [Claude model deprecations](https://platform.claude.com/docs/en/about-claude/model-deprecations).
</Warning>

```python image_input_file_upload.py theme={null}
"""
In this example, we upload a PDF file to Anthropic directly and then use it as an input to an agent.
"""

from pathlib import Path

from agno.agent import Agent
from agno.media import Image
from agno.models.anthropic import Claude
from agno.utils.media import download_file
from anthropic import Anthropic

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------

img_path = Path(__file__).parent.joinpath("agno-intro.png")

# Download the file using the download_file function
download_file(
    "https://agno-public.s3.us-east-1.amazonaws.com/images/agno-intro.png",
    str(img_path),
)

# Initialize Anthropic client
client = Anthropic()

# Upload the file to Anthropic
uploaded_file = client.beta.files.upload(
    file=Path(img_path),
)

if uploaded_file is not None:
    agent = Agent(
        model=Claude(
            id="claude-opus-4-20250514",
            betas=["files-api-2025-04-14"],
        ),
        markdown=True,
    )

    agent.print_response(
        "What does the attached image say.",
        images=[Image(content=uploaded_file)],
    )

# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------

if __name__ == "__main__":
    pass
```

## Run the Example

<Steps>
  <Snippet file="create-venv-step.mdx" />

  <Step title="Install dependencies">
    ```bash theme={null}
    uv pip install -U agno anthropic
    ```
  </Step>

  <Step title="Export your Anthropic API key">
    <CodeGroup>
      ```bash Mac/Linux theme={null}
      export ANTHROPIC_API_KEY="your_anthropic_api_key_here"
      ```

      ```bash Windows theme={null}
      $Env:ANTHROPIC_API_KEY="your_anthropic_api_key_here"
      ```
    </CodeGroup>
  </Step>

  <Step title="Update the Claude model">
    Replace `claude-opus-4-20250514` with `claude-opus-4-8` in the saved file.
  </Step>

  <Step title="Use the local image directly">
    Remove the direct `Anthropic` client import and the Files API upload block. Replace `Image(content=uploaded_file)` with `Image(filepath=img_path)` and run the agent without the `if uploaded_file is not None` wrapper.
  </Step>

  <Step title="Run the example">
    Save the code above as `image_input_file_upload.py`, then run:

    ```bash theme={null}
    python image_input_file_upload.py
    ```
  </Step>
</Steps>

Full source: [cookbook/90\_models/anthropic/image\_input\_file\_upload.py](https://github.com/agno-agi/agno/blob/v2.7.4/cookbook/90_models/anthropic/image_input_file_upload.py)
