Skip to main content

Media Tagger

PyPI Open in Collab

Problem statement

When analyzing large amount of creatives of any nature (being images and videos) it might be challenging to quickly and reliably understand their content and gain insights.

Solution

media-tagger performs tagging of image and videos based on various taggers

  • simply provide a path to your media files and media-tagger will do the rest.

Deliverable (implementation)

media-tagger is implemented as a:

  • library - Use it in your projects with a help of media_tagging.MediaTaggingService class.
  • CLI tool - media-tagger tool is available to be used in the terminal.
  • HTTP endpoint - media-tagger can be easily exposed as HTTP endpoint.
  • Langchain tool - integrate media-tagger into your Langchain applications.

Deployment

Prerequisites

  • Python 3.10+
  • A GCP project with billing account attached
  • API Enabled:
  • Environmental variables specified:
    • GOOGLE_API_key to access to access Google Gemini.
      export GOOGLE_API_KEY=<YOUR_API_KEY_HERE>
      
    • GOOGLE_CLOUD_PROJECT - points the Google Cloud project with Vertex AI API enabled.
      export GOOGLE_CLOUD_PROJECT=<YOUR_PROJECT_HERE>
      

Installation

Install media-tagger with pip install media-tagging[all] command.

Alternatively you can install subsets of media-tagging library:

  • media-tagging[google-cloud] - tagging videos and images with Google Cloud APIs.
    • media-tagging[google-cloud-vision] - only for tagging images.
    • media-tagging[google-cloud-videointelligence] - only for tagging videos.
  • media-tagging[gemini] - tagging videos and images with Vertex AI API.
    • media-tagging[google-genai] - only for tagging images via Gemini.
    • media-tagging[google-vertexai] - only for tagging videos via Gemini.
  • media-tagging[langchain] - tagging videos and images with Langchain.

Usage

Tagging media

This section is focused on using media-tagger as a CLI tool. Check library, http endpoint, langchain tool sections to learn more.

Once media-tagger is installed you can call it:

media-tagger ACTION MEDIA_PATHs \
  --media-type <MEDIA_TYPE> \
  --tagger <TAGGER_TYPE> \
  --db-uri=<CONNECTION_STRING> \
  --writer <WRITER_TYPE> \
  --output <OUTPUT_FILE_NAME>

where:

  • ACTION - either tag or describe.
  • MEDIA_PATHs - names of files for tagging (can be urls) separated by spaces.

Instead of reading MEDIA_PATHs as positional arguments you can read them from a file using
--input FILENAME.CSV argument. Use --input.column_name=NAME_OF_COLUMN to specify column name in the file.

  • <MEDIA_TYPE> - type of media (YOUTUBE_VIDEO, VIDEO, IMAGE, TEXT).
  • <TAGGER_TYPE> - name of tagger, supported options.

