🖼 Simple file viewer with slideshow for media
Alternatives To Viewer
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Eagle.js4,0511859 months ago20October 23, 201913iscJavaScript
A hackable slideshow framework built with Vue.js
Keen Slider3,809352 months ago100September 19, 202244mitTypeScript
The HTML touch slider carousel with the most native feeling you will get.
Embla Carousel3,04431615 days ago184September 12, 20226mitTypeScript — A lightweight carousel library with fluid motion and great swipe precision.
Vue Fullpage.js1,7663915a month ago24September 09, 20223gpl-3.0Vue
Official Vue.js wrapper for fullPage.js
Vueper Slides5009105 months ago105June 18, 202215mitVue
A touch ready and responsive slideshow / carousel for Vue 2 & 3.
2 days ago207agpl-3.0JavaScript
📸 Your memories under your control
3 days agomitTypeScript
📸 Sliding action script
Vue Slides242114 years ago39November 29, 20182mitJavaScript
Present with Vue
Vue Infinite Slide Bar213
a year ago14mitVue
∞ Infinite slide bar component (no dependency and light weight 1.48 KB)
Press184142 years ago1September 22, 201942JavaScript
[Deprecated] Minimalist Markdown Publishing for Nuxt.js
Alternatives To Viewer
Select To Compare

Alternative Project Comparisons

Files viewer for nextcloud

Show your latest holiday photos and videos like in the movies. Show a glimpse of your latest novel directly from your nextcloud. Choose the best GIF of your collection thanks to the direct view of your favorites files!


📋 Current support

  • Images
  • Videos

🏗 Development setup

  1. ☁ Clone this app into the apps folder of your Nextcloud: git clone
  2. 👩‍💻 In the folder of the app, install dependencies with npm ci and build the Javascript with npm run build.
  3. ✅ Enable the app through the app management of your Nextcloud
  4. 🎉 Partytime!

🧙 Advanced development stuff

To build the Javascript whenever you make changes, you can also run npm run dev for developement builds.


Add the viewer to your app

In php, on your page, emit the LoadViewer event. Check the documentation/tutorial for more info on this type of page controller sample.

use OCA\Viewer\Event\LoadViewer;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IRequest;

class PageController extends Controller {
	protected $appName;

	/** @var IEventDispatcher */
	private $eventDispatcher;

	public function __construct($appName,
								IRequest $request,
								IEventDispatcher $eventDispatcher) {
		parent::__construct($appName, $request);

		$this->appName = $appName;
		$this->eventDispatcher = $eventDispatcher;

	 * @NoAdminRequired
	 * @NoCSRFRequired
	 * Render default index template
	 * @return TemplateResponse
	public function index(): TemplateResponse {
		$this->eventDispatcher->dispatch(LoadViewer::class, new LoadViewer());
		$response = new TemplateResponse($this->appName, 'main');
		return $response;

This will load all the necessary scripts and make the Viewer accessible trough javascript at OCA.Viewer

Open a file

  1. Open a file on WebDAV and let the viewer fetch the folder data{path: '/path/to/file.jpg'})
  1. Open a file on WebDAV and provide a list of files{
  	path: '/path/to/file.jpg',
  	list: [
  			basename: 'file.jpg',
  			filename: '/path/to/file.jpg',
// Alternative: pass known file info so it doesn't need to be fetched
const fileInfo = {
  filename: '/path/to/file.jpg',
  basename: 'file.jpg',
  mime: 'image/jpeg',
  etag: 'xyz987',
  hasPreview: true,
  fileid: 13579,
  fileinfo: fileInfo,
  list: [fileInfo],

The list parameter requires an array of fileinfo. You can check how we generate a fileinfo object here from a dav PROPFIND request data. There is currently no dedicated package for it, but this is coming. You can check the photos repository where we also use it.

  1. Open a file from an app's route
const fileInfo1 = {
  filename: '',
  basename: 'pineapple.jpg',
  source: '',
  mime: 'image/jpeg',
  etag: 'abc123',
  hasPreview: false,
  fileid: 12345,
const fileInfo2 = {
  filename: '',
  basename: 'garlic.jpg',
  source: '',
  mime: 'image/jpeg',
  etag: 'def456',
  hasPreview: false,
  fileid: 67890,
  fileInfo: fileInfo1,
  list: [fileInfo1, fileInfo2],

In order to open a shared file you will need to provide the share token so the Viewer can use it to authenticate the requests to the server. See the files_sharing app controller and template for an example.

Close the viewer


🔍 Add you own file view

If you want to make your app compatible with this app, you can use the OCA.Viewer methods

  1. Create a vue component which use the path and mime props (they will be automatically passed by the viewer)
  2. Register your mime viewer with the following:
     import VideoView from 'VideoView.vue'
         // unique id
         id: 'video',
        // optional, it will group every view of this group and
        // use the proper view when building the file list
        // of the slideshow.
        // e.g. you open an image/jpeg that have the `media` group
        // you will be able to see the video/mpeg from the `video` handler
        // files that also have the `media` group set.
        group: 'media',
        // the list of mimes your component is able to display
        mimes: [
         // your vue component view
         component: VideoView
  3. if you feel like your mime should be integrated on this repo, you can also create a pull request with your object on the models directory and the view on the components directory. Please have a look at what's already here and take example of it. 🙇‍♀️
Popular Slideshow Projects
Popular Vue Projects
Popular Content Management Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Photo Gallery