Skip to content

build(deps): bump roborazzi from 1.64.0 to 1.67.0#21351

Open
dependabot[bot] wants to merge 1 commit into
dependency-updatesfrom
dependabot/gradle/dependency-updates/roborazzi-1.67.0
Open

build(deps): bump roborazzi from 1.64.0 to 1.67.0#21351
dependabot[bot] wants to merge 1 commit into
dependency-updatesfrom
dependabot/gradle/dependency-updates/roborazzi-1.67.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 7, 2026

Copy link
Copy Markdown
Contributor

Bumps roborazzi from 1.64.0 to 1.67.0.
Updates io.github.takahirom.roborazzi:roborazzi from 1.64.0 to 1.67.0

Release notes

Sourced from io.github.takahirom.roborazzi:roborazzi's releases.

1.67.0

New experimental feature - Record a video of your UI

You can now record how a UI evolves over virtual time -- animations, transitions, gestures, and any other time-driven change -- as an animated image that plays back in real time. Because Roborazzi runs under Robolectric's virtual clock, designers and reviewers can watch a transition or gesture actually play out frame by frame, instead of inferring motion from a strip of static screenshots.

Unlike captureRoboGif(), which only records visually distinct states with a fixed 1-second delay, recordRoboVideo() pauses the Compose main clock and drives it frame by frame, so intermediate animation frames are captured with faithful timing. Interactions in the block run with the clock paused; call delay() in the scope to advance virtual time while frames are recorded. After the block returns, recording keeps going until the UI settles, so a block that only performs a click still records the whole animation that click starts.

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun recordVideo() {
  composeTestRule.setContent {
    AnimatedBoxContent()
  }
  composeTestRule.onNodeWithTag("root")
    .recordRoboVideo(
      composeRule = composeTestRule,
      filePath = "build/outputs/roborazzi/video.gif",
      videoOptions = RoboVideoOptions(fps = 10),
    ) {
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
    }
}

A few things to know:

  • The output format is chosen by the file extension. .gif produces a GIF (256 colors; the default), and .png produces a lossless, full-color APNG (Animated PNG) -- prefer .png when color fidelity matters. Only these animated-image formats are supported for now; the "video" name was chosen deliberately so real video formats (e.g. mp4) can be added later without renaming the API.
  • Timing granularity differs by format. GIF stores frame delays in centiseconds (10ms resolution), so prefer an fps whose frame step (1000 / fps) is a multiple of 10ms (e.g. 10, 20, 25, 50) for exact GIF timing. APNG encodes the step exactly.
  • RoboVideoOptions exposes fps (default 10), settleTimeoutMillis (extra virtual time to keep recording while the UI is still changing after the block ends; default 3000), and backgroundColor (ARGB fill for the fixed recording viewport when frames have different sizes; default white).
  • This is record-only and experimental (@ExperimentalRoborazziApi). When the Roborazzi task runs in compare/verify mode it is a complete no-op -- the block is not executed and no image is recorded or verified.

Whole-screen recording with recordScreenRoboVideo()

recordScreenRoboVideo() records all window roots instead of a single node, mirroring how captureScreenRoboImage() relates to captureRoboImage(). Prefer it when you want a stable, device-sized viewport for every frame, or when you need to capture window overlays such as dialogs added mid-recording or touch/tap indicators -- these live on separate window roots and are invisible to a node-scoped recording.

recordScreenRoboVideo(
  composeRule = composeTestRule,
  filePath = "build/outputs/roborazzi/video_screen.gif",
  videoOptions = RoboVideoOptions(fps = 10),
) {
  composeTestRule.onNodeWithTag("toggle").performClick()
  delay(300)
}

... (truncated)

Commits
  • b82e41d 1.67.0
  • 5bd3d9c Merge pull request #870 from takahirom/tm/rename-record-robo-video
  • 2d7fa2a Clamp settle recording to timeout and skip empty best-effort save
  • 6913b9c Tighten recordRoboVideo docs section by removing duplication
  • 60daa13 Note GIF/APNG-only output and future video formats in docs
  • fac5e4d Document experimental recordRoboVideo API
  • f33b3e3 Rename captureRoboAnimation API to recordRoboVideo
  • 77e29ec Merge pull request #866 from takahirom/tm/capture-robo-animation-screen
  • debcf10 Merge branch 'main' into tm/capture-robo-animation-screen
  • d6da59e Merge pull request #865 from takahirom/tm/capture-robo-animation-apng
  • Additional commits viewable in compare view

Updates io.github.takahirom.roborazzi:roborazzi-junit-rule from 1.64.0 to 1.67.0

Release notes

Sourced from io.github.takahirom.roborazzi:roborazzi-junit-rule's releases.

1.67.0

New experimental feature - Record a video of your UI

You can now record how a UI evolves over virtual time -- animations, transitions, gestures, and any other time-driven change -- as an animated image that plays back in real time. Because Roborazzi runs under Robolectric's virtual clock, designers and reviewers can watch a transition or gesture actually play out frame by frame, instead of inferring motion from a strip of static screenshots.

