Inside ElarisLabs

One URL in.
A whole brand out.

ElarisLabs is the AI-native creative operating system for brands. Here's how we make the very first step feel instant, turning a single web address into a production-ready brand profile, with ScrapeGraph as the engine under the hood.

🔒nike.com
Paste a website.
No logo uploads. No hex-code hunting. No copy-paste from product pages.
Colors
Typography
Heading · Druk Body · Helvetica
AI brand personality
tone: bold energy: high audience: athletes
Meet ElarisLabs

An AI-native creative operating system for brands.

ElarisLabs generates on-brand creative across image, video and audio, and publishes it straight to Meta, TikTok and Snapchat. At its center is Iris, a conversational AI agent that takes a brand brief and returns channel-ready creative in minutes, not weeks. Every asset stays locked to your brand's colors, fonts and voice, because the platform learns your brand the moment you join.

AI Agent

Iris

Describe a campaign in plain language, and Iris plans it, generates the assets and assembles them, end to end.

Creative Studio

On-brand image generation with brand-lock applied to every prompt, so nothing drifts off-brand.

Video Studio

AI video, scripted, voiced and rendered to a finished MP4, with production handled programmatically.

Brand Pack

One creative, every aspect ratio, resized across channels automatically while staying perfectly on-brand.

Campaign Wizard

Spin up a full multi-asset campaign from a single brief, with brand constraints baked in from the start.

Scheduler & Insights

Publish directly to Meta, TikTok and Snapchat, then track what's working with brand-scoped analytics.

The first-mile problem

All that power is useless behind a blank form.

Everything above only matters if a new brand can get started in seconds. The last thing someone joining ElarisLabs should do is spend twenty minutes uploading logos, eyedropping hex codes and dragging in product photos. And when they want a product video, they shouldn't re-type everything already sitting on an Amazon or Shopify page.

So to make onboarding instant, we reach for ScrapeGraph, the engine that turns a single URL into structured brand or product data. It's the first step in two of our highest-value flows. We wire it in through the scrapegraph-js v2 SDK behind a shared client, so the rest of ElarisLabs never thinks about scraping at all.

"Paste your website, we build your brand profile."

Brand onboarding. Colors, fonts, logo, photos and AI-inferred personality, pre-filled in under 30 seconds.

"Paste a product link, we script a video."

URL to Video. Extract name, price, hi-res media and features from real merchant pages, then generate.

Proof, in one call

One live page in. Structured data out.

Here is the whole idea on a single real product page. On the left, the messy, JavaScript-rendered, bot-protected page a shopper sees. On the right, exactly what ElarisLabs receives back from one extract() call, clean enough to drop straight into a video.

