--- id: videos title: "Videos" --- Playwright can record videos for all pages in a [browser context](./browser-contexts.md). Videos are saved upon context closure, so make sure to await [`method: BrowserContext.close`]. ```js const context = await browser.newContext({ recordVideo: { dir: 'videos/' } }); // Make sure to await close, so that videos are saved. await context.close(); ``` ```java context = browser.newContext(new Browser.NewContextOptions().setRecordVideoDir(Paths.get("videos/"))); // Make sure to close, so that videos are saved. context.close(); ``` ```python async context = await browser.new_context(record_video_dir="videos/") # Make sure to await close, so that videos are saved. await context.close() ``` ```python sync context = browser.new_context(record_video_dir="videos/") # Make sure to close, so that videos are saved. context.close() ``` ```csharp var context = await browser.NewContextAsync(new() { RecordVideoDir = "videos/" }); // Make sure to close, so that videos are saved. await context.CloseAsync(); ``` You can also specify video size. The video size defaults to the viewport size scaled down to fit 800x800. The video of the viewport is placed in the top-left corner of the output video, scaled down to fit if necessary. You may need to set the viewport size to match your desired video size. ```js const context = await browser.newContext({ recordVideo: { dir: 'videos/', size: { width: 640, height: 480 }, } }); ``` ```java BrowserContext context = browser.newContext(new Browser.NewContextOptions() .setRecordVideoDir(Paths.get("videos/")) .setRecordVideoSize(640, 480)); ``` ```python async context = await browser.new_context( record_video_dir="videos/", record_video_size={"width": 640, "height": 480} ) ``` ```python sync context = browser.new_context( record_video_dir="videos/", record_video_size={"width": 640, "height": 480} ) ``` ```csharp var context = await browser.NewContextAsync(new() { RecordVideoDir = "videos/", RecordVideoSize = new RecordVideoSize() { Width = 640, Height = 480 } }); // Make sure to close, so that videos are saved. await context.CloseAsync(); ``` Saved video files will appear in the specified folder. They all have generated unique names. For the multi-page scenarios, you can access the video file associated with the page via the [`method: Page.video`]. ```js const path = await page.video().path(); ``` ```java path = page.video().path(); ``` ```python async path = await page.video.path() ``` ```python sync path = page.video.path() ``` ```csharp var path = await page.Video.PathAsync(); ``` :::note Note that the video is only available after the page or browser context is closed. ::: ### API reference - [BrowserContext] - [`method: Browser.newContext`] - [`method: Browser.newPage`] - [`method: BrowserContext.close`]