Khichdi InfoTech
Skip to content

Shopify–Odoo Integration · intermediate · 9 min read

Managing Images and Media

Product image sync between Odoo and Shopify: ownership rules, URL vs binary transfer, rate limits, retries, and avoiding catalog job bottlenecks.

Last reviewed 2026-07-30 · Estimated effort: 2–6 weeks typical implementation slice

Table of contents

Image sync is often the slowest catalog job: large binaries, strict API rate limits, and naive full-gallery re-uploads on every product update.

Strong approaches declare media master (usually Shopify for customer-facing galleries or Odoo for SKU-first brands), prefer URL or staged upload patterns over inline base64 loops, sync images in dedicated low-priority queues, and track content hashes to skip unchanged files.

Separate media jobs from core product field sync so a hero image retry does not block inventory or order processing.

Teams underestimate media until the first full catalog push times out overnight. Treat images as a first-class integration domain with its own queues, budgets, and idempotency rules.

This article covers ERP connector media strategy — not Shopify theme image sizing or CDN configuration for storefront performance.

Decide which system owns primary product imagery. Fashion and DTC brands often master in Shopify or a DAM and reference URLs into Odoo for warehouse apps. Manufacturers may master in Odoo and publish outward to Shopify on approve.

Scope which images sync: primary only, full gallery, variant-specific images, and whether PDF spec sheets or safety sheets belong in the same pipeline.

URL references avoid double storage when Odoo can store external URLs and Shopify already hosts CDN assets. Upload jobs are needed when Odoo binary fields are master — use staged uploads or multipart APIs rather than embedding large payloads in product update calls.

Track file hash or etag per image to skip re-upload when product sync fires on unrelated field changes.

  • Dedicated media queue with lower priority than orders
  • Chunked or batched uploads with backoff on 429 responses
  • Variant-level image mapping table when colors have distinct photos

Gallery position matters for merchandising. Preserve sort order explicitly rather than relying on API default ordering. Alt text and accessibility fields may sync when SEO teams master metadata in one system.

Associate variant images correctly — mismatched variant photos drive returns and support tickets more than wrong descriptions.

A product update should succeed even if image three of five fails — record per-asset status and retry failed assets independently. Operators need a dashboard of products with incomplete media sync.

Large backfills run off-hours with rate-limit budgets shared with other catalog jobs — coordinate with inventory reconciliation windows.

  • Run media sync in a separate queue from product field updates.
  • Hash or fingerprint images to avoid redundant uploads.
  • Cap concurrent media workers to respect Shopify API budgets.
  • Define primary-image-only mode for initial go-live, gallery later.
  • Log per-asset outcomes so support can retry one image without full product replay.
  • Read rate limit guidance before scheduling nightly full-gallery sweeps.

  • !Re-uploading entire galleries on every minor product title change.
  • !Embedding large binaries in synchronous product update RPC calls.
  • !Sharing one rate-limit budget between media backfill and order import.
  • !Ignoring variant-level image mapping and showing wrong color photos.
  • !Failing entire product sync when one broken URL returns 404.
  • !Storing duplicate full-resolution copies in Odoo when URL reference suffices.

Media sync needs ownership rules, hash-aware retries, and isolated queues — otherwise it becomes the bottleneck that starves orders and stock updates.

Pair media jobs with API limit strategy before running large catalog backfills.

Product fields vs media queue parallel paths.
1

Master change

SKU / price / media updated.

2

Map fields

Transform to channel schema.

3

Push / pull

API call with idempotency.

4

Reconcile

Detect drift and exceptions.

Low-priority media worker pool beside order queue.
1

Enqueue

Job created with payload.

2

Worker pick

Claim with visibility timeout.

3

Process

Idempotent handler.

4

Ack / retry

Success or backoff.

429 backoff and per-asset retry loop.
  • API client

  • Gateway / auth

  • Odoo controllers / RPC

  • Database

  • clientgw
  • gwodoo
  • odoodb

Frequently asked questions

Should Odoo store product images at all?

Often yes for warehouse and internal apps, but not always as master binary. URL fields or lightweight thumbnails may suffice when Shopify hosts customer-facing assets.

How do we handle image updates after go-live?

Trigger targeted media jobs when image fields change, detected by hash diff — not full catalog reprocessing.

Do videos and 3D media belong in the same sync?

Scope separately. Video and model media use different APIs and size limits — treat as optional phase-two unless merchandising requires day-one parity.

Catalog sync stalling on images?

We separate media pipelines, tune batch sizes, and add retry visibility so product data keeps moving.

Business technology and software delivery