{"id":17550883,"url":"https://github.com/shoshinnikita/rview","last_synced_at":"2025-08-22T05:33:39.385Z","repository":{"id":187027096,"uuid":"551608404","full_name":"ShoshinNikita/rview","owner":"ShoshinNikita","description":"Web-based UI for 'rclone serve'","archived":false,"fork":false,"pushed_at":"2025-08-14T18:19:00.000Z","size":7064,"stargazers_count":11,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-15T21:19:59.028Z","etag":null,"topics":["exiftool","golang","libvips","rclone","rclone-client","rclone-gui","server-side-redering","webgui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ShoshinNikita.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-10-14T18:26:56.000Z","updated_at":"2025-08-14T18:19:04.000Z","dependencies_parsed_at":"2025-06-07T11:34:35.981Z","dependency_job_id":null,"html_url":"https://github.com/ShoshinNikita/rview","commit_stats":null,"previous_names":["shoshinnikita/rview"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ShoshinNikita/rview","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShoshinNikita%2Frview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShoshinNikita%2Frview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShoshinNikita%2Frview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShoshinNikita%2Frview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ShoshinNikita","download_url":"https://codeload.github.com/ShoshinNikita/rview/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShoshinNikita%2Frview/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271590776,"owners_count":24786301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exiftool","golang","libvips","rclone","rclone-client","rclone-gui","server-side-redering","webgui"],"created_at":"2024-10-21T04:44:08.183Z","updated_at":"2025-08-22T05:33:39.377Z","avatar_url":"https://github.com/ShoshinNikita.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `Rview` - web-based UI for `rclone serve`\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screenshots/dir_home.jpg\" width=\"90%\"\u003e\n  \u003cbr\u003e\n  \u003ci\u003e More screenshots \u003ca href=\"./docs/screenshots.md\"\u003ehere\u003c/a\u003e \u003c/i\u003e\n\u003c/p\u003e\n\n***\n\n- [Features](#features)\n- [Limitations](#limitations)\n- [Demo](#demo)\n- [Run](#run)\n- [Configuration](#configuration)\n- [Development](#development)\n  - [Metrics \\\u0026 Pprof](#metrics--pprof)\n- [Thanks](#thanks)\n\n## Features\n\n- :framed_picture: **Automatic thumbnail generation**: You don't have to download hundreds of MiBs to preview your images.\n  Image thumbnails are generated with the help of [libvips](https://github.com/libvips/libvips), an extremely\n  fast image processing library.\n- :iphone: **Mobile-friendly**: `Rview` can be installed as a PWA, desktop and mobile versions have feature parity.\n- :mag: **Search**: You can search for files by their name. Search tips can be found [here](./docs/search.md).\n- :feather: **Lightweight \u0026 minimalistic**: All pages are rendered on the server side using Go templates. JavaScript\n  is used only to make UI interactive.\n\n## Limitations\n\n- `Rview` is read-only and there are no plans to change that. You should use Rclone directly\n  to upload, edit, or delete files.\n- `Rview` does not provide any authentication mechanism. It is therefore highly recommended to use a proxy\n  such as Nginx or Caddy. Enabling gzip compression is also recommended, as it can significantly improve response time.\n\n## Demo\n\nCheck out the live demo [here](https://rview.0x5f3759df.stream), credentials for Basic Auth: `rview:rview`.\n\n## Run\n\n1. You have to install [docker](https://docs.docker.com/) and [docker compose](https://docs.docker.com/compose/).\n2. Let's consider you use Rclone S3 backend, and your `~/.config/rclone/rclone.conf` looks like this:\n\n   ```ini\n   [my-s3]\n   type = s3\n   provider = Other\n   access_key_id = \u003ckey id\u003e\n   secret_access_key = \u003caccess key\u003e\n   endpoint = \u003cendpoint\u003e\n   ```\n\n3. Create `compose.yml`:\n\n   ```yml\n   services:\n     rview:\n       image: ghcr.io/shoshinnikita/rview:main\n       container_name: rview\n       volumes:\n         - ./var:/srv/var                                          # mount app data directory\n         - ~/.config/rclone/rclone.conf:/config/rclone/rclone.conf # mount Rclone config file\n       ports:\n         - \"127.0.0.1:8080:8080\"\n       command: \"--rclone-target=my-s3:\" # pass Rclone target from the config file\n   ```\n\n4. Run this command:\n\n   ```sh\n   docker compose up\n   ```\n\n5. Go to http://localhost:8080.\n\n\u003e [!TIP]\n\u003e `rclone.conf` is not required when mounting a local directory:\n\u003e \u003cdetails\u003e\n\u003e   \u003csummary\u003e\u003ccode\u003ecompose.yaml\u003c/code\u003e\u003c/summary\u003e\n\u003e\n\u003e   ```yml\n\u003e   services:\n\u003e     rview:\n\u003e       image: ghcr.io/shoshinnikita/rview:main\n\u003e       container_name: rview\n\u003e       volumes:\n\u003e         - ./var:/srv/var      # mount app data directory\n\u003e         - /dir/to/mount:/data # mount data directory\n\u003e       ports:\n\u003e         - \"127.0.0.1:8080:8080\"\n\u003e       command: \"--rclone-target=/data\"\n\u003e   ```\n\u003e\n\u003e   \u003c/div\u003e\n\u003e \u003c/details\u003e\n\n\u003e [!TIP]\n\u003e You can run `Rview` with an existing Rclone instance and without access to the\n\u003e internet - [read more](./docs/advanced_setup.md).\n\n## Configuration\n\n```\n--rclone-target                   Rclone target, required\n\n--rclone-url                      Url of an existing rclone instance, optional. If url is\n                                  not specified, a local rclone instance will be launched\n                                  with the default config file. Url should include credentials\n                                  for Basic Auth, e.g., http://user:pass@rclone:80\n\n--rclone-cache-size               Max size of original file cache (default: 300Mi)\n\n--rclone-dir-cache-ttl            Time to cache dir entries for. Set to 0 to disable. (default: 5m)\n\n--dir                             Directory for app data: thumbnails and etc. (default: ./var)\n\n--port                            Server port (default: 8080)\n\n--image-preview-mode              Available image preview modes:\n                                    - thumbnails (default): generate thumbnails\n                                    - original: show original images\n                                    - none: don't show preview for images\n\n--thumbnails-format               Available thumbnail formats:\n                                    - avif (default): AVIF images can be significantly smaller than\n                                            JPEGs (-43% on average) and supported by all modern\n                                            browsers. However, generation of .avif thumbnails takes\n                                            more time (+32% on average) and requires more resources.\n                                    - jpeg: fast thumbnail generation, large files\n\n--thumbnails-process-raw-files    Generate thumbnails for RAW files: .ARW, .CR3, .NEF, etc.\n                                  Extracting JPEG previews from some RAW images requires\n                                  downloading the entire file. Consider ingress/egress costs\n                                  before enabling this option\n\n--thumbnails-cache-size           Max size of thumbnail cache (default: 500Mi)\n\n--thumbnails-workers-count        Number of workers for thumbnail generation (default: # of threads)\n\n--read-static-files-from-disk     Read static files directly from disk\n\n--log-level                       Set the minimal log level. One of: debug, info (default),\n                                  warn, error\n\n--version                         Print version and exit\n```\n\n## Development\n\nFirst, you have to install the following dependencies:\n\n1. [Rclone](https://github.com/rclone/rclone) - instructions can be found [here](https://rclone.org/install/)\n2. [libvips](https://github.com/libvips/libvips) - on Ubuntu you can install it with the following command:\n   `sudo apt-get install libvips-tools`\n3. [exiftool](https://github.com/exiftool/exiftool) - on Ubuntu you can install it with the following command:\n   `sudo apt-get install libimage-exiftool-perl`\n\nAfter completion of these steps you should be able to run `Rview`:\n\n```bash\n# Build and run\nmake build \u0026\u0026 make run\n# Or just\nmake\n\n# Build, run tests and lint code\nmake check\n```\n\nBy default `make run` uses environment variables from `.env` file. You can redefine these variables in `.env.local` file.\n\n### Metrics \u0026 Pprof\n\n`Rview` exposes Prometheus metrics on `/debug/metrics`. The list of all metrics can be found [here](pkg/metrics/metrics.go)\n\n[Pprof endpoints](https://pkg.go.dev/net/http/pprof#hdr-Usage_examples) are available on `/debug/pprof/`.\n\n## Thanks\n\nSpecial thanks to these open-source projects:\n\n- [Rclone](https://github.com/rclone/rclone) - rsync for cloud storage\n- [libvips](https://github.com/libvips/libvips) - A fast image processing library with low memory needs\n- [exiftool](https://github.com/exiftool/exiftool) - ExifTool meta information reader/writer\n- [Material Icon Theme](https://github.com/PKief/vscode-material-icon-theme) - Material Design icons for VS Code\n- [Feather](https://github.com/feathericons/feather) - Simply beautiful open source icons\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshoshinnikita%2Frview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshoshinnikita%2Frview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshoshinnikita%2Frview/lists"}