saket/telephoto

Building blocks for designing media experiences in Compose UI

Kotlin

1,564

1,419 commits

updated Jul 22, 2026

See the code

README

logo logo

https://github.com/saket/telephoto/assets/2387680/77d559f4-04cd-459b-be90-fb272e7a1ee0

Designing a cohesive media experience for Android can be a lot of work. Telephoto aims to make that easier by offering some building blocks for Compose UI.

Zoomable Image

Drop-in replacement for Image() composables featuring support for pan & zoom gestures and automatic sub‑sampling of large images that'd otherwise not fit into memory.

Modifier.zoomable()

ZoomableImage's gesture detector, packaged as a standalone Modifier that can be used with videos and other non-image composables.

Zoomable Peek Overlay

Transient, overlaid zoom effect inspired by Instagram.

See project website for full documentation.

License

Copyright 2025 Saket Narayan.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
android
compose
image
sub-sampling
subsampling
zoom
zoomable

saket/telephoto

Building blocks for designing media experiences in Compose UI

Kotlin

1,564

1,419 commits

updated Jul 22, 2026

See the code

README

logo logo

https://github.com/saket/telephoto/assets/2387680/77d559f4-04cd-459b-be90-fb272e7a1ee0

Designing a cohesive media experience for Android can be a lot of work. Telephoto aims to make that easier by offering some building blocks for Compose UI.

Zoomable Image

Drop-in replacement for Image() composables featuring support for pan & zoom gestures and automatic sub‑sampling of large images that'd otherwise not fit into memory.

Modifier.zoomable()

ZoomableImage's gesture detector, packaged as a standalone Modifier that can be used with videos and other non-image composables.

Zoomable Peek Overlay

Transient, overlaid zoom effect inspired by Instagram.

See project website for full documentation.

License

Copyright 2025 Saket Narayan.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
android
compose
image
sub-sampling
subsampling
zoom
zoomable

Significant stargazers

Zongle Wang

831 followers · starred May 2023

YuKongA

1,075 followers · starred Dec 2025

Yuri Schimke

482 followers · starred May 2023

Roman Zavarnitsyn

124 followers · starred May 2023