@remotion/promo-pages 4.0.314 → 4.0.317

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.turbo/turbo-make.log +2 -2
  2. package/dist/Homepage.js +11958 -12155
  3. package/dist/components/Homepage.js +4 -4
  4. package/dist/components/homepage/BackgroundAnimation.js +1 -1
  5. package/dist/components/homepage/CommunityStats.js +1 -1
  6. package/dist/components/homepage/CommunityStatsItems.js +1 -1
  7. package/dist/components/homepage/Counter.d.ts +1 -0
  8. package/dist/components/homepage/Counter.js +15 -7
  9. package/dist/components/homepage/Demo/DisplayedEmoji.js +17 -3
  10. package/dist/components/homepage/FreePricing.js +20 -25
  11. package/dist/components/homepage/GitHubButton.js +1 -1
  12. package/dist/components/homepage/IconForTemplate.js +4 -0
  13. package/dist/components/homepage/IfYouKnowReact.js +5 -2
  14. package/dist/components/homepage/MoreVideoPowerSection.d.ts +2 -0
  15. package/dist/components/homepage/MoreVideoPowerSection.js +16 -0
  16. package/dist/components/homepage/NewsletterButton.js +3 -2
  17. package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
  18. package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
  19. package/dist/components/homepage/RealMp4Videos.js +10 -1
  20. package/dist/components/homepage/VideoAppsShowcase.js +6 -3
  21. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -1
  22. package/dist/components/homepage/VideoAppsTitle.js +1 -4
  23. package/dist/components/icons/recorder.d.ts +3 -0
  24. package/dist/components/icons/recorder.js +4 -0
  25. package/dist/homepage/Pricing.js +131 -90
  26. package/dist/tailwind.css +115 -55
  27. package/package.json +10 -10
  28. package/public/img/editing-safari.mp4 +0 -0
  29. package/public/img/editing-vp9-chrome.webm +0 -0
  30. package/public/img/media-parser.png +0 -0
  31. package/public/img/recorder.png +0 -0
  32. package/public/img/webcodecs.png +0 -0
  33. package/src/components/Homepage.tsx +12 -12
  34. package/src/components/homepage/CommunityStats.tsx +1 -1
  35. package/src/components/homepage/Counter.tsx +17 -7
  36. package/src/components/homepage/Demo/DisplayedEmoji.tsx +22 -4
  37. package/src/components/homepage/FreePricing.tsx +88 -65
  38. package/src/components/homepage/IconForTemplate.tsx +5 -0
  39. package/src/components/homepage/IfYouKnowReact.tsx +26 -14
  40. package/src/components/homepage/MoreVideoPowerSection.tsx +95 -0
  41. package/src/components/homepage/NewsletterButton.tsx +6 -5
  42. package/src/components/homepage/ParameterizeAndEdit.tsx +89 -0
  43. package/src/components/homepage/RealMp4Videos.tsx +55 -13
  44. package/src/components/homepage/VideoAppsShowcase.tsx +21 -10
  45. package/src/components/homepage/VideoAppsTitle.tsx +0 -13
  46. package/src/components/icons/recorder.tsx +23 -0
  47. package/dist/components/homepage/Editor.d.ts +0 -2
  48. package/dist/components/homepage/Editor.js +0 -37
  49. package/public/img/player-demo.mp4 +0 -0
  50. package/src/components/homepage/Editor.tsx +0 -67