Tagger can be customized via tagger.option=value syntax. I.e. if you want to request a specific number of tags you can add --tagger.n-tags=100 CLI flag.

  • <CONNECTION_STRING> - Optional connection string to the database with tagging results (i.e. sqlite:///tagging.db). If this parameter is set make sure that DB exists.

To create an empty Sqlite DB execute touch database.db.

  • <WRITER_TYPE> - writer identifier (check available options at garf-io library).
  • <OUTPUT_FILE_NAME> - name of the file to store results of tagging (by default tagging_results).

Supported taggers

identifier supported media types tagging output options
google-cloud image, video tag n-tags=10
langchain image, video tag, description n-tags=10, tags=tag1,tag2,tag3
gemini image, video, youtube_video tag, description n-tags=10

Tagger customizations

  • langchain and gemini taggers can use custom-prompt parameter to adjust built-in prompts.
    Add --tagger.custom-prompt=YOUR_PROMPT_HERE, where YOUR_PROMPT_HERE is either prompt or a file path (local or remote) with .txt extension.

    Example: --tagger.custom_prompt="Is this an advertising? Answer yes or no'

    • When passing custom prompt you can opt out of using built in schemas in media-tagger by using --tagger.no-schema=True or provide a custom schema via --tagger.custom_schema=/path/to/schema.json parameter.
  • gemini tagger for video and youtube_video media types supports specifying VideoMetadata parameters (fps, start_offset, end_offset)

    Example: --tagger.fps=5

  • gemini tagger can use n_runs=N parameter to repeat tagging process N times, i.e. --tagger.n_runs=10 will tag the same medium 10 times.

Loading tagging results

If you want to import tags to be used later, you can use media-loader utility.

media-loader PATH_TO_FILE \
  --media-type <MEDIA_TYPE> \
  --loader <LOADER_TYPE> \
  --db-uri=<CONNECTION_STRING> \
  --action <ACTION>

where:

  • <MEDIA_TYPE> - type of media (YOUTUBE_VIDEO, VIDEO, IMAGE).

For YouTube file uploads specify YOUTUBE_VIDEO type.

  • <LOADER_TYPE> - name of loader, currently only file is supported (data are saved to CSV).

Loader can be customized via loader.option=value syntax. I.e. if you want to change the default column name with media tags are located you can specify --loader.tag_name=new_column_name CLI flag.

  • <CONNECTION_STRING> - Connection string to the database with tagging results (i.e. sqlite:///tagging.db). If this parameter is set make sure that DB exists.

To create an empty Sqlite DB execute touch database.db.

  • ACTION - either tag or describe.

If loading tagging results with file loader, the CSV file should contains the following columns:

  • media_url - location of medium (can be remote or local).
  • tag - column that contains name of a tag.
  • score - column that contains prominence of a tag in the media.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

media_tagging-2.5.6.tar.gz (42.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

media_tagging-2.5.6-py3-none-any.whl (60.6 kB view details)

Uploaded Python 3

File details

Details for the file media_tagging-2.5.6.tar.gz.

File metadata

  • Download URL: media_tagging-2.5.6.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for media_tagging-2.5.6.tar.gz
Algorithm Hash digest
SHA256 7e976eb687881245fc6a951e836d5bcd9679fc402f21c8513b6dbbbdf98d6328
MD5 783d275b7e51841c220c4844f6816b39
BLAKE2b-256 185a596edccc61f1f4d455eb60b37fda2a775012d2e75a2916122ac17b5f09c7

See more details on using hashes here.

File details

Details for the file media_tagging-2.5.6-py3-none-any.whl.

File metadata

  • Download URL: media_tagging-2.5.6-py3-none-any.whl
  • Upload date:
  • Size: 60.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for media_tagging-2.5.6-py3-none-any.whl
Algorithm Hash digest
SHA256 9eb493428355e617fa84d96dd4aa61f8181fdd67edfc881fd2b0bed0ec22775d
MD5 4c3ecec38fb96240db7051fa85905c68
BLAKE2b-256 162caeb951fa3b00f38084e9dccbb02e57da179be6cd746a416c507d327fd156

See more details on using hashes here.

Release history Release notifications | RSS feed

2.5.11

2 files

2.5.10

2 files

2.5.9

2 files

2.5.8

2 files

2.5.7

2 files

This release

2.5.6 This release

2 files

2.5.5

2 files

2.5.4

2 files

2.5.3

2 files

2.5.2

2 files

2.5.1

2 files

2.5.0

2 files

2.4.1

2 files

2.4.0

2 files

2.3.3

2 files

2.3.2

2 files

2.3.1

2 files

2.3.0

2 files

2.2.1

2 files

2.2.0

2 files

2.1.1

2 files

2.1.0

2 files

2.0.2

2 files

2.0.1

2 files

2.0.0

2 files

1.7.0

2 files

1.6.2

2 files

1.6.1

2 files

1.6.0

2 files

1.5.0

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.1

2 files

1.3.0

2 files

1.1.0.post1

2 files

1.1.0

2 files

1.0.0.post1

2 files

1.0.0

2 files

0.7.2

2 files

0.7.1.post3

2 files

0.7.1.post2

2 files

0.7.1.post1

2 files

0.7.1

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

1 file

0.5.0

1 file

0.4.0

1 file

0.3.0

1 file

0.2.0

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page