from typing import Optional


def parse_image_tag(image: str) -> Optional[tuple[str, str]]:
    """
    Split a full image ref, e.g. `"python:3"` into its repo and tag, `('python', '3')`.
    If there is no tag, `":latest"` is assumed.
    If the image ref cannot be parsed, `None` is returned.
    """
    if not isinstance(image, str):
        return None
    if image.count(":") > 1:
        return None
    if ":" in image:
        repo, tag = image.split(":")
        return repo, tag
    return image, "latest"