On this page7 sections
When you convert a Framer site with Deframer, the "Include assets locally" switch decides where images, fonts and videos live in your Next.js project. Off, the default, they keep loading from Framer's CDN (framerusercontent.com): the download is smaller and the conversion faster. On, every Framer-hosted asset is downloaded into the project's public/ folder with readable file names, and the site no longer depends on Framer at all. Choose local if you're leaving Framer for good, and the CDN if you want a quick, light conversion or have a very large site.
Both options produce the same pages, components and styles. Only the asset URLs and the size of the zip differ. Here is what each mode produces, the trade-offs, what stays remote either way, and how to change your mind later.
What each mode produces
Off: assets stay on Framer's CDN
Image fields, backgrounds and videos reference framerusercontent.com URLs, including the srcSet sizes Framer generates. Fonts get one stylesheet per family in src/styles/fonts/, with @font-face rules pointing at the CDN (real output, shortened):
/* src/styles/fonts/inter.css */
@font-face {
font-family: "Inter";
src: url("https://framerusercontent.com/assets/….woff2");
font-display: swap;
font-style: normal;
font-weight: 400;
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4;
}Google-hosted fonts point at fonts.gstatic.com. The root layout preconnects to these hosts, as the published site does, so the browser opens connections early:
<link rel="preconnect" href="https://framerusercontent.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="" />On: assets are copied into public/
Every Framer-hosted asset is downloaded and referenced by path: images with all their srcSet variants, fonts, videos, Lottie files, SVGs, favicons, social images, CSS backgrounds, CMS and rich-text images, and URLs inside code components. File names are readable rather than hashes:
public/
images/ team-anna.png, team-anna-512.png …
fonts/ inter-500-cyrillic-ext.woff2 …
videos/
files/References become plain paths such as src: "/images/team-anna.png" or url("/fonts/inter-500-cyrillic-ext.woff2"). You can open, replace or optimize any file directly.
The trade-offs
| Off (CDN, default) | On (local) |
|---|---|---|
Download size | Smaller | Bigger, often much bigger with video |
Conversion time | Faster | Longer |
Depends on Framer to serve assets | Yes | No (except what stays remote, below) |
Who serves the files | Framer's CDN | Your host |
Replacing an image | Upload elsewhere, change the URL | Replace the file in |
Very large sites | More likely to fit | May hit the size limit |
A few notes on these rows.
Independence. With the default, assets are served by Framer's infrastructure, so their availability isn't something your project controls. If you plan to cancel your Framer plan or unpublish the site, choose local. If you're keeping the Framer site live, for example while you test the Next.js version, the CDN is a reasonable choice.
Hosting. With local assets, your host serves every image and video, which counts toward its bandwidth and storage. Most Next.js hosts put files in public/ behind their own CDN; check your provider's current pricing and limits, especially for video-heavy sites.
Size limits. A conversion runs for up to 10 minutes and a project can be up to 1 GB. If a large site doesn't fit, retry with "Include assets locally" off. The limits section of the FAQ lists the current defaults.
Performance. Neither mode is automatically faster. The converted next.config.ts sets images: { unoptimized: true } and keeps the site's own srcSet sizes, so browsers pick an appropriately sized file in both modes. What matters more is cache headers, image formats and the number of font files a page loads. Performance tuning a converted site covers how to measure before you change anything.
What stays remote either way
Some things aren't copied, by design, because they are code or live services rather than files:
- Code modules imported at runtime from framer.com, such as some icon packs.
- The font CSS fallback for fonts no component declares, loaded from Google Fonts or Fontshare CSS.
- Third-party services: maps, video embeds, shop APIs and similar.
Modules a site imports from vendors' CDNs are a separate case: they are copied into src/vendor/ in both modes, so the project doesn't fetch code from other sites at runtime.
If an individual asset fails to download, it stays on its remote URL and the result page lists it under "Files that couldn't be downloaded". You can download those yourself, put them in public/ and update the references.
A note on font licenses
Moving fonts into public/ means your server distributes the font files. That is fine for open-licensed fonts, and most Google Fonts are released under the SIL Open Font License. Fonts you bought or uploaded to Framer yourself are different: many commercial licenses cover specific uses, domains or traffic levels, and some don't allow self-hosting web font files without a web license. Check your license, or ask the foundry, before shipping commercial fonts from your own domain. Even with the CDN option, check that your license covers the domain the new site will run on.
metadataBase and social images
With local assets, social images become relative paths like /images/social-image.png. Open Graph needs absolute URLs, and Next.js builds them from metadataBase in src/app/layout.tsx, which is set to the site's published address. When you move to your own domain, change it:
export const metadata: Metadata = {
metadataBase: new URL("https://www.example.com"),
// …
};Otherwise link previews will point at the old address. The SEO guide covers this and the other domain updates.
Switching later
The simplest way to change modes is to convert again with the switch in the other position.
- Open the convert form, enter the same site URL, and set "Include assets locally" the way you want (keep the verification tag published: it's checked before each new project is downloaded).
- Convert. Converting is free, but a different option makes a new project, and downloading it uses one credit; see pricing for packs. Credits never expire.
- Download the new zip within 7 days. After that it shows as expired.
- Bring the changes into your working project. If the site hasn't been republished in between, the code apart from asset references should match, so a diff mostly shows URLs turning into paths plus the new
public/folders. If you keep the project in Git, convert into a branch and compare, as described in maintaining a converted site with Git.
If you've already made many edits, you can move assets by hand instead: download the files you use into public/, then search the project for framerusercontent.com and replace each URL with its path. It's slower but leaves your edits untouched.
Deframer is an independent tool, not affiliated with Framer; it reads only the public files your published site serves, the same ones a browser loads.
FAQ
Which option should I choose?
Choose "Include assets locally" if you're leaving Framer and want a self-contained project. Keep the default if you want a smaller, faster conversion, have a very large site, or are still running the Framer site alongside.
Are fonts included when assets are local?
Yes. Font files are downloaded into public/fonts/ with names that include family, weight and subset, and the @font-face rules point at them. Only the CSS fallback for fonts no component declares stays on Google Fonts or Fontshare.
Does converting again with a different option cost a credit?
Converting is free, but downloading the result does. Converting the same published version with the same options within 30 minutes returns the same project, but a different assets option is a new project, and downloading it uses a credit.
Can I mix the two, keeping videos remote and images local?
Not with the switch, which applies to all Framer-hosted assets. You can do it by hand: convert with assets local and point video references back at another URL, or convert with the CDN and copy in only the files you want.