Unlike captureRoboGif(), which only records visually distinct states with a fixed 1-second delay, recordRoboVideo() pauses the Compose main clock and drives it frame by frame, so intermediate animation frames are captured with faithful timing. Interactions in the block run with the clock paused; call delay() in the scope to advance virtual time while frames are recorded. After the block returns, recording keeps going until the UI settles, so a block that only performs a click still records the whole animation that click starts.

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun recordVideo() {
  composeTestRule.setContent {
    AnimatedBoxContent()
  }
  composeTestRule.onNodeWithTag("root")
    .recordRoboVideo(
      composeRule = composeTestRule,
      filePath = "build/outputs/roborazzi/video.gif",
      videoOptions = RoboVideoOptions(fps = 10),
    ) {
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
    }
}

A few things to know:

  • The output format is chosen by the file extension. .gif produces a GIF (256 colors; the default), and .png produces a lossless, full-color APNG (Animated PNG) -- prefer .png when color fidelity matters. Only these animated-image formats are supported for now; the "video" name was chosen deliberately so real video formats (e.g. mp4) can be added later without renaming the API.
  • Timing granularity differs by format. GIF stores frame delays in centiseconds (10ms resolution), so prefer an fps whose frame step (1000 / fps) is a multiple of 10ms (e.g. 10, 20, 25, 50) for exact GIF timing. APNG encodes the step exactly.
  • RoboVideoOptions exposes fps (default 10), settleTimeoutMillis (extra virtual time to keep recording while the UI is still changing after the block ends; default 3000), and backgroundColor (ARGB fill for the fixed recording viewport when frames have different sizes; default white).
  • This is record-only and experimental (@ExperimentalRoborazziApi). When the Roborazzi task runs in compare/verify mode it is a complete no-op -- the block is not executed and no image is recorded or verified.

Whole-screen recording with recordScreenRoboVideo()

recordScreenRoboVideo() records all window roots instead of a single node, mirroring how captureScreenRoboImage() relates to captureRoboImage(). Prefer it when you want a stable, device-sized viewport for every frame, or when you need to capture window overlays such as dialogs added mid-recording or touch/tap indicators -- these live on separate window roots and are invisible to a node-scoped recording.

recordScreenRoboVideo(
  composeRule = composeTestRule,
  filePath = "build/outputs/roborazzi/video_screen.gif",
  videoOptions = RoboVideoOptions(fps = 10),
) {
  composeTestRule.onNodeWithTag("toggle").performClick()
  delay(300)
}

... (truncated)

Commits
  • b82e41d 1.67.0
  • 5bd3d9c Merge pull request #870 from takahirom/tm/rename-record-robo-video
  • 2d7fa2a Clamp settle recording to timeout and skip empty best-effort save
  • 6913b9c Tighten recordRoboVideo docs section by removing duplication
  • 60daa13 Note GIF/APNG-only output and future video formats in docs
  • fac5e4d Document experimental recordRoboVideo API
  • f33b3e3 Rename captureRoboAnimation API to recordRoboVideo
  • 77e29ec Merge pull request #866 from takahirom/tm/capture-robo-animation-screen
  • debcf10 Merge branch 'main' into tm/capture-robo-animation-screen
  • d6da59e Merge pull request #865 from takahirom/tm/capture-robo-animation-apng
  • Additional commits viewable in compare view

Updates io.github.takahirom.roborazzi from 1.64.0 to 1.67.0

Release notes

Sourced from io.github.takahirom.roborazzi's releases.

1.67.0

New experimental feature - Record a video of your UI

You can now record how a UI evolves over virtual time -- animations, transitions, gestures, and any other time-driven change -- as an animated image that plays back in real time. Because Roborazzi runs under Robolectric's virtual clock, designers and reviewers can watch a transition or gesture actually play out frame by frame, instead of inferring motion from a strip of static screenshots.

Unlike captureRoboGif(), which only records visually distinct states with a fixed 1-second delay, recordRoboVideo() pauses the Compose main clock and drives it frame by frame, so intermediate animation frames are captured with faithful timing. Interactions in the block run with the clock paused; call delay() in the scope to advance virtual time while frames are recorded. After the block returns, recording keeps going until the UI settles, so a block that only performs a click still records the whole animation that click starts.

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun recordVideo() {
  composeTestRule.setContent {
    AnimatedBoxContent()
  }
  composeTestRule.onNodeWithTag("root")
    .recordRoboVideo(
      composeRule = composeTestRule,
      filePath = "build/outputs/roborazzi/video.gif",
      videoOptions = RoboVideoOptions(fps = 10),
    ) {
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
    }
}