@@ -65,7 +65,7 @@ const SmallPriceTag: React.FC<{
65
65
  return (
66
66
  <div
67
67
  className={
68
- 'fontbrand text-2xl font-medium w-auto min-w-[80px] text-right shrink-0 ml-4'
68
+ 'fontbrand text-2xl font-medium w-auto min-w-[80px] text-right shrink-0'
69
69
  }
70
70
  >
71
71
  {children}
@@ -137,10 +137,15 @@ const SEAT_PRICE = 25;
137
137
  const RENDER_UNIT_PRICE = 10;
138
138
  const WEBCODECS_UNIT_PRICE = 10;
139
139
 
140
+ const icon: React.CSSProperties = {
141
+ height: 16,
142
+ marginLeft: 4,
143
+ };
144
+
140
145
  export const CompanyPricing: React.FC = () => {
141
146
  const [devSeatCount, setDevSeatCount] = React.useState(1);
142
- const [cloudUnitCount, setCloudUnitCount] = React.useState(1);
143
- const [webcodecsUnits, setWebcodecsUnits] = React.useState(1);
147
+ const [cloudRenders, setCloudRenders] = React.useState(1000);
148
+ const [creations, setCreations] = React.useState(1000);
144
149
 
145
150
  const formatPrice = useCallback((price: number) => {
146
151
  const formatter = new Intl.NumberFormat('en-US', {
@@ -155,29 +160,15 @@ export const CompanyPricing: React.FC = () => {
155
160
  return Math.max(
156
161
  100,
157
162
  devSeatCount * SEAT_PRICE +
158
- cloudUnitCount * RENDER_UNIT_PRICE +
159
- webcodecsUnits * WEBCODECS_UNIT_PRICE,
163
+ (cloudRenders / 1000) * RENDER_UNIT_PRICE +
164
+ (creations / 1000) * WEBCODECS_UNIT_PRICE,
160
165
  );
161
- }, [cloudUnitCount, devSeatCount, webcodecsUnits]);
166
+ }, [cloudRenders, devSeatCount, creations]);
162
167
 
163
168
  const totalPriceString = useMemo(() => {
164
169
  return formatPrice(totalPrice);
165
170
  }, [formatPrice, totalPrice]);
166
171
 
167
- const rendersPerMonth = useMemo(() => {
168
- const formatter = new Intl.NumberFormat('en-US', {
169
- maximumFractionDigits: 0,
170
- });
171
- return formatter.format(cloudUnitCount * 1000);
172
- }, [cloudUnitCount]);
173
-
174
- const conversionsPerMonth = useMemo(() => {
175
- const formatter = new Intl.NumberFormat('en-US', {
176
- maximumFractionDigits: 0,
177
- });
178
- return formatter.format(webcodecsUnits * 1000);
179
- }, [webcodecsUnits]);
180
-
181
172
  return (
182
173
  <Container>
183
174
  <Audience>For collaborations and companies of 4+ people</Audience>
@@ -189,80 +180,87 @@ export const CompanyPricing: React.FC = () => {
189
180
  <InfoTooltip text="Credits for Mux.com. Applies only to new Mux customers." />
190
181
  </PricingBulletPoint>
191
182
  <div style={{height: 30}} />
192
- <div className={'flex flex-row items-center'}>
183
+ <div className={'flex flex-col md:flex-row md:items-center'}>
193
184
  <div style={textUnitWrapper}>
194
185
  <div className={'fontbrand font-bold text-lg'}>Developer Seats</div>
195
186
  <div className={'text-muted fontbrand text-sm'}>
196
187
  Number of developers working with Remotion
197
188
  </div>
198
189
  </div>
199
- <div style={{flex: 3}} />
200
- <Counter count={devSeatCount} setCount={setDevSeatCount} minCount={1} />
201
- <SmallPriceTag>
202
- $
203
- {new Intl.NumberFormat('en-US', {
204
- maximumFractionDigits: 0,
205
- }).format(SEAT_PRICE * devSeatCount)}
206
- </SmallPriceTag>
190
+ <div style={{flex: 3}} className="hidden md:block" />
191
+ <div className="flex flex-row items-center justify-between mt-3 md:mt-0">
192
+ <Counter
193
+ count={devSeatCount}
194
+ setCount={setDevSeatCount}
195
+ minCount={1}
196
+ />
197
+ <SmallPriceTag>
198
+ $
199
+ {new Intl.NumberFormat('en-US', {
200
+ maximumFractionDigits: 0,
201
+ }).format(SEAT_PRICE * devSeatCount)}
202
+ </SmallPriceTag>
203
+ </div>
207
204
  </div>
208
205
  <div style={{height: 14}} />
209
- <div className={'flex flex-row items-center'}>
206
+ <div className={'flex flex-col md:flex-row md:items-center'}>
210
207
  <div style={textUnitWrapper}>
211
- <div className={'fontbrand font-bold text-lg'}>
212
- Cloud Rendering Units
213
- </div>
208
+ <div className={'fontbrand font-bold text-lg'}>Server renders</div>
214
209
  <div className={'text-muted fontbrand text-sm'}>
215
- Allows for {rendersPerMonth}{' '}
216
210
  <a
217
211
  href="https://www.remotion.dev/docs/compare-ssr"
218
212
  className="underline underline-offset-4 text-inherit"
219
213
  >
220
- self-hosted renders per month
221
- </a>{' '}
222
- each
214
+ Renders per month (self-hosted)
215
+ </a>
223
216
  </div>
224
217
  </div>
225
- <div style={{flex: 3}} />
226
- <Counter
227
- count={cloudUnitCount}
228
- setCount={setCloudUnitCount}
229
- minCount={0}
230
- />
231
- <SmallPriceTag>
232
- $
233
- {new Intl.NumberFormat('en-US', {
234
- maximumFractionDigits: 0,
235
- }).format(RENDER_UNIT_PRICE * cloudUnitCount)}
236
- </SmallPriceTag>
218
+ <div style={{flex: 3}} className="hidden md:block" />
219
+ <div className="flex flex-row items-center justify-between mt-3 md:mt-0">
220
+ <Counter
221
+ count={cloudRenders}
222
+ setCount={setCloudRenders}
223
+ minCount={0}
224
+ step={1000}
225
+ />
226
+ <SmallPriceTag>
227
+ $
228
+ {new Intl.NumberFormat('en-US', {
229
+ maximumFractionDigits: 0,
230
+ }).format((cloudRenders / 1000) * RENDER_UNIT_PRICE)}
231
+ </SmallPriceTag>
232
+ </div>
237
233
  </div>
238
234
  <div style={{height: 14}} />
239
- <div className={'flex flex-row items-center'}>
235
+ <div className={'flex flex-col md:flex-row md:items-center'}>
240
236
  <div style={textUnitWrapper}>
241
237
  <div className={'fontbrand font-bold text-lg'}>
242
- WebCodecs Creation Units
238
+ WebCodecs video creations
243
239
  </div>
244
240
  <div className={'text-muted fontbrand text-sm'}>
245
- Allows for{' '}
246
241
  <a
247
242
  className="underline underline-offset-4 text-inherit"
248
243
  href="https://remotion.dev/webcodecs"
249
244
  >
250
- {conversionsPerMonth} client-side video creations{' '}
245
+ Client-side video creations per month
251
246
  </a>
252
247
  </div>
253
248
  </div>
254
- <div style={{flex: 3}} />
255
- <Counter
256
- count={webcodecsUnits}
257
- setCount={setWebcodecsUnits}
258
- minCount={0}
259
- />
260
- <SmallPriceTag>
261
- $
262
- {new Intl.NumberFormat('en-US', {
263
- maximumFractionDigits: 0,
264
- }).format(RENDER_UNIT_PRICE * webcodecsUnits)}
265
- </SmallPriceTag>
249
+ <div style={{flex: 3}} className="hidden md:block" />
250
+ <div className="flex flex-row items-center justify-between mt-3 md:mt-0">
251
+ <Counter
252
+ count={creations}
253
+ setCount={setCreations}
254
+ minCount={0}
255
+ step={1000}
256
+ />
257
+ <SmallPriceTag>
258
+ $
259
+ {new Intl.NumberFormat('en-US', {
260
+ maximumFractionDigits: 0,
261
+ }).format((creations / 1000) * WEBCODECS_UNIT_PRICE)}
262
+ </SmallPriceTag>
263
+ </div>
266
264
  </div>
267
265
  <div style={{height: 20}} />
268
266
  <div className={'flex flex-row justify-end'}>
@@ -276,6 +274,31 @@ export const CompanyPricing: React.FC = () => {
276
274
  </BottomInfo>
277
275
  </div>
278
276
  </div>
277
+ <div className={'flex flex-row justify-end mt-4'}>
278
+ <div
279
+ style={{
280
+ ...textUnitWrapper,
281
+ alignItems: 'flex-end',
282
+ }}
283
+ >
284
+ <a
285
+ href="https://remotion.pro/dashboard"
286
+ className="font-brand text-brand flex flex-row items-center gap-1 no-underline"
287
+ >
288
+ Buy now{' '}
289
+ <svg
290
+ style={icon}
291
+ xmlns="http://www.w3.org/2000/svg"
292
+ viewBox="0 0 448 512"
293
+ >
294
+ <path
295
+ fill="currentColor"
296
+ d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
297
+ />
298
+ </svg>
299
+ </a>
300
+ </div>
301
+ </div>
279
302
  </Container>
280
303
  );
281
304
  };
@@ -7,6 +7,7 @@ import {JSIcon} from '../icons/js';
7
7
  import {MusicIcon} from '../icons/music';
8
8
  import {NextIcon} from '../icons/next';
9
9
  import {OverlayIcon} from '../icons/overlay';
10
+ import {Recorder} from '../icons/recorder';
10
11
  import {ReactRouterIcon} from '../icons/remix';
11
12
  import {SkiaIcon} from '../icons/skia';
12
13
  import {Stargazer} from '../icons/stargazer';
@@ -135,6 +136,10 @@ export const IconForTemplate: React.FC<{
135
136
  return <OverlayIcon style={{height: scale * 42}} />;
136
137
  }
137
138
 
139
+ if (template.cliId === 'recorder') {
140
+ return <Recorder style={{height: scale * 36}} />;
141
+ }
142
+
138
143
  if (
139
144
  template.cliId === 'next' ||
140
145
  template.cliId === 'next-tailwind' ||
@@ -1,5 +1,4 @@
1
1
  import React, {useEffect, useState} from 'react';
2
- import {BlueButton} from './layout/Button';
3
2
 
4
3
  export const isWebkit = () => {
5
4
  if (typeof window === 'undefined') {
@@ -14,6 +13,11 @@ export const isWebkit = () => {
14
13
  return isSafariUserAgent || isChrome;
15
14
  };
16
15
 
16
+ const icon: React.CSSProperties = {
17
+ height: 16,
18
+ marginLeft: 10,
19
+ };
20
+
17
21
  export const IfYouKnowReact: React.FC = () => {
18
22
  const [vid, setVid] = useState('/img/compose.webm');
19
23
 
@@ -24,31 +28,39 @@ export const IfYouKnowReact: React.FC = () => {
24
28
  }, []);
25
29
 
26
30
  return (
27
- <div className="flex flex-col lg:flex-row text-left lg:text-right justify-start lg:justify-end items-start lg:mb-0">
31
+ <div className="flex flex-col lg:flex-row text-left justify-start lg:justify-end items-start lg:mb-0 gap-6 mt-8">
28
32
  <video
29
33
  src={vid}
30
34
  muted
31
35
  autoPlay
32
36
  playsInline
33
37
  loop
34
- className="w-[600px] h-[600px] cursor-default! relative lg:-translate-x-8 -mb-50 -mt-10 lg:mt-0 lg:mb-0"
38
+ className="w-[500px] cursor-default! relative lg:-translate-x-8 -mb-40 lg:mt-0 lg:mb-0"
35
39
  />
36
- <div className="h-10 lg:flex-1" />
37
- <div className="lg:text-right">
40
+ <div>
38
41
  <h2 className="text-4xl fontbrand pt-20">
39
- <span className="text-brand">Compose</span> your
40
- <br />
41
- video with code.
42
+ <span className="text-brand">Compose</span> with code
42
43
  </h2>
43
- <p className="leading-relaxed">
44
+ <p className="leading-relaxed font-brand">
44
45
  Use React, a powerful frontend technology, to create sophisticated
45
46
  videos with code.
46
47
  </p>
47
- <div className="h-7" />
48
- <a className="no-underline inline-block" href="/docs/the-fundamentals">
49
- <BlueButton size="sm" loading={false}>
50
- Learn Remotion
51
- </BlueButton>
48
+ <div className="h-4" />
49
+ <a
50
+ className="no-underline text-brand font-brand font-bold inline-flex flex-row items-center"
51
+ href="/docs/the-fundamentals"
52
+ >
53
+ Learn Remotion{' '}
54
+ <svg
55
+ style={icon}
56
+ xmlns="http://www.w3.org/2000/svg"
57
+ viewBox="0 0 448 512"
58
+ >
59
+ <path
60
+ fill="currentColor"
61
+ d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
62
+ />
63
+ </svg>
52
64
  </a>
53
65
  </div>
54
66
  </div>
@@ -0,0 +1,95 @@
1
+ import React from 'react';
2
+
3
+ const StepTitle: React.FC<{
4
+ readonly children: React.ReactNode;
5
+ }> = ({children}) => {
6
+ return (
7
+ <div className="text-left text-xl font-semibold fontbrand">{children}</div>
8
+ );
9
+ };
10
+
11
+ const Subtitle: React.FC<{
12
+ readonly children: React.ReactNode;
13
+ }> = ({children}) => {
14
+ return (
15
+ <div className="text-left text-base fontbrand text-[var(--subtitle)]">
16
+ {children}
17
+ </div>
18
+ );
19
+ };
20
+
21
+ const Pane: React.FC<{
22
+ readonly children: React.ReactNode;
23
+ readonly className?: string;
24
+ }> = ({children, className}) => {
25
+ return (
26
+ <div
27
+ className={`border-effect bg-pane flex-1 flex flex-col ${className || ''}`}
28
+ >
29
+ {children}
30
+ </div>
31
+ );
32
+ };
33
+
34
+ const FeatureCard: React.FC<{
35
+ readonly title: string;
36
+ readonly subtitle: string;
37
+ readonly image: string;
38
+ readonly link: string;
39
+ }> = ({title, subtitle, image, link}) => {
40
+ return (
41
+ <a
42
+ href={link}
43
+ className="group lg:border-r-2 border-b lg:border-b-0 border-[var(--border)] cursor-pointer hover:bg-[var(--hover)] transition-colors no-underline text-inherit"
44
+ >
45
+ <div className="relative">
46
+ <img src={image} alt={title} className="w-full h-auto" />
47
+ </div>
48
+ <div className="p-4">
49
+ <div className="flex items-center gap-2">
50
+ <StepTitle>{title}</StepTitle>
51
+ <svg
52
+ width="16"
53
+ viewBox="0 0 448 512"
54
+ fill="currentColor"
55
+ className="opacity-0 group-hover:opacity-100 transition-opacity"
56
+ >
57
+ <path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z" />
58
+ </svg>
59
+ </div>
60
+ <Subtitle>{subtitle}</Subtitle>
61
+ <br />
62
+ <div className="flex-1" />
63
+ </div>
64
+ </a>
65
+ );
66
+ };
67
+
68
+ export const MoreVideoPowerSection: React.FC = () => {
69
+ return (
70
+ <div className="w-full">
71
+ <Pane className="overflow-hidden">
72
+ <div className="grid grid-cols-1 lg:grid-cols-3 h-full">
73
+ <FeatureCard
74
+ title="Media Parser"
75
+ subtitle="A new multimedia library for the web"
76
+ image="/img/media-parser.png"
77
+ link="/media-parser"
78
+ />
79
+ <FeatureCard
80
+ title="WebCodecs"
81
+ subtitle="Read, process, transform and create videos on the frontend"
82
+ image="/img/webcodecs.png"
83
+ link="/webcodecs"
84
+ />
85
+ <FeatureCard
86
+ title="Recorder"
87
+ subtitle="Produce engaging screencasts end-to-end in JavaScript"
88
+ image="/img/recorder.png"
89
+ link="/recorder"
90
+ />
91
+ </div>
92
+ </Pane>
93
+ </div>
94
+ );
95
+ };
@@ -1,6 +1,7 @@
1
1
  import React, {useCallback, useState} from 'react';
2
2
  import {BlueButton} from './layout/Button';
3
3
  import {Spacer} from './Spacer';
4
+ import {SectionTitle} from './VideoAppsTitle';
4
5
 
5
6
  export const NewsletterButton: React.FC<{}> = () => {
6
7
  const [email, setEmail] = useState('');
@@ -44,18 +45,18 @@ export const NewsletterButton: React.FC<{}> = () => {
44
45
  <div>
45
46
  <div className="flex flex-col">
46
47
  <div className={'w-full'}>
47
- <div className={'border-effect bg-pane flex flex-col flex-1 p-5'}>
48
- <div className={'text-2xl font-bold fontbrand'}>Newsletter</div>
48
+ <div className={'flex flex-col flex-1'}>
49
+ <SectionTitle>Newsletter</SectionTitle>
49
50
  <form
50
51
  onSubmit={handleSubmit}
51
52
  style={{
52
53
  width: '100%',
53
54
  }}
54
55
  >
55
- <p className="leading-snug mt-1 text-muted fontbrand">
56
+ <div className={'fontbrand text-center mb-10 -mt-4'}>
56
57
  Read about new features and noteworthy updates we have made on
57
- Remotion once in a while.
58
- </p>
58
+ Remotion once in a while.{' '}
59
+ </div>
59
60
 
60
61
  <input
61
62
  className="w-full dark:bg-[#121212] rounded-lg border-effect border-black outline-none px-3 py-3 fontbrand text-lg box-border focus:border-brand"
@@ -0,0 +1,89 @@
1
+ import React, {useEffect, useRef, useState} from 'react';
2
+ import {isWebkit} from './IfYouKnowReact';
3
+
4
+ const icon: React.CSSProperties = {
5
+ height: 16,
6
+ marginLeft: 10,
7
+ };
8
+
9
+ export const ParameterizeAndEdit: React.FC = () => {
10
+ const ref = useRef<HTMLDivElement>(null);
11
+ const [vid, setVid] = useState('/img/editing-vp9-chrome.webm');
12
+
13
+ useEffect(() => {
14
+ if (isWebkit()) {
15
+ setVid('/img/editing-safari.mp4');
16
+ }
17
+ }, []);
18
+
19
+ return (
20
+ <div
21
+ ref={ref}
22
+ className={
23
+ 'flex flex-col lg:flex-row justify-start lg:justify-end items-start gap-6 mt-20 lg:mt-0'
24
+ }
25
+ >
26
+ <div>
27
+ <video
28
+ src={vid}
29
+ autoPlay
30
+ muted
31
+ playsInline
32
+ loop
33
+ style={{
34
+ width: 500,
35
+ maxWidth: '100%',
36
+ borderRadius: 7,
37
+ overflow: 'hidden',
38
+ }}
39
+ />
40
+ </div>
41
+ <div style={{flex: 1}} className="font-brand pt-4">
42
+ <h2 className={'fontbrand text-4xl'}>
43
+ Edit <span className="text-brand">dynamically</span>
44
+ </h2>
45
+ <p className="leading-relaxed">
46
+ Parameterize your video by passing data.
47
+ <br />
48
+ Or embed it into your app and build an interface around it.
49
+ </p>
50
+ <div className="h-4" />
51
+ <div className="leading-6">
52
+ <a
53
+ className="no-underline text-brand font-brand font-bold inline-flex flex-row items-center"
54
+ href="/docs/studio"
55
+ >
56
+ Remotion Studio{' '}
57
+ <svg
58
+ style={icon}
59
+ xmlns="http://www.w3.org/2000/svg"
60
+ viewBox="0 0 448 512"
61
+ >
62
+ <path
63
+ fill="currentColor"
64
+ d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
65
+ />
66
+ </svg>
67
+ </a>
68
+ <br />
69
+ <a
70
+ className="no-underline text-brand font-brand font-bold inline-flex flex-row items-center"
71
+ href="/player"
72
+ >
73
+ Remotion Player{' '}
74
+ <svg
75
+ style={icon}
76
+ xmlns="http://www.w3.org/2000/svg"
77
+ viewBox="0 0 448 512"
78
+ >
79
+ <path
80
+ fill="currentColor"
81
+ d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
82
+ />
83
+ </svg>
84
+ </a>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ );
89
+ };
@@ -1,6 +1,11 @@
1
1
  import React, {useEffect, useRef, useState} from 'react';
2
2
  import {isWebkit} from './IfYouKnowReact';
3
3
 
4
+ const icon: React.CSSProperties = {
5
+ height: 16,
6
+ marginLeft: 10,
7
+ };
8
+
4
9
  export const RealMP4Videos: React.FC = () => {
5
10
  const ref = useRef<HTMLDivElement>(null);
6
11
  const videoRef = useRef<HTMLVideoElement>(null);
@@ -35,11 +40,8 @@ export const RealMP4Videos: React.FC = () => {
35
40
  }, []);
36
41
 
37
42
  return (
38
- <div
39
- ref={ref}
40
- className={'flex flex-col lg:flex-row-reverse items-center mt-20 lg:mt-0'}
41
- >
42
- <div className="flex flex-1 justify-start lg:justify-end items-end">
43
+ <div ref={ref} className={'flex flex-col lg:flex-row mt-40 lg:mt-30 gap-6'}>
44
+ <div className="flex w-[500px] justify-start lg:justify-start items-end">
43
45
  <video
44
46
  ref={videoRef}
45
47
  src={vid}
@@ -47,19 +49,59 @@ export const RealMP4Videos: React.FC = () => {
47
49
  autoPlay
48
50
  playsInline
49
51
  loop
50
- style={{}}
51
- className="w-[550px] h-[550px] cursor-default! relative lg:translate-x-8 -mt-20 -mb-20 lg:mt-0 lg:mb-0"
52
+ style={{
53
+ width: 400,
54
+ maxWidth: '100%',
55
+ borderRadius: 7,
56
+ overflow: 'hidden',
57
+ }}
58
+ className="w-[550px] cursor-default! relative lg:translate-x-8 -mt-20 lg:mt-0"
52
59
  />
53
60
  </div>{' '}
54
- <div>
61
+ <div className="font-brand">
55
62
  <h2 className="text-4xl fontbrand">
56
- Real <span className={'text-brand'}>.mp4</span> videos
63
+ <span className={'text-brand'}>Scalable</span> rendering
57
64
  </h2>
58
65
  <p className="leading-relaxed">
59
- Remotion renders all frames to images and <br /> encodes them to a
60
- real video - audio support included. <br /> WebM and other formats are
61
- also supported.
62
- </p>
66
+ Render the video .mp4 or other formats. <br />
67
+ Locally, on the server or serverless.
68
+ </p>{' '}
69
+ <div className="h-4" />
70
+ <div className="leading-6">
71
+ <a
72
+ className="no-underline text-brand font-brand font-bold inline-flex flex-row items-center"
73
+ href="/docs/render"
74
+ >
75
+ Render options{' '}
76
+ <svg
77
+ style={icon}
78
+ xmlns="http://www.w3.org/2000/svg"
79
+ viewBox="0 0 448 512"
80
+ >
81
+ <path
82
+ fill="currentColor"
83
+ d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
84
+ />
85
+ </svg>
86
+ </a>
87
+ <br />
88
+ <a
89
+ className="no-underline text-brand font-brand font-bold inline-flex flex-row items-center"
90
+ href="/lambda"
91
+ >
92
+ Remotion Lambda{' '}
93
+ <svg
94
+ style={icon}
95
+ xmlns="http://www.w3.org/2000/svg"
96
+ viewBox="0 0 448 512"
97
+ >
98
+ <path
99
+ fill="currentColor"
100
+ d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
101
+ />
102
+ </svg>
103
+ </a>
104
+ </div>
63
105
  </div>
64
106
  </div>
65
107
  );