The live page
amazon.com/dp/B09XS7JWHH
62×62
thumb
_SX38_
Sony WH-1000XM5 Wireless Noise-Cancelling Headphones
$32999 $399 ★ 4.7  ·  12,431 ratings Roll over image to zoom in
JS-renderedlazy-loaded gallerybot-protectedthumbnail URLs
extract()
What ElarisLabs gets back
normalised output
{ "success": true, "data": { "name": "Sony WH-1000XM5 Headphones", "brand_name": "Sony", "price": 329.99, "currency": "USD", "images": [ "…/I/61abc._SL1500_.jpg" // upgraded from _SX38_ ], "key_features": [ "Industry-leading noise cancellation", "Up to 30-hour battery life", "Crystal-clear hands-free calling" ] } }

Buried price, a 62px thumbnail and a lazy gallery become clean JSON, with the image URL auto-upgraded to full resolution. See how ScrapeGraph extract() handles it →

Architecture overview

Two flows. One SDK. Live data flowing through the core.

Both flows converge on a single ScrapeGraph client, but they call different primitives tuned to their target pages. Watch the data move from entry point, through the API, and back out to where ElarisLabs stores or renders it.

scrape() extract() Onboarding page paste website URL scrapeBrandData() + /api/scrape-brand UrlInput component paste product URL POST /api/product/scrape shared w/ Product Staging getSgaiClient() lazy singleton · scrapegraph-js v2 ScrapeGraph API the intelligence layer saveBrandData() → Supabase → Studio · Scheduler · Insights UrlVideoWizard → script → voiceover → render
Brand onboarding · scrape() URL to Video · extract() Shared client + API

Two different primitives, chosen on purpose.

scrape()
Brand onboarding · marketing & corporate sites
  • Multi-format request in a single call
  • Native branding format extracts design tokens
  • images + json supplement photos and tagline
  • Lightweight mode: 'auto' fetch
extract()
URL to Video & Product Staging · e-commerce pages
  • LLM-guided structured extraction via JSON schema
  • Pulls name, price, features, hi-res images
  • Handles JavaScript-heavy, bot-protected pages
  • Heavy js + stealth + scrolls fetch
Part 1 · Brand onboarding

Paste a URL, get a brand profile.

On the onboarding page, step zero is a website field. The user pastes qdb.qa or nike.com; ElarisLabs runs a scanning animation while ScrapeGraph works, then advances to a review form with everything pre-filled. If scraping fails, the user still proceeds to manual entry. Scraping is an accelerator, not a gate.

The server action scrapeBrandFromWebsite() authenticates the user via Supabase, calls scrapeBrandData(url), and returns a typed ScrapedBrandData object. One HTTP call asks ScrapeGraph for three formats at once:

lib/scrapegraph/client.ts
await sgai.scrape({ url: normalizedUrl, formats: [ { type: 'branding' }, // design tokens + personality { type: 'images' }, // raw page photos { type: 'json', prompt: '…tagline…', schema: { … } }, ], fetchConfig: { mode: 'auto', timeout: 30000 }, });
branding

Native brand intelligence

Colors, typography, logo, favicon, OG image, spacing, framework hints, plus AI-inferred tone, energy and target audience.

images

Photo gallery

Raw page images populate the brand photo gallery, deduped and capped at 12 to keep the picker clean.

json

Focused tagline pull

A tightly-scoped LLM extraction for the homepage slogan only, with a strict schema so the model can't hallucinate extra fields.

Normalising v2 data into ElarisLabs's shape

ScrapeGraph returns v2-shaped data; the client maps it into the legacy ScrapedBranding interface, validating and re-shaping along the way.

ScrapeGraph outputElarisLabs fieldProcessing
colors.primary / accent→ colors objectHex validation (#RRGGBB only)
typography.heading / mono→ fonts[] with rolesDeduped: heading, body, mono
typography sizes→ typography (legacy)Rebuild fontStacks, fontSizes
images.logo→ logo_urlHTTP(S) URLs only
ogImage + results.images→ brand_photos[]Deduped, max 12
personality→ brand_personalitytone, energy, targetAudience
results.json.tagline→ taglineFrom dedicated json format

If the branding format fails entirely, ElarisLabs returns success: false, because the review UI depends on those fields, so a partial result isn't surfaced as a win. A helper, hasValidScrapedData(), guards against empty scrapes before treating a result as useful. Scraped logos and photos are then re-hosted via uploadExternalImageToSupabase() so generation pipelines never depend on third-party CDN uptime.

Brand creation is free, with no credit deduction. Scraping lives in the acquisition funnel, not behind a paywall.

What the scraped profile then powers

Once onboarding completes, brand context flows into every creative surface.

<30s
From URL to a production-ready brand context
12
Brand photos auto-collected & deduped
5
Creative surfaces brand-locked downstream
3
Formats fetched in a single API call

Studio brand picker · Brand Pack multi-ratio resizing · Video Studio constraints · Campaign Wizard · Insights & Scheduler

Part 2 · URL to Video

From a product link to a finished video.

URL to Video lives at /url-video, orchestrated by UrlVideoWizard.tsx. ScrapeGraph powers step one entirely and seeds step two. Everything after it is the ElarisLabs generation and rendering stack.

1

URL input ScrapeGraph

Paste a product page URL, or enter details manually.

2

Media review seeded

Confirm scraped images, videos, name, price, features.

3

Video settings

Duration, aspect ratio, language, target audience.

4

Script selection

LLM-generated script options from the scraped data.

5

Voiceover + preview

ElevenLabs TTS with word-level captions.

6

Render

Remotion template render to a final MP4.

A heavier fetch, on purpose

E-commerce product pages are JavaScript-rendered, lazy-loaded and bot-protected. So unlike onboarding's lightweight scrape, product extraction uses a single extract() call with a detailed prompt, a schema requiring only product_name, and a much heavier fetch config.

app/api/product/scrape/route.ts
await sgai.extract({ url: normalizedUrl, prompt: `Extract product name, price, hi-res images, videos, brand, key features…`, // + platform-specific hints schema: { type: 'object', required: ['product_name'] }, fetchConfig: { mode: 'js', // full browser rendering stealth: true, // anti-bot evasion scrolls: 3, // trigger lazy-loaded galleries timeout: 30000, }, });

The prompt bakes in platform-specific instructions for Amazon, Flipkart, Shopify and Shopee, covering thumbnail-vs-full-size URL patterns, gallery containers, data-old-hires, srcset. The code notes this costs extra credits but materially improves hit-rate on exactly the merchant pages URL-to-video depends on.

Post-processing: upgrading every image to full-res

ScrapeGraph returns image URLs; ElarisLabs then runs upgradeImageUrl(), rewriting known CDN thumbnail patterns into their full-resolution equivalents.

38 px
scraped thumbnail
._SX38_ ._SL1500_
1500 px
render-ready
Amazon._SX38_ → ._SL1500_
Flipkart/image/128/ → /832/832
Shopifystrip _300x300 suffix
Shopeestrip _tn, bump resize
Cloudinarybump w / h / q params
Genericnormalise to 1200px · q=95

Images are deduped by base URL (ignoring query strings), capped at 10 images and 5 videos. Price strings are cleaned locale-aware, and currency is detected from ISO code or symbol (₹→INR, €→EUR). The result is a normalised product object, clean enough to feed straight into script generation, voiceover and the Remotion render.

response · /api/product/scrape
{ "success": true, "data": { "name": "Product Name", "price": 29.99, "currency": "USD", "images": ["https://…"], "videos": ["https://…"], "brand_name": "Brand", "key_features": ["feature1", "feature2"] } }
Side by side

Same vendor, two tuned strategies.

One SDK and API key serve both flows, but every dimension is tuned to its target pages.

DimensionBrand onboardingURL to Video
ScrapeGraph APIscrape()extract()
Primary formatsbranding · images · jsonstructured JSON via prompt + schema
Fetch modeauto (lightweight)js + stealth + 3 scrolls (heavy)
Target pagesMarketing / corporate sitesE-commerce product pages
Key outputsLogo, colors, fonts, personality, photosName, price, hi-res images, videos, features
Post-processingHex validation, font roles, photo dedupCDN URL upgrading, price parsing, dedup
PersistenceSupabase brands tableIn-memory wizard state → render
FallbackManual form entryManual product entry
Why it fits the product strategy

Not a background utility. The first mile.

01

Reduces time-to-value

Investors and users see a working brand profile or product video starting from a URL, not a blank form.

02

Two integrations, one vendor

Brand scrape() and product extract() share an SDK and key, but use strategies tuned per use case.

03

Feeds the platform loop

Scraped brand data powers Studio, Scheduler and Insights; scraped product data feeds URL-to-Video and Product Staging.

04

E-commerce-grade extraction

Stealth JS rendering plus platform-specific image upgrading makes URL-to-video viable on real merchant pages.

Every great creative starts with knowing the brand.

That's where ElarisLabs begins, and ScrapeGraph is the engine that makes the first mile instant. Paste a URL, and within seconds the platform knows your colors, fonts, voice and products, ready to generate on-brand creative across image, video and audio. The blank form is gone; the work starts immediately.

URL→ ScrapeGraph→ structured brand data→ ElarisLabs