A few things to know:

  • The output format is chosen by the file extension. .gif produces a GIF (256 colors; the default), and .png produces a lossless, full-color APNG (Animated PNG) -- prefer .png when color fidelity matters. Only these animated-image formats are supported for now; the "video" name was chosen deliberately so real video formats (e.g. mp4) can be added later without renaming the API.
  • Timing granularity differs by format. GIF stores frame delays in centiseconds (10ms resolution), so prefer an fps whose frame step (1000 / fps) is a multiple of 10ms (e.g. 10, 20, 25, 50) for exact GIF timing. APNG encodes the step exactly.
  • RoboVideoOptions exposes fps (default 10), settleTimeoutMillis (extra virtual time to keep recording while the UI is still changing after the block ends; default 3000), and backgroundColor (ARGB fill for the fixed recording viewport when frames have different sizes; default white).
  • This is record-only and experimental (@ExperimentalRoborazziApi). When the Roborazzi task runs in compare/verify mode it is a complete no-op -- the block is not executed and no image is recorded or verified.

Whole-screen recording with recordScreenRoboVideo()

recordScreenRoboVideo() records all window roots instead of a single node, mirroring how captureScreenRoboImage() relates to captureRoboImage(). Prefer it when you want a stable, device-sized viewport for every frame, or when you need to capture window overlays such as dialogs added mid-recording or touch/tap indicators -- these live on separate window roots and are invisible to a node-scoped recording.

recordScreenRoboVideo(
  composeRule = composeTestRule,
  filePath = "build/outputs/roborazzi/video_screen.gif",
  videoOptions = RoboVideoOptions(fps = 10),
) {
  composeTestRule.onNodeWithTag("toggle").performClick()
  delay(300)
}

... (truncated)

Commits
  • b82e41d 1.67.0
  • 5bd3d9c Merge pull request #870 from takahirom/tm/rename-record-robo-video
  • 2d7fa2a Clamp settle recording to timeout and skip empty best-effort save
  • 6913b9c Tighten recordRoboVideo docs section by removing duplication
  • 60daa13 Note GIF/APNG-only output and future video formats in docs
  • fac5e4d Document experimental recordRoboVideo API
  • f33b3e3 Rename captureRoboAnimation API to recordRoboVideo
  • 77e29ec Merge pull request #866 from takahirom/tm/capture-robo-animation-screen
  • debcf10 Merge branch 'main' into tm/capture-robo-animation-screen
  • d6da59e Merge pull request #865 from takahirom/tm/capture-robo-animation-apng
  • Additional commits viewable in compare view

@dependabot dependabot Bot added the dependencies used for automated dependency PRs label Jul 7, 2026
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Snapshot diff report vs dependency-updates. Open screenshot-diff for diffs.

  • AllActivitiesScreenshotTest: 2 changes
All 2 changed screenshots

AllActivitiesScreenshotTest

  • IntroductionActivity_compare.png
  • IntroductionActivity_edgeToEdge_compare.png

@david-allison
david-allison force-pushed the dependency-updates branch 2 times, most recently from 9148cab to cca29ad Compare July 8, 2026 00:12
@david-allison

Copy link
Copy Markdown
Member

@dependabot rebase

Bumps `roborazzi` from 1.64.0 to 1.67.0.

Updates `io.github.takahirom.roborazzi:roborazzi` from 1.64.0 to 1.67.0
- [Release notes](https://github.com/takahirom/roborazzi/releases)
- [Commits](takahirom/roborazzi@1.64.0...1.67.0)

Updates `io.github.takahirom.roborazzi:roborazzi-junit-rule` from 1.64.0 to 1.67.0
- [Release notes](https://github.com/takahirom/roborazzi/releases)
- [Commits](takahirom/roborazzi@1.64.0...1.67.0)

Updates `io.github.takahirom.roborazzi` from 1.64.0 to 1.67.0
- [Release notes](https://github.com/takahirom/roborazzi/releases)
- [Commits](takahirom/roborazzi@1.64.0...1.67.0)

---
updated-dependencies:
- dependency-name: io.github.takahirom.roborazzi
  dependency-version: 1.67.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.github.takahirom.roborazzi:roborazzi
  dependency-version: 1.67.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.github.takahirom.roborazzi:roborazzi-junit-rule
  dependency-version: 1.67.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title chore(deps): bump roborazzi from 1.64.0 to 1.67.0 build(deps): bump roborazzi from 1.64.0 to 1.67.0 Jul 8, 2026
@dependabot
dependabot Bot force-pushed the dependabot/gradle/dependency-updates/roborazzi-1.67.0 branch from 7483275 to ff7deec Compare July 8, 2026 00:14

@david-allison david-allison left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're very busy - lots of features

@david-allison david-allison added Pending Merge Things with approval that are waiting future merge (e.g. targets a future release, CI wait, etc) and removed Needs Review labels Jul 8, 2026
@BrayanDSO

Copy link
Copy Markdown
Member

1.68.0 launched

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies used for automated dependency PRs Pending Merge Things with approval that are waiting future merge (e.g. targets a future release, CI wait, etc)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants