diff --git a/404.html b/404.html index 511f5160..c5f717e2 100644 --- a/404.html +++ b/404.html @@ -6,13 +6,13 @@ Page Not Found | Komga - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/01dfd4e6.55ea8c19.js b/assets/js/01dfd4e6.86ccaac4.js similarity index 53% rename from assets/js/01dfd4e6.55ea8c19.js rename to assets/js/01dfd4e6.86ccaac4.js index 61cab4a3..9eb204d9 100644 --- a/assets/js/01dfd4e6.55ea8c19.js +++ b/assets/js/01dfd4e6.86ccaac4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7694],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(7294);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(s[r]=e[r]);return s}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,s=e.mdxType,a=e.originalType,l=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),u=c(r),p=s,g=u["".concat(l,".").concat(p)]||u[p]||d[p]||a;return r?n.createElement(g,i(i({ref:t},m),{},{components:r})):n.createElement(g,i({ref:t},m))}));function g(e,t){var r=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var a=r.length,i=new Array(a);i[0]=p;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[u]="string"==typeof e?e:s,i[1]=o;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var n=r(7462),s=(r(7294),r(3905));const a={},i="Server settings & management",o={unversionedId:"guides/server-settings",id:"guides/server-settings",title:"Server settings & management",description:"The Server Settings > Server screen allows for more configuration of your server.",source:"@site/docs/guides/server-settings.md",sourceDirName:"guides",slug:"/guides/server-settings",permalink:"/docs/guides/server-settings",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/server-settings.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"User accounts",permalink:"/docs/guides/user-accounts"},next:{title:"Read progress",permalink:"/docs/guides/read-progress"}},l={},c=[{value:"Server Settings",id:"server-settings",level:2},{value:"Delete empty collections after scan",id:"delete-empty-collections-after-scan",level:4},{value:"Delete empty read lists after scan",id:"delete-empty-read-lists-after-scan",level:4},{value:"Remember Me duration",id:"remember-me-duration",level:4},{value:"Regenerate the RememberMe key",id:"regenerate-the-rememberme-key",level:4},{value:"Server Management",id:"server-management",level:2}],m={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,s.kt)(u,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"server-settings--management"},"Server settings & management"),(0,s.kt)("p",null,"The ",(0,s.kt)("em",{parentName:"p"},"Server Settings > Server")," screen allows for more configuration of your server."),(0,s.kt)("h2",{id:"server-settings"},"Server Settings"),(0,s.kt)("p",null,"This section allows to configure some server-wide options."),(0,s.kt)("img",{src:"/assets/media/guides/server-settings/server-settings.png",style:{maxHeight:"350px"},alt:"Server Settings"}),(0,s.kt)("h4",{id:"delete-empty-collections-after-scan"},"Delete empty collections after scan"),(0,s.kt)("p",null,"Indicate whether Komga should delete empty collections after a scan."),(0,s.kt)("h4",{id:"delete-empty-read-lists-after-scan"},"Delete empty read lists after scan"),(0,s.kt)("p",null,"Indicate whether Komga should delete empty read lists after a scan."),(0,s.kt)("h4",{id:"remember-me-duration"},"Remember Me duration"),(0,s.kt)("p",null,"The duration (in days) of the remember-me cookie that will be saved in the browser, if the Remember Me checkbox is ticked upon login."),(0,s.kt)("h4",{id:"regenerate-the-rememberme-key"},"Regenerate the RememberMe key"),(0,s.kt)("p",null,"The RememberMe feature works with a secret key. If you want to invalidate all the remember-me cookies that have been issued, you can regenerate the key."),(0,s.kt)("h2",{id:"server-management"},"Server Management"),(0,s.kt)("p",null,"This sections allows some administrative actions for your server."),(0,s.kt)("img",{src:"/assets/media/guides/server-settings/server-management.png",style:{maxHeight:"300px"},alt:"Server Management"}))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7694],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(7294);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(s[r]=e[r]);return s}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,s=e.mdxType,a=e.originalType,l=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=c(r),p=s,g=d["".concat(l,".").concat(p)]||d[p]||u[p]||a;return r?n.createElement(g,i(i({ref:t},m),{},{components:r})):n.createElement(g,i({ref:t},m))}));function g(e,t){var r=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var a=r.length,i=new Array(a);i[0]=p;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[d]="string"==typeof e?e:s,i[1]=o;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var n=r(7462),s=(r(7294),r(3905));const a={},i="Server settings & management",o={unversionedId:"guides/server-settings",id:"guides/server-settings",title:"Server settings & management",description:"The Server Settings > Server screen allows for more configuration of your server.",source:"@site/docs/guides/server-settings.md",sourceDirName:"guides",slug:"/guides/server-settings",permalink:"/docs/guides/server-settings",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/server-settings.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"User accounts",permalink:"/docs/guides/user-accounts"},next:{title:"Read progress",permalink:"/docs/guides/read-progress"}},l={},c=[{value:"Server Settings",id:"server-settings",level:2},{value:"Delete empty collections after scan",id:"delete-empty-collections-after-scan",level:4},{value:"Delete empty read lists after scan",id:"delete-empty-read-lists-after-scan",level:4},{value:"Task threads",id:"task-threads",level:4},{value:"Remember Me duration",id:"remember-me-duration",level:4},{value:"Regenerate the RememberMe key",id:"regenerate-the-rememberme-key",level:4},{value:"Server Management",id:"server-management",level:2}],m={toc:c},d="wrapper";function u(e){let{components:t,...r}=e;return(0,s.kt)(d,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"server-settings--management"},"Server settings & management"),(0,s.kt)("p",null,"The ",(0,s.kt)("em",{parentName:"p"},"Server Settings > Server")," screen allows for more configuration of your server."),(0,s.kt)("h2",{id:"server-settings"},"Server Settings"),(0,s.kt)("p",null,"This section allows to configure some server-wide options."),(0,s.kt)("img",{src:"/assets/media/guides/server-settings/server-settings.png",style:{maxHeight:"450px"},alt:"Server Settings"}),(0,s.kt)("h4",{id:"delete-empty-collections-after-scan"},"Delete empty collections after scan"),(0,s.kt)("p",null,"Indicate whether Komga should delete empty collections after a scan."),(0,s.kt)("h4",{id:"delete-empty-read-lists-after-scan"},"Delete empty read lists after scan"),(0,s.kt)("p",null,"Indicate whether Komga should delete empty read lists after a scan."),(0,s.kt)("h4",{id:"task-threads"},"Task threads"),(0,s.kt)("p",null,"The number of threads dedicated to the processing of background tasks."),(0,s.kt)("h4",{id:"remember-me-duration"},"Remember Me duration"),(0,s.kt)("p",null,"The duration (in days) of the remember-me cookie that will be saved in the browser, if the Remember Me checkbox is ticked upon login."),(0,s.kt)("h4",{id:"regenerate-the-rememberme-key"},"Regenerate the RememberMe key"),(0,s.kt)("p",null,"The RememberMe feature works with a secret key. If you want to invalidate all the remember-me cookies that have been issued, you can regenerate the key."),(0,s.kt)("h2",{id:"server-management"},"Server Management"),(0,s.kt)("p",null,"This sections allows some administrative actions for your server."),(0,s.kt)("img",{src:"/assets/media/guides/server-settings/server-management.png",style:{maxHeight:"300px"},alt:"Server Management"}))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/03c48fcb.ca106779.js b/assets/js/03c48fcb.8347baa5.js similarity index 99% rename from assets/js/03c48fcb.ca106779.js rename to assets/js/03c48fcb.8347baa5.js index 8115ccdb..08d139de 100644 --- a/assets/js/03c48fcb.ca106779.js +++ b/assets/js/03c48fcb.8347baa5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5037],{3905:(e,t,l)=>{l.d(t,{Zo:()=>d,kt:()=>m});var i=l(7294);function o(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function n(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,i)}return l}function c(e){for(var t=1;t=0||(o[l]=e[l]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(o[l]=e[l])}return o}var r=i.createContext({}),a=function(e){var t=i.useContext(r),l=t;return e&&(l="function"==typeof e?e(t):c(c({},t),e)),l},d=function(e){var t=a(e.components);return i.createElement(r.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},g=i.forwardRef((function(e,t){var l=e.components,o=e.mdxType,n=e.originalType,r=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=a(l),g=o,m=u["".concat(r,".").concat(g)]||u[g]||p[g]||n;return l?i.createElement(m,c(c({ref:t},d),{},{components:l})):i.createElement(m,c({ref:t},d))}));function m(e,t){var l=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=l.length,c=new Array(n);c[0]=g;var s={};for(var r in t)hasOwnProperty.call(t,r)&&(s[r]=t[r]);s.originalType=e,s[u]="string"==typeof e?e:o,c[1]=s;for(var a=2;a{l.r(t),l.d(t,{assets:()=>r,contentTitle:()=>c,default:()=>p,frontMatter:()=>n,metadata:()=>s,toc:()=>a});var i=l(7462),o=(l(7294),l(3905));const n={},c="Collections",s={unversionedId:"guides/collections",id:"guides/collections",title:"Collections",description:'Collections let you gather related series together. For example, you might add all the Batman series together in a "Batman" collection.',source:"@site/docs/guides/collections.md",sourceDirName:"guides",slug:"/guides/collections",permalink:"/docs/guides/collections",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/collections.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read progress",permalink:"/docs/guides/read-progress"},next:{title:"Read lists",permalink:"/docs/guides/readlists"}},r={},a=[{value:"Adding series to a collection",id:"adding-series-to-a-collection",level:2},{value:"Finding the Collections",id:"finding-the-collections",level:2},{value:"Series details screen",id:"series-details-screen",level:3},{value:"Viewing the libraries "By Collection"",id:"viewing-the-libraries-by-collection",level:3},{value:"Collection details",id:"collection-details",level:2},{value:"Collection ordering",id:"collection-ordering",level:3},{value:"Edit collection elements",id:"edit-collection-elements",level:3},{value:"Deleting a collection",id:"deleting-a-collection",level:2}],d={toc:a},u="wrapper";function p(e){let{components:t,...l}=e;return(0,o.kt)(u,(0,i.Z)({},d,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"collections"},"Collections"),(0,o.kt)("p",null,'Collections let you gather related series together. For example, you might add all the Batman series together in a "Batman" collection.'),(0,o.kt)("h2",{id:"adding-series-to-a-collection"},"Adding series to a collection"),(0,o.kt)("p",null,"You can add a Series to a collection from the action menu icon ",(0,o.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,o.kt)("em",{parentName:"p"},"Add to collection"),"."),(0,o.kt)("p",null,"You can also select multiple series, and click on ",(0,o.kt)("em",{parentName:"p"},"Add to collection"),"."),(0,o.kt)("img",{src:"/assets/media/guides/collections/multiselect-add-collection.png",style:{maxHeight:"80px"}}),(0,o.kt)("p",null,"A dialog will show up, where you can either add series to an existing collection, or create a new collection."),(0,o.kt)("img",{src:"/assets/media/guides/collections/add-collection-dialog.png",style:{maxHeight:"300px"}}),(0,o.kt)("h2",{id:"finding-the-collections"},"Finding the Collections"),(0,o.kt)("p",null,"Collections can be discovered or viewed in three ways:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Series details screen"),(0,o.kt)("li",{parentName:"ol"},'Viewing the libraries "By Collection"'),(0,o.kt)("li",{parentName:"ol"},"Searching in the search bar")),(0,o.kt)("h3",{id:"series-details-screen"},"Series details screen"),(0,o.kt)("p",null,"When viewing the details screen for a specific series that belongs to a collection, the collection will be displayed in a collapsible panel."),(0,o.kt)("img",{src:"/assets/media/guides/collections/series-collection-collapsed.png",style:{maxHeight:"300px"}}),(0,o.kt)("p",null,"Click on the panel to expand it and see the content of the collection."),(0,o.kt)("img",{src:"/assets/media/guides/collections/series-collection-expanded.png",style:{maxHeight:"300px"}}),(0,o.kt)("h3",{id:"viewing-the-libraries-by-collection"},'Viewing the libraries "By Collection"'),(0,o.kt)("p",null,'Only show collections that exist in the library. Opening a collection goes to the "collection details" screen (see below).'),(0,o.kt)("img",{src:"/assets/media/guides/collections/browse-collections.png",style:{maxHeight:"100px"}}),(0,o.kt)("h2",{id:"collection-details"},"Collection details"),(0,o.kt)("p",null,"The collection details screen contains all the series that belong to the collection. It can include series from any library. By adding items in different libraries to collections, you can relate them to each other."),(0,o.kt)("h3",{id:"collection-ordering"},"Collection ordering"),(0,o.kt)("p",null,"By default collections will order series by alphabetical sort order. However, you can edit a collection and choose to manually sort series in a collection. You may want to do so if a collection has a specific reading order for example."),(0,o.kt)("p",null,"Either click on the edit button on the collection card."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-card.png",style:{maxHeight:"300px"}}),(0,o.kt)("p",null,"Or click on the edit button from the collection details screen."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-button.png",style:{maxHeight:"60px"}}),(0,o.kt)("p",null,"A dialog will show up, where you can edit the collection's ordering."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-dialog.png",style:{maxHeight:"300px"}}),(0,o.kt)("p",null,"A manually ordered collection will be showing as such in the collection details screen."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-manual-ordering.png",style:{maxHeight:"50px"}}),(0,o.kt)("h3",{id:"edit-collection-elements"},"Edit collection elements"),(0,o.kt)("p",null,"From the collection details screen you can edit the elements composing a collection. To do so, click on the corresponding button in the toolbar."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-elements-button.png",style:{maxHeight:"80px"}}),(0,o.kt)("p",null,"The series cards will show two extra elements:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"a delete button, to remove the series from the collection"),(0,o.kt)("li",{parentName:"ul"},"a grip handle, which let you drag and drop series to reorder them (only available when the collection is manually ordered)")),(0,o.kt)("p",null,"Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-elements.png",style:{maxHeight:"400px"}}),(0,o.kt)("h2",{id:"deleting-a-collection"},"Deleting a collection"),(0,o.kt)("p",null,"To delete a collection, look for the action menu icon ",(0,o.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,o.kt)("em",{parentName:"p"},"Delete"),"."),(0,o.kt)("p",null,"This will not delete the items in the collection, nor your media files."))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5037],{3905:(e,t,l)=>{l.d(t,{Zo:()=>d,kt:()=>m});var i=l(7294);function o(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function n(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,i)}return l}function c(e){for(var t=1;t=0||(o[l]=e[l]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(o[l]=e[l])}return o}var r=i.createContext({}),a=function(e){var t=i.useContext(r),l=t;return e&&(l="function"==typeof e?e(t):c(c({},t),e)),l},d=function(e){var t=a(e.components);return i.createElement(r.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},g=i.forwardRef((function(e,t){var l=e.components,o=e.mdxType,n=e.originalType,r=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=a(l),g=o,m=u["".concat(r,".").concat(g)]||u[g]||p[g]||n;return l?i.createElement(m,c(c({ref:t},d),{},{components:l})):i.createElement(m,c({ref:t},d))}));function m(e,t){var l=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=l.length,c=new Array(n);c[0]=g;var s={};for(var r in t)hasOwnProperty.call(t,r)&&(s[r]=t[r]);s.originalType=e,s[u]="string"==typeof e?e:o,c[1]=s;for(var a=2;a{l.r(t),l.d(t,{assets:()=>r,contentTitle:()=>c,default:()=>p,frontMatter:()=>n,metadata:()=>s,toc:()=>a});var i=l(7462),o=(l(7294),l(3905));const n={},c="Collections",s={unversionedId:"guides/collections",id:"guides/collections",title:"Collections",description:'Collections let you gather related series together. For example, you might add all the Batman series together in a "Batman" collection.',source:"@site/docs/guides/collections.md",sourceDirName:"guides",slug:"/guides/collections",permalink:"/docs/guides/collections",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/collections.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read progress",permalink:"/docs/guides/read-progress"},next:{title:"Read lists",permalink:"/docs/guides/readlists"}},r={},a=[{value:"Adding series to a collection",id:"adding-series-to-a-collection",level:2},{value:"Finding the Collections",id:"finding-the-collections",level:2},{value:"Series details screen",id:"series-details-screen",level:3},{value:"Viewing the libraries "By Collection"",id:"viewing-the-libraries-by-collection",level:3},{value:"Collection details",id:"collection-details",level:2},{value:"Collection ordering",id:"collection-ordering",level:3},{value:"Edit collection elements",id:"edit-collection-elements",level:3},{value:"Deleting a collection",id:"deleting-a-collection",level:2}],d={toc:a},u="wrapper";function p(e){let{components:t,...l}=e;return(0,o.kt)(u,(0,i.Z)({},d,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"collections"},"Collections"),(0,o.kt)("p",null,'Collections let you gather related series together. For example, you might add all the Batman series together in a "Batman" collection.'),(0,o.kt)("h2",{id:"adding-series-to-a-collection"},"Adding series to a collection"),(0,o.kt)("p",null,"You can add a Series to a collection from the action menu icon ",(0,o.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,o.kt)("em",{parentName:"p"},"Add to collection"),"."),(0,o.kt)("p",null,"You can also select multiple series, and click on ",(0,o.kt)("em",{parentName:"p"},"Add to collection"),"."),(0,o.kt)("img",{src:"/assets/media/guides/collections/multiselect-add-collection.png",style:{maxHeight:"80px"}}),(0,o.kt)("p",null,"A dialog will show up, where you can either add series to an existing collection, or create a new collection."),(0,o.kt)("img",{src:"/assets/media/guides/collections/add-collection-dialog.png",style:{maxHeight:"300px"}}),(0,o.kt)("h2",{id:"finding-the-collections"},"Finding the Collections"),(0,o.kt)("p",null,"Collections can be discovered or viewed in three ways:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Series details screen"),(0,o.kt)("li",{parentName:"ol"},'Viewing the libraries "By Collection"'),(0,o.kt)("li",{parentName:"ol"},"Searching in the search bar")),(0,o.kt)("h3",{id:"series-details-screen"},"Series details screen"),(0,o.kt)("p",null,"When viewing the details screen for a specific series that belongs to a collection, the collection will be displayed in a collapsible panel."),(0,o.kt)("img",{src:"/assets/media/guides/collections/series-collection-collapsed.png",style:{maxHeight:"300px"}}),(0,o.kt)("p",null,"Click on the panel to expand it and see the content of the collection."),(0,o.kt)("img",{src:"/assets/media/guides/collections/series-collection-expanded.png",style:{maxHeight:"300px"}}),(0,o.kt)("h3",{id:"viewing-the-libraries-by-collection"},'Viewing the libraries "By Collection"'),(0,o.kt)("p",null,'Only show collections that exist in the library. Opening a collection goes to the "collection details" screen (see below).'),(0,o.kt)("img",{src:"/assets/media/guides/collections/browse-collections.png",style:{maxHeight:"100px"}}),(0,o.kt)("h2",{id:"collection-details"},"Collection details"),(0,o.kt)("p",null,"The collection details screen contains all the series that belong to the collection. It can include series from any library. By adding items in different libraries to collections, you can relate them to each other."),(0,o.kt)("h3",{id:"collection-ordering"},"Collection ordering"),(0,o.kt)("p",null,"By default collections will order series by alphabetical sort order. However, you can edit a collection and choose to manually sort series in a collection. You may want to do so if a collection has a specific reading order for example."),(0,o.kt)("p",null,"Either click on the edit button on the collection card."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-card.png",style:{maxHeight:"300px"}}),(0,o.kt)("p",null,"Or click on the edit button from the collection details screen."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-button.png",style:{maxHeight:"60px"}}),(0,o.kt)("p",null,"A dialog will show up, where you can edit the collection's ordering."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-dialog.png",style:{maxHeight:"300px"}}),(0,o.kt)("p",null,"A manually ordered collection will be showing as such in the collection details screen."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-manual-ordering.png",style:{maxHeight:"50px"}}),(0,o.kt)("h3",{id:"edit-collection-elements"},"Edit collection elements"),(0,o.kt)("p",null,"From the collection details screen you can edit the elements composing a collection. To do so, click on the corresponding button in the toolbar."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-elements-button.png",style:{maxHeight:"80px"}}),(0,o.kt)("p",null,"The series cards will show two extra elements:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"a delete button, to remove the series from the collection"),(0,o.kt)("li",{parentName:"ul"},"a grip handle, which let you drag and drop series to reorder them (only available when the collection is manually ordered)")),(0,o.kt)("p",null,"Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes."),(0,o.kt)("img",{src:"/assets/media/guides/collections/collection-edit-elements.png",style:{maxHeight:"400px"}}),(0,o.kt)("h2",{id:"deleting-a-collection"},"Deleting a collection"),(0,o.kt)("p",null,"To delete a collection, look for the action menu icon ",(0,o.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,o.kt)("em",{parentName:"p"},"Delete"),"."),(0,o.kt)("p",null,"This will not delete the items in the collection, nor your media files."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0480b142.7da62e68.js b/assets/js/0480b142.880df7c1.js similarity index 99% rename from assets/js/0480b142.7da62e68.js rename to assets/js/0480b142.880df7c1.js index 14cc45a6..d9c62411 100644 --- a/assets/js/0480b142.7da62e68.js +++ b/assets/js/0480b142.880df7c1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[836],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>h});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),p=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=p(a),u=n,h=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return a?o.createElement(h,i(i({ref:t},m),{},{components:a})):o.createElement(h,i({ref:t},m))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var o=a(7462),n=(a(7294),a(3905));const r={},i="Frequently Asked Questions",l={unversionedId:"faq",id:"faq",title:"Frequently Asked Questions",description:"I forgot my password",source:"@site/docs/faq.md",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/faq.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Community",permalink:"/docs/community"}},s={},p=[{value:"I forgot my password",id:"i-forgot-my-password",level:2},{value:"Where can I find the log files?",id:"where-can-i-find-the-log-files",level:2},{value:"How to enable DEBUG or TRACE logs?",id:"how-to-enable-debug-or-trace-logs",level:2},{value:"Via an application.yml",id:"via-an-applicationyml",level:3},{value:"Using the jar via the command line",id:"using-the-jar-via-the-command-line",level:3},{value:"Using Docker",id:"using-docker",level:3},{value:"Komga seems slow, how can I check what's going on?",id:"komga-seems-slow-how-can-i-check-whats-going-on",level:2},{value:"The memory consumption is huge",id:"the-memory-consumption-is-huge",level:2},{value:"How can I sync reading progress with tracker websites?",id:"how-can-i-sync-reading-progress-with-tracker-websites",level:2},{value:"Webreader double pages are not showing as single page",id:"webreader-double-pages-are-not-showing-as-single-page",level:2},{value:"Media type application/x-7z-compressed is not supported",id:"media-type-applicationx-7z-compressed-is-not-supported",level:2},{value:"My books/series show a different name than the files/folders",id:"my-booksseries-show-a-different-name-than-the-filesfolders",level:2},{value:"This server has already been claimed",id:"this-server-has-already-been-claimed",level:2},{value:"How can I move a library to a different folder?",id:"how-can-i-move-a-library-to-a-different-folder",level:2},{value:"Scan doesn't pick up new files under mergerfs",id:"scan-doesnt-pick-up-new-files-under-mergerfs",level:2},{value:"How to enable support for Jpeg XL?",id:"how-to-enable-support-for-jpeg-xl",level:2},{value:"Docker on Raspberry PI arm32: No monotonic clock was available",id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available",level:2}],m={toc:p},d="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,o.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"frequently-asked-questions"},"Frequently Asked Questions"),(0,n.kt)("h2",{id:"i-forgot-my-password"},"I forgot my password"),(0,n.kt)("p",null,"Either ask an admin to reset your password, or use the ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/cli#reset-password-for-a-user"},"Command Line Interface")," to reset it by yourself."),(0,n.kt)("h2",{id:"where-can-i-find-the-log-files"},"Where can I find the log files?"),(0,n.kt)("p",null,"By default (if you haven't changed the configuration), log files are located:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"on the Windows app: ",(0,n.kt)("inlineCode",{parentName:"li"},"%LOCALAPPDATA%/Komga/logs/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on the macOS app: ",(0,n.kt)("inlineCode",{parentName:"li"},"~/Library/Logs/Komga/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on Windows: ",(0,n.kt)("inlineCode",{parentName:"li"},"%USERPROFILE%/.komga/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on macOS or Unix: ",(0,n.kt)("inlineCode",{parentName:"li"},"~/.komga/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on Docker: in the directory you mounted as ",(0,n.kt)("inlineCode",{parentName:"li"},"/config"),", in a subdirectory called ",(0,n.kt)("inlineCode",{parentName:"li"},"logs"))),(0,n.kt)("h2",{id:"how-to-enable-debug-or-trace-logs"},"How to enable DEBUG or TRACE logs?"),(0,n.kt)("h3",{id:"via-an-applicationyml"},"Via an ",(0,n.kt)("inlineCode",{parentName:"h3"},"application.yml")),(0,n.kt)("p",null,"Add the following key in your ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"logging.level.org.gotson.komga: DEBUG\n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"logging.level.org.gotson.komga: TRACE\n")),(0,n.kt)("h3",{id:"using-the-jar-via-the-command-line"},"Using the ",(0,n.kt)("inlineCode",{parentName:"h3"},"jar")," via the command line"),(0,n.kt)("p",null,"Start the ",(0,n.kt)("inlineCode",{parentName:"p"},"jar")," with the following option:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=DEBUG\n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=TRACE\n")),(0,n.kt)("h3",{id:"using-docker"},"Using Docker"),(0,n.kt)("p",null,"Add the following environment variable:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOGGING_LEVEL_ORG_GOTSON_KOMGA=DEBUG\n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOGGING_LEVEL_ORG_GOTSON_KOMGA=TRACE\n")),(0,n.kt)("h2",{id:"komga-seems-slow-how-can-i-check-whats-going-on"},"Komga seems slow, how can I check what's going on?"),(0,n.kt)("p",null,"If any activity is going on, an animated yellow bar will appear below the top-left logo. Hover your cursor over the bar to see the details of all pending tasks."),(0,n.kt)("video",{controls:!0,width:"250"},(0,n.kt)("source",{src:"/assets/media/faq/server-activity.webm",type:"video/webm"}),"Sorry, your browser doesn't support embedded videos."),(0,n.kt)("h2",{id:"the-memory-consumption-is-huge"},"The memory consumption is huge"),(0,n.kt)("p",null,"TL;DR: The operating system ",(0,n.kt)("em",{parentName:"p"},"does not")," report the real memory usage of the application, so don't look at those figures."),(0,n.kt)("p",null,"Komga runs on the Java Virtual Machine (JVM). The JVM works differently than other native programs in regard to memory consumption.\nOn startup, the JVM will ",(0,n.kt)("em",{parentName:"p"},"reserve")," some memory from the OS, but that doesn't mean this memory is used by the application. If the OS needs to reclaim that memory, the JVM will try to release it."),(0,n.kt)("p",null,"By default, the JVM would reserve 1/4th of the physical memory (depends on the total memory and JVM version), for instance if you have 32 Gb of memory, the JVM would reserve 8 Gb."),(0,n.kt)("p",null,"To increase or limit the maximum memory, see ",(0,n.kt)("a",{parentName:"p",href:"/docs/installation/jar#increase-memory-limit"},"here")," (jar) and ",(0,n.kt)("a",{parentName:"p",href:"/docs/installation/docker#increase-memory-limit"},"here")," (Docker)."),(0,n.kt)("h2",{id:"how-can-i-sync-reading-progress-with-tracker-websites"},"How can I sync reading progress with tracker websites?"),(0,n.kt)("p",null,"Komga does not support this outside the box."),(0,n.kt)("p",null,"You can try ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MALSync/MALSync"},"MAL-Sync")," which integrates with Komga and works with MyAnimeList, Kitsu, Anilist and others."),(0,n.kt)("h2",{id:"webreader-double-pages-are-not-showing-as-single-page"},"Webreader double pages are not showing as single page"),(0,n.kt)("p",null,"The double pages feature of the webreader requires image sizes to be available. This feature was added in v",(0,n.kt)("inlineCode",{parentName:"p"},"0.51.0"),". If your books have been analyzed before that version, you will need to re-analyze them in order for the double pages feature to work properly."),(0,n.kt)("h2",{id:"media-type-applicationx-7z-compressed-is-not-supported"},"Media type application/x-7z-compressed is not supported"),(0,n.kt)("p",null,"Your files are compressed using 7zip, which is not supported. Extract your archives and compress them again using the ",(0,n.kt)("inlineCode",{parentName:"p"},"zip")," format."),(0,n.kt)("h2",{id:"my-booksseries-show-a-different-name-than-the-filesfolders"},"My books/series show a different name than the files/folders"),(0,n.kt)("p",null,"Komga automatically import metadata from ",(0,n.kt)("inlineCode",{parentName:"p"},"EPUB")," files and from ",(0,n.kt)("inlineCode",{parentName:"p"},"ComicInfo.xml")," for ",(0,n.kt)("inlineCode",{parentName:"p"},"cbz"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"cbr"),". The imported metadata will override the file/folder name."),(0,n.kt)("h2",{id:"this-server-has-already-been-claimed"},"This server has already been claimed"),(0,n.kt)("p",null,"The server cannot be claimed if a user already exists in the database. It can happen when you start Komga for the first time without the ",(0,n.kt)("inlineCode",{parentName:"p"},"claim")," profile as Komga will generate a default user."),(0,n.kt)("p",null,"You can solve the issue by deleting the database. By default it is located in ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.komga/database.sqlite"),". ",(0,n.kt)("inlineCode",{parentName:"p"},"~")," is your home directory on Unix, and your User profile on Windows."),(0,n.kt)("h2",{id:"how-can-i-move-a-library-to-a-different-folder"},"How can I move a library to a different folder?"),(0,n.kt)("p",null,"You can follow those steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Make sure ",(0,n.kt)("a",{parentName:"li",href:"/docs/guides/libraries#compute-hash-for-files"},"File Hashing")," is enabled on the library."),(0,n.kt)("li",{parentName:"ol"},"Disable ",(0,n.kt)("a",{parentName:"li",href:"/docs/guides/trash#automatically-empty-trash"},"automatically emptying the trash")," for the library."),(0,n.kt)("li",{parentName:"ol"},"Perform a scan on the library and let all tasks finish. This will ensure all files are hashed."),(0,n.kt)("li",{parentName:"ol"},"Stop Komga."),(0,n.kt)("li",{parentName:"ol"},"Move/copy the files to the new folder."),(0,n.kt)("li",{parentName:"ol"},"Start Komga."),(0,n.kt)("li",{parentName:"ol"},"Edit the library and choose the new folder as the library root directory."),(0,n.kt)("li",{parentName:"ol"},"A scan will be triggered automatically after saving the library. The scan could take some time depending on the size of the library."),(0,n.kt)("li",{parentName:"ol"},"Once the scan is finished, the series and books should have been matched with the files in the new folder.")),(0,n.kt)("h2",{id:"scan-doesnt-pick-up-new-files-under-mergerfs"},"Scan doesn't pick up new files under mergerfs"),(0,n.kt)("p",null,"Add ",(0,n.kt)("inlineCode",{parentName:"p"},"func.getattr=newest")," to the options in your ",(0,n.kt)("inlineCode",{parentName:"p"},"/etc/fstab")," entry for the mergerfs volume. By default, mergerfs doesn't update the modified times for everything for performance reasons. This forces it to. In most cases the performance impact is negligible. "),(0,n.kt)("p",null,"Example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"/media/user/disk* /media/user/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,minfreespace=50G,category.create=mfs,func.getattr=newest,fsname=mergerfs 0 0\n")),(0,n.kt)("h2",{id:"how-to-enable-support-for-jpeg-xl"},"How to enable support for Jpeg XL?"),(0,n.kt)("p",null,"Jpeg XL is supported by default in the official Docker image for ",(0,n.kt)("inlineCode",{parentName:"p"},"linux/amd64")," only."),(0,n.kt)("p",null,"In order for Komga to handle Jpeg XL files (",(0,n.kt)("inlineCode",{parentName:"p"},".jxl"),"), you will need to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"install ",(0,n.kt)("inlineCode",{parentName:"li"},"libjxl")," (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/gotson/NightMonkeys/tree/main/imageio-jxl"},"here")," for some known installation methods)"),(0,n.kt)("li",{parentName:"ul"},"follow the ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/gotson/NightMonkeys#requirements"},"requirements")," to launch ",(0,n.kt)("inlineCode",{parentName:"li"},"java")," with the correct arguments and environment variable")),(0,n.kt)("h2",{id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available"},"Docker on Raspberry PI arm32: No monotonic clock was available"),(0,n.kt)("p",null,"If you encounter the following message when starting the container:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-log"},"OpenJDK Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes\n")),(0,n.kt)("p",null,"Your host system needs to have installed:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Docker version ",(0,n.kt)("inlineCode",{parentName:"li"},"19.03.9")," or newer"),(0,n.kt)("li",{parentName:"ul"},"libseccomp version ",(0,n.kt)("inlineCode",{parentName:"li"},"2.4.2")," or newer")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[836],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>h});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),p=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=p(a),u=n,h=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return a?o.createElement(h,i(i({ref:t},m),{},{components:a})):o.createElement(h,i({ref:t},m))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var o=a(7462),n=(a(7294),a(3905));const r={},i="Frequently Asked Questions",l={unversionedId:"faq",id:"faq",title:"Frequently Asked Questions",description:"I forgot my password",source:"@site/docs/faq.md",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/faq.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Community",permalink:"/docs/community"}},s={},p=[{value:"I forgot my password",id:"i-forgot-my-password",level:2},{value:"Where can I find the log files?",id:"where-can-i-find-the-log-files",level:2},{value:"How to enable DEBUG or TRACE logs?",id:"how-to-enable-debug-or-trace-logs",level:2},{value:"Via an application.yml",id:"via-an-applicationyml",level:3},{value:"Using the jar via the command line",id:"using-the-jar-via-the-command-line",level:3},{value:"Using Docker",id:"using-docker",level:3},{value:"Komga seems slow, how can I check what's going on?",id:"komga-seems-slow-how-can-i-check-whats-going-on",level:2},{value:"The memory consumption is huge",id:"the-memory-consumption-is-huge",level:2},{value:"How can I sync reading progress with tracker websites?",id:"how-can-i-sync-reading-progress-with-tracker-websites",level:2},{value:"Webreader double pages are not showing as single page",id:"webreader-double-pages-are-not-showing-as-single-page",level:2},{value:"Media type application/x-7z-compressed is not supported",id:"media-type-applicationx-7z-compressed-is-not-supported",level:2},{value:"My books/series show a different name than the files/folders",id:"my-booksseries-show-a-different-name-than-the-filesfolders",level:2},{value:"This server has already been claimed",id:"this-server-has-already-been-claimed",level:2},{value:"How can I move a library to a different folder?",id:"how-can-i-move-a-library-to-a-different-folder",level:2},{value:"Scan doesn't pick up new files under mergerfs",id:"scan-doesnt-pick-up-new-files-under-mergerfs",level:2},{value:"How to enable support for Jpeg XL?",id:"how-to-enable-support-for-jpeg-xl",level:2},{value:"Docker on Raspberry PI arm32: No monotonic clock was available",id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available",level:2}],m={toc:p},d="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,o.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"frequently-asked-questions"},"Frequently Asked Questions"),(0,n.kt)("h2",{id:"i-forgot-my-password"},"I forgot my password"),(0,n.kt)("p",null,"Either ask an admin to reset your password, or use the ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/cli#reset-password-for-a-user"},"Command Line Interface")," to reset it by yourself."),(0,n.kt)("h2",{id:"where-can-i-find-the-log-files"},"Where can I find the log files?"),(0,n.kt)("p",null,"By default (if you haven't changed the configuration), log files are located:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"on the Windows app: ",(0,n.kt)("inlineCode",{parentName:"li"},"%LOCALAPPDATA%/Komga/logs/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on the macOS app: ",(0,n.kt)("inlineCode",{parentName:"li"},"~/Library/Logs/Komga/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on Windows: ",(0,n.kt)("inlineCode",{parentName:"li"},"%USERPROFILE%/.komga/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on macOS or Unix: ",(0,n.kt)("inlineCode",{parentName:"li"},"~/.komga/komga.log")),(0,n.kt)("li",{parentName:"ul"},"on Docker: in the directory you mounted as ",(0,n.kt)("inlineCode",{parentName:"li"},"/config"),", in a subdirectory called ",(0,n.kt)("inlineCode",{parentName:"li"},"logs"))),(0,n.kt)("h2",{id:"how-to-enable-debug-or-trace-logs"},"How to enable DEBUG or TRACE logs?"),(0,n.kt)("h3",{id:"via-an-applicationyml"},"Via an ",(0,n.kt)("inlineCode",{parentName:"h3"},"application.yml")),(0,n.kt)("p",null,"Add the following key in your ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"logging.level.org.gotson.komga: DEBUG\n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"logging.level.org.gotson.komga: TRACE\n")),(0,n.kt)("h3",{id:"using-the-jar-via-the-command-line"},"Using the ",(0,n.kt)("inlineCode",{parentName:"h3"},"jar")," via the command line"),(0,n.kt)("p",null,"Start the ",(0,n.kt)("inlineCode",{parentName:"p"},"jar")," with the following option:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=DEBUG\n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=TRACE\n")),(0,n.kt)("h3",{id:"using-docker"},"Using Docker"),(0,n.kt)("p",null,"Add the following environment variable:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOGGING_LEVEL_ORG_GOTSON_KOMGA=DEBUG\n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOGGING_LEVEL_ORG_GOTSON_KOMGA=TRACE\n")),(0,n.kt)("h2",{id:"komga-seems-slow-how-can-i-check-whats-going-on"},"Komga seems slow, how can I check what's going on?"),(0,n.kt)("p",null,"If any activity is going on, an animated yellow bar will appear below the top-left logo. Hover your cursor over the bar to see the details of all pending tasks."),(0,n.kt)("video",{controls:!0,width:"250"},(0,n.kt)("source",{src:"/assets/media/faq/server-activity.webm",type:"video/webm"}),"Sorry, your browser doesn't support embedded videos."),(0,n.kt)("h2",{id:"the-memory-consumption-is-huge"},"The memory consumption is huge"),(0,n.kt)("p",null,"TL;DR: The operating system ",(0,n.kt)("em",{parentName:"p"},"does not")," report the real memory usage of the application, so don't look at those figures."),(0,n.kt)("p",null,"Komga runs on the Java Virtual Machine (JVM). The JVM works differently than other native programs in regard to memory consumption.\nOn startup, the JVM will ",(0,n.kt)("em",{parentName:"p"},"reserve")," some memory from the OS, but that doesn't mean this memory is used by the application. If the OS needs to reclaim that memory, the JVM will try to release it."),(0,n.kt)("p",null,"By default, the JVM would reserve 1/4th of the physical memory (depends on the total memory and JVM version), for instance if you have 32 Gb of memory, the JVM would reserve 8 Gb."),(0,n.kt)("p",null,"To increase or limit the maximum memory, see ",(0,n.kt)("a",{parentName:"p",href:"/docs/installation/jar#increase-memory-limit"},"here")," (jar) and ",(0,n.kt)("a",{parentName:"p",href:"/docs/installation/docker#increase-memory-limit"},"here")," (Docker)."),(0,n.kt)("h2",{id:"how-can-i-sync-reading-progress-with-tracker-websites"},"How can I sync reading progress with tracker websites?"),(0,n.kt)("p",null,"Komga does not support this outside the box."),(0,n.kt)("p",null,"You can try ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MALSync/MALSync"},"MAL-Sync")," which integrates with Komga and works with MyAnimeList, Kitsu, Anilist and others."),(0,n.kt)("h2",{id:"webreader-double-pages-are-not-showing-as-single-page"},"Webreader double pages are not showing as single page"),(0,n.kt)("p",null,"The double pages feature of the webreader requires image sizes to be available. This feature was added in v",(0,n.kt)("inlineCode",{parentName:"p"},"0.51.0"),". If your books have been analyzed before that version, you will need to re-analyze them in order for the double pages feature to work properly."),(0,n.kt)("h2",{id:"media-type-applicationx-7z-compressed-is-not-supported"},"Media type application/x-7z-compressed is not supported"),(0,n.kt)("p",null,"Your files are compressed using 7zip, which is not supported. Extract your archives and compress them again using the ",(0,n.kt)("inlineCode",{parentName:"p"},"zip")," format."),(0,n.kt)("h2",{id:"my-booksseries-show-a-different-name-than-the-filesfolders"},"My books/series show a different name than the files/folders"),(0,n.kt)("p",null,"Komga automatically import metadata from ",(0,n.kt)("inlineCode",{parentName:"p"},"EPUB")," files and from ",(0,n.kt)("inlineCode",{parentName:"p"},"ComicInfo.xml")," for ",(0,n.kt)("inlineCode",{parentName:"p"},"cbz"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"cbr"),". The imported metadata will override the file/folder name."),(0,n.kt)("h2",{id:"this-server-has-already-been-claimed"},"This server has already been claimed"),(0,n.kt)("p",null,"The server cannot be claimed if a user already exists in the database. It can happen when you start Komga for the first time without the ",(0,n.kt)("inlineCode",{parentName:"p"},"claim")," profile as Komga will generate a default user."),(0,n.kt)("p",null,"You can solve the issue by deleting the database. By default it is located in ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.komga/database.sqlite"),". ",(0,n.kt)("inlineCode",{parentName:"p"},"~")," is your home directory on Unix, and your User profile on Windows."),(0,n.kt)("h2",{id:"how-can-i-move-a-library-to-a-different-folder"},"How can I move a library to a different folder?"),(0,n.kt)("p",null,"You can follow those steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Make sure ",(0,n.kt)("a",{parentName:"li",href:"/docs/guides/libraries#compute-hash-for-files"},"File Hashing")," is enabled on the library."),(0,n.kt)("li",{parentName:"ol"},"Disable ",(0,n.kt)("a",{parentName:"li",href:"/docs/guides/trash#automatically-empty-trash"},"automatically emptying the trash")," for the library."),(0,n.kt)("li",{parentName:"ol"},"Perform a scan on the library and let all tasks finish. This will ensure all files are hashed."),(0,n.kt)("li",{parentName:"ol"},"Stop Komga."),(0,n.kt)("li",{parentName:"ol"},"Move/copy the files to the new folder."),(0,n.kt)("li",{parentName:"ol"},"Start Komga."),(0,n.kt)("li",{parentName:"ol"},"Edit the library and choose the new folder as the library root directory."),(0,n.kt)("li",{parentName:"ol"},"A scan will be triggered automatically after saving the library. The scan could take some time depending on the size of the library."),(0,n.kt)("li",{parentName:"ol"},"Once the scan is finished, the series and books should have been matched with the files in the new folder.")),(0,n.kt)("h2",{id:"scan-doesnt-pick-up-new-files-under-mergerfs"},"Scan doesn't pick up new files under mergerfs"),(0,n.kt)("p",null,"Add ",(0,n.kt)("inlineCode",{parentName:"p"},"func.getattr=newest")," to the options in your ",(0,n.kt)("inlineCode",{parentName:"p"},"/etc/fstab")," entry for the mergerfs volume. By default, mergerfs doesn't update the modified times for everything for performance reasons. This forces it to. In most cases the performance impact is negligible. "),(0,n.kt)("p",null,"Example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"/media/user/disk* /media/user/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,minfreespace=50G,category.create=mfs,func.getattr=newest,fsname=mergerfs 0 0\n")),(0,n.kt)("h2",{id:"how-to-enable-support-for-jpeg-xl"},"How to enable support for Jpeg XL?"),(0,n.kt)("p",null,"Jpeg XL is supported by default in the official Docker image for ",(0,n.kt)("inlineCode",{parentName:"p"},"linux/amd64")," only."),(0,n.kt)("p",null,"In order for Komga to handle Jpeg XL files (",(0,n.kt)("inlineCode",{parentName:"p"},".jxl"),"), you will need to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"install ",(0,n.kt)("inlineCode",{parentName:"li"},"libjxl")," (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/gotson/NightMonkeys/tree/main/imageio-jxl"},"here")," for some known installation methods)"),(0,n.kt)("li",{parentName:"ul"},"follow the ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/gotson/NightMonkeys#requirements"},"requirements")," to launch ",(0,n.kt)("inlineCode",{parentName:"li"},"java")," with the correct arguments and environment variable")),(0,n.kt)("h2",{id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available"},"Docker on Raspberry PI arm32: No monotonic clock was available"),(0,n.kt)("p",null,"If you encounter the following message when starting the container:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-log"},"OpenJDK Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes\n")),(0,n.kt)("p",null,"Your host system needs to have installed:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Docker version ",(0,n.kt)("inlineCode",{parentName:"li"},"19.03.9")," or newer"),(0,n.kt)("li",{parentName:"ul"},"libseccomp version ",(0,n.kt)("inlineCode",{parentName:"li"},"2.4.2")," or newer")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0920ba86.224e779c.js b/assets/js/0920ba86.bf4fe39e.js similarity index 98% rename from assets/js/0920ba86.224e779c.js rename to assets/js/0920ba86.bf4fe39e.js index dc1e6a2b..dbb70210 100644 --- a/assets/js/0920ba86.224e779c.js +++ b/assets/js/0920ba86.bf4fe39e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[2239],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var o=a.createContext({}),c=function(e){var t=a.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return a.createElement(o.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,s=e.originalType,o=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(r),g=n,m=d["".concat(o,".").concat(g)]||d[g]||p[g]||s;return r?a.createElement(m,i(i({ref:t},u),{},{components:r})):a.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var s=r.length,i=new Array(s);i[0]=g;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));const s={},i="User accounts",l={unversionedId:"guides/user-accounts",id:"guides/user-accounts",title:"User accounts",description:"The administrator of a Komga server has the ability to create other User Accounts for that server.",source:"@site/docs/guides/user-accounts.md",sourceDirName:"guides",slug:"/guides/user-accounts",permalink:"/docs/guides/user-accounts",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/user-accounts.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"},next:{title:"Server settings & management",permalink:"/docs/guides/server-settings"}},o={},c=[{value:"Creating Users",id:"creating-users",level:2},{value:"User Roles",id:"user-roles",level:2},{value:"Administrator",id:"administrator",level:3},{value:"Page Streaming",id:"page-streaming",level:3},{value:"File Download",id:"file-download",level:3},{value:"Shared Libraries",id:"shared-libraries",level:2},{value:"Content Restrictions",id:"content-restrictions",level:2},{value:"Age Rating",id:"age-rating",level:3},{value:"Labels",id:"labels",level:3},{value:"Multiple restrictions",id:"multiple-restrictions",level:3},{value:"Deleting Users",id:"deleting-users",level:2}],u={toc:c},d="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"user-accounts"},"User accounts"),(0,n.kt)("p",null,"The administrator of a Komga server has the ability to create other User Accounts for that server."),(0,n.kt)("p",null,"You can manage Users in ",(0,n.kt)("em",{parentName:"p"},"Server Settings > Users"),"."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/users-management.png",style:{maxHeight:"300px"},alt:"Users management"}),(0,n.kt)("h2",{id:"creating-users"},"Creating Users"),(0,n.kt)("p",null,"You can add a user by clicking on the ",(0,n.kt)("em",{parentName:"p"},"+")," button."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/add-user.png",style:{maxHeight:"200px"},alt:"Add User"}),(0,n.kt)("p",null,"A dialog will show up. Fill in all the required information, and press ",(0,n.kt)("em",{parentName:"p"},"Add"),"."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/add-user-dialog.png",style:{maxHeight:"400px"},alt:"Add User Dialog"}),(0,n.kt)("h2",{id:"user-roles"},"User Roles"),(0,n.kt)("p",null,"Users can have different roles, giving them the ability to do certain things."),(0,n.kt)("h3",{id:"administrator"},"Administrator"),(0,n.kt)("p",null,"An administrator can perform all the management actions:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"add, edit, and delete libraries"),(0,n.kt)("li",{parentName:"ul"},"add, edit, and delete users"),(0,n.kt)("li",{parentName:"ul"},"add, edit, and delete collections"),(0,n.kt)("li",{parentName:"ul"},"edit series and book metadata"),(0,n.kt)("li",{parentName:"ul"},"manually scan, analyze and refresh metadata")),(0,n.kt)("h3",{id:"page-streaming"},"Page Streaming"),(0,n.kt)("p",null,"A user with this role will be able to stream individual pages, for example to read using the Webreader."),(0,n.kt)("h3",{id:"file-download"},"File Download"),(0,n.kt)("p",null,"A user with this role will be able to download the file of a book."),(0,n.kt)("h2",{id:"shared-libraries"},"Shared Libraries"),(0,n.kt)("p",null,"An administrator can limit what libraries users can access. This is done via the ",(0,n.kt)("em",{parentName:"p"},"Edit Restrictions")," button."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/edit-libraries.png",style:{maxHeight:"50px"},alt:"Edit Restrictions"}),(0,n.kt)("p",null,"Choose the libraries the user will be able to access, or select ",(0,n.kt)("em",{parentName:"p"},"All libraries")," for unrestricted access (default option)."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/edit-libraries-dialog.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),(0,n.kt)("h2",{id:"content-restrictions"},"Content Restrictions"),(0,n.kt)("p",null,"Content restrictions lets you control more finely the content you share. You can select specific age rating as well as content that you\u2019ve set with a specific Label."),(0,n.kt)("p",null,"Content restriction is performed at series level, and will also apply to books, collections and reading lists. "),(0,n.kt)("h3",{id:"age-rating"},"Age Rating"),(0,n.kt)("p",null,"Select which age rating you wish to only allow or exclude. For instance, if you choose to only allow content under 10 as the restriction, then only content that has an age rating of 10 or under will be shared . If you choose to exclude content over 16 then those will be hidden."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/restriction-age-allow.png",style:{maxHeight:"400px"},alt:"Age Restriction Allow under"}),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/restriction-age-exclude.png",style:{maxHeight:"400px"},alt:"Age Restriction Exclude over"}),(0,n.kt)("h3",{id:"labels"},"Labels"),(0,n.kt)("p",null,"You can create arbitrary Labels when editing library content. When sharing, you can then choose to allow one or more Labels to have content matching those Labels shared. You can also exclude labels."),(0,n.kt)("p",null,"Labels are defined on Series:"),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/series-sharing.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),(0,n.kt)("h3",{id:"multiple-restrictions"},"Multiple restrictions"),(0,n.kt)("p",null,"When combining multiple restrictions, the following rules apply:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Exclusion rules have always priority over allow rules."),(0,n.kt)("li",{parentName:"ul"},"Allow rules apply with an ",(0,n.kt)("em",{parentName:"li"},"OR"),' condition: for example allowing a user to access content rated 10 or under, or labelled "kids", the user will be able to access content matching one or the other.')),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/restrictions-dialog.png",style:{maxHeight:"400px"},alt:"Edit Restrictions"}),(0,n.kt)("h2",{id:"deleting-users"},"Deleting Users"),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"Deleting a user will remove all read progress for this user."),(0,n.kt)("p",{parentName:"admonition"},"This cannot be undone.")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[2239],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var o=a.createContext({}),c=function(e){var t=a.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return a.createElement(o.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,s=e.originalType,o=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(r),g=n,m=d["".concat(o,".").concat(g)]||d[g]||p[g]||s;return r?a.createElement(m,i(i({ref:t},u),{},{components:r})):a.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var s=r.length,i=new Array(s);i[0]=g;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));const s={},i="User accounts",l={unversionedId:"guides/user-accounts",id:"guides/user-accounts",title:"User accounts",description:"The administrator of a Komga server has the ability to create other User Accounts for that server.",source:"@site/docs/guides/user-accounts.md",sourceDirName:"guides",slug:"/guides/user-accounts",permalink:"/docs/guides/user-accounts",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/user-accounts.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"},next:{title:"Server settings & management",permalink:"/docs/guides/server-settings"}},o={},c=[{value:"Creating Users",id:"creating-users",level:2},{value:"User Roles",id:"user-roles",level:2},{value:"Administrator",id:"administrator",level:3},{value:"Page Streaming",id:"page-streaming",level:3},{value:"File Download",id:"file-download",level:3},{value:"Shared Libraries",id:"shared-libraries",level:2},{value:"Content Restrictions",id:"content-restrictions",level:2},{value:"Age Rating",id:"age-rating",level:3},{value:"Labels",id:"labels",level:3},{value:"Multiple restrictions",id:"multiple-restrictions",level:3},{value:"Deleting Users",id:"deleting-users",level:2}],u={toc:c},d="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"user-accounts"},"User accounts"),(0,n.kt)("p",null,"The administrator of a Komga server has the ability to create other User Accounts for that server."),(0,n.kt)("p",null,"You can manage Users in ",(0,n.kt)("em",{parentName:"p"},"Server Settings > Users"),"."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/users-management.png",style:{maxHeight:"300px"},alt:"Users management"}),(0,n.kt)("h2",{id:"creating-users"},"Creating Users"),(0,n.kt)("p",null,"You can add a user by clicking on the ",(0,n.kt)("em",{parentName:"p"},"+")," button."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/add-user.png",style:{maxHeight:"200px"},alt:"Add User"}),(0,n.kt)("p",null,"A dialog will show up. Fill in all the required information, and press ",(0,n.kt)("em",{parentName:"p"},"Add"),"."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/add-user-dialog.png",style:{maxHeight:"400px"},alt:"Add User Dialog"}),(0,n.kt)("h2",{id:"user-roles"},"User Roles"),(0,n.kt)("p",null,"Users can have different roles, giving them the ability to do certain things."),(0,n.kt)("h3",{id:"administrator"},"Administrator"),(0,n.kt)("p",null,"An administrator can perform all the management actions:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"add, edit, and delete libraries"),(0,n.kt)("li",{parentName:"ul"},"add, edit, and delete users"),(0,n.kt)("li",{parentName:"ul"},"add, edit, and delete collections"),(0,n.kt)("li",{parentName:"ul"},"edit series and book metadata"),(0,n.kt)("li",{parentName:"ul"},"manually scan, analyze and refresh metadata")),(0,n.kt)("h3",{id:"page-streaming"},"Page Streaming"),(0,n.kt)("p",null,"A user with this role will be able to stream individual pages, for example to read using the Webreader."),(0,n.kt)("h3",{id:"file-download"},"File Download"),(0,n.kt)("p",null,"A user with this role will be able to download the file of a book."),(0,n.kt)("h2",{id:"shared-libraries"},"Shared Libraries"),(0,n.kt)("p",null,"An administrator can limit what libraries users can access. This is done via the ",(0,n.kt)("em",{parentName:"p"},"Edit Restrictions")," button."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/edit-libraries.png",style:{maxHeight:"50px"},alt:"Edit Restrictions"}),(0,n.kt)("p",null,"Choose the libraries the user will be able to access, or select ",(0,n.kt)("em",{parentName:"p"},"All libraries")," for unrestricted access (default option)."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/edit-libraries-dialog.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),(0,n.kt)("h2",{id:"content-restrictions"},"Content Restrictions"),(0,n.kt)("p",null,"Content restrictions lets you control more finely the content you share. You can select specific age rating as well as content that you\u2019ve set with a specific Label."),(0,n.kt)("p",null,"Content restriction is performed at series level, and will also apply to books, collections and reading lists. "),(0,n.kt)("h3",{id:"age-rating"},"Age Rating"),(0,n.kt)("p",null,"Select which age rating you wish to only allow or exclude. For instance, if you choose to only allow content under 10 as the restriction, then only content that has an age rating of 10 or under will be shared . If you choose to exclude content over 16 then those will be hidden."),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/restriction-age-allow.png",style:{maxHeight:"400px"},alt:"Age Restriction Allow under"}),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/restriction-age-exclude.png",style:{maxHeight:"400px"},alt:"Age Restriction Exclude over"}),(0,n.kt)("h3",{id:"labels"},"Labels"),(0,n.kt)("p",null,"You can create arbitrary Labels when editing library content. When sharing, you can then choose to allow one or more Labels to have content matching those Labels shared. You can also exclude labels."),(0,n.kt)("p",null,"Labels are defined on Series:"),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/series-sharing.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),(0,n.kt)("h3",{id:"multiple-restrictions"},"Multiple restrictions"),(0,n.kt)("p",null,"When combining multiple restrictions, the following rules apply:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Exclusion rules have always priority over allow rules."),(0,n.kt)("li",{parentName:"ul"},"Allow rules apply with an ",(0,n.kt)("em",{parentName:"li"},"OR"),' condition: for example allowing a user to access content rated 10 or under, or labelled "kids", the user will be able to access content matching one or the other.')),(0,n.kt)("img",{src:"/assets/media/guides/user-accounts/restrictions-dialog.png",style:{maxHeight:"400px"},alt:"Edit Restrictions"}),(0,n.kt)("h2",{id:"deleting-users"},"Deleting Users"),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"Deleting a user will remove all read progress for this user."),(0,n.kt)("p",{parentName:"admonition"},"This cannot be undone.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0bf9748d.b0c54f69.js b/assets/js/0bf9748d.55bafa49.js similarity index 99% rename from assets/js/0bf9748d.b0c54f69.js rename to assets/js/0bf9748d.55bafa49.js index 1c77a3b2..cb612fd5 100644 --- a/assets/js/0bf9748d.b0c54f69.js +++ b/assets/js/0bf9748d.55bafa49.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9847],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>c});var i=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=i.createContext({}),d=function(e){var t=i.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},m=function(e){var t=d(e.components);return i.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),p=d(a),h=n,c=p["".concat(s,".").concat(h)]||p[h]||u[h]||l;return a?i.createElement(c,r(r({ref:t},m),{},{components:a})):i.createElement(c,r({ref:t},m))}));function c(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,r=new Array(l);r[0]=h;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[p]="string"==typeof e?e:n,r[1]=o;for(var d=2;d{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var i=a(7462),n=(a(7294),a(3905));const l={},r="Scanning, Analyzing and Refreshing Metadata",o={unversionedId:"guides/scan-analysis-refresh",id:"guides/scan-analysis-refresh",title:"Scanning, Analyzing and Refreshing Metadata",description:"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.",source:"@site/docs/guides/scan-analysis-refresh.md",sourceDirName:"guides",slug:"/guides/scan-analysis-refresh",permalink:"/docs/guides/scan-analysis-refresh",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/scan-analysis-refresh.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"},next:{title:"One-Shots",permalink:"/docs/guides/oneshots"}},s={},d=[{value:"Scan Library Files",id:"scan-library-files",level:2},{value:"Deep scan",id:"deep-scan",level:3},{value:"What happens during a Scan?",id:"what-happens-during-a-scan",level:2},{value:"Analyze books",id:"analyze-books",level:2},{value:"What happens during Analysis?",id:"what-happens-during-analysis",level:3},{value:"Gather media properties",id:"gather-media-properties",level:4},{value:"Generate default artwork",id:"generate-default-artwork",level:4},{value:"Analyze your content",id:"analyze-your-content",level:3},{value:"Media Analysis screen",id:"media-analysis-screen",level:3},{value:"Refresh metadata",id:"refresh-metadata",level:2},{value:"Import metadata for CBR/CBZ containing a ComicInfo.xml file",id:"import-metadata-for-cbrcbz-containing-a-comicinfoxml-file",level:3},{value:"Book metadata",id:"book-metadata",level:4},{value:"Series metadata",id:"series-metadata",level:4},{value:"Collections",id:"collections",level:4},{value:"Read lists",id:"read-lists",level:4},{value:"StoryArcNumber",id:"storyarcnumber",level:5},{value:"Import metadata from EPUB files",id:"import-metadata-from-epub-files",level:3},{value:"Book metadata",id:"book-metadata-1",level:4},{value:"Series metadata",id:"series-metadata-1",level:4},{value:"Import metadata generated by Mylar",id:"import-metadata-generated-by-mylar",level:3},{value:"Import local media assets",id:"import-local-media-assets",level:3},{value:"Local artwork",id:"local-artwork",level:4},{value:"Import ISBN within barcode",id:"import-isbn-within-barcode",level:3},{value:"ISBN barcode",id:"isbn-barcode",level:4}],m={toc:d},p="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,i.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"scanning-analyzing-and-refreshing-metadata"},"Scanning, Analyzing and Refreshing Metadata"),(0,n.kt)("p",null,"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things."),(0,n.kt)("h2",{id:"scan-library-files"},"Scan Library Files"),(0,n.kt)("p",null,"Scanning a library makes Komga check its folders and sub-folders for new or removed books. If it finds new media, it then pulls it into the library. You can think of scanning as \u201ccheck for new or changed content\u201d."),(0,n.kt)("p",null,"All files that have changed after a scan will be Analyzed."),(0,n.kt)("p",null,"You should Scan Library Files if you have:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Added or deleted files or folders"),(0,n.kt)("li",{parentName:"ul"},"Renamed a file or folder"),(0,n.kt)("li",{parentName:"ul"},"Moved files or folders from one location to another")),(0,n.kt)("p",null,"By default, Komga will scan your libraries regularly."),(0,n.kt)("h3",{id:"deep-scan"},"Deep scan"),(0,n.kt)("p",null,"This will force the scanner to compare all scanned books with the ones stored in the database. Normally this is not required, as Komga uses the last modified time of the parent folders to decide whether to compare books, but some filesystems may behave differently."),(0,n.kt)("p",null,"Trigger a Deep Scan if Komga is missing some books after a scan."),(0,n.kt)("h2",{id:"what-happens-during-a-scan"},"What happens during a Scan?"),(0,n.kt)("p",null,"Komga will generate a library representation of your files on disk. A Komga library does ",(0,n.kt)("em",{parentName:"p"},"not")," represent exactly your folder structure."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Komga will create a ",(0,n.kt)("em",{parentName:"li"},"Series")," for each subfolder of any library, whatever the depth of this subfolder in your directory structure"),(0,n.kt)("li",{parentName:"ul"},"Komga will create a ",(0,n.kt)("em",{parentName:"li"},"Book")," for each file found, and place it inside the ",(0,n.kt)("em",{parentName:"li"},"Series")," corresponding to the parent folder of the file")),(0,n.kt)("h2",{id:"analyze-books"},"Analyze books"),(0,n.kt)("p",null,"Analysis is automatically performed when content is added to your Library. In rare cases, new versions of Komga may update the media analysis capabilities to correct something or add the ability to detect new things. In those cases, content may be re-analyzed when you access it after the new server version is installed."),(0,n.kt)("h3",{id:"what-happens-during-analysis"},"What happens during Analysis?"),(0,n.kt)("p",null,"Whenever an item is added to one of your Libraries, Komga performs some analysis on it to gather information. In addition, all files analyzed will also be refreshed for metadata."),(0,n.kt)("h4",{id:"gather-media-properties"},"Gather media properties"),(0,n.kt)("p",null,"The primary purpose of media analysis is to gather information about that media item. All of the media you add to a Library has properties that are useful to know, such as:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Container: ZIP, RAR, EPUB, PDF, etc."),(0,n.kt)("li",{parentName:"ul"},"Images Format: JPEG, PNG, WEBP, etc.")),(0,n.kt)("p",null,"Why, though? What use are these media properties? Your Server, together with your apps, can use this information to help determine whether (and how) content can be played."),(0,n.kt)("p",null,"For example: Imagine you have a CBR file with WEBP images, but you\u2019re using Internet Explorer (which can\u2019t read WEBP). Since the webreader knows what kind of content your browser can display and since your media analysis detected that the book has WEBP images, your Komga Server can convert those images to a compatible format (like JPEG) for you in order to let you read your book successfully."),(0,n.kt)("h4",{id:"generate-default-artwork"},"Generate default artwork"),(0,n.kt)("p",null,"During analysis, artwork will automatically be grabbed from a book file. The first page will be used for poster/thumbnail type purposes."),(0,n.kt)("h3",{id:"analyze-your-content"},"Analyze your content"),(0,n.kt)("p",null,"You can analyze content in multiple ways: for a book, for a series, or even for an entire Library."),(0,n.kt)("p",null,"Look for the action menu icon ",(0,n.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,n.kt)("em",{parentName:"p"},"Analyze"),"."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Depending on the size of your Library, analysis may take a while.")),(0,n.kt)("h3",{id:"media-analysis-screen"},"Media Analysis screen"),(0,n.kt)("p",null,"You can check all the media for which the analysis did not succeed from the Media Analysis screen. You can access it from ",(0,n.kt)("em",{parentName:"p"},"Media Management > Media Analysis"),"."),(0,n.kt)("p",null,"It will show you all books with a status of:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Error: Komga could not analyze the book. If possible, there will be a comment to describe the error."),(0,n.kt)("li",{parentName:"ul"},"Unsupported: Komga does not support those files. The comment will give you more information.")),(0,n.kt)("a",{href:"/assets/media/guides/scan-analysis-refresh/media-analysis.png"},(0,n.kt)("img",{src:"/assets/media/guides/scan-analysis-refresh/media-analysis.png",style:{maxHeight:"400px"},alt:"Media Analysis"})),(0,n.kt)("h2",{id:"refresh-metadata"},"Refresh metadata"),(0,n.kt)("p",null,"Refreshing Metadata for a library, series, or individual book causes the metadata for the item to be refreshed, even if it already has metadata. You can think of refreshing as \u201cupdate metadata for the requested item even if it already has some\u201d."),(0,n.kt)("p",null,"You should refresh a library or individual item if:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"You\u2019ve changed options for the library"),(0,n.kt)("li",{parentName:"ul"},'You\u2019ve added "local media assets" (such as artwork)')),(0,n.kt)("p",null,"Metadata is gathered from the following sources:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a local ",(0,n.kt)("inlineCode",{parentName:"li"},"ComicInfo.xml")," file located inside a CBZ or CBR"),(0,n.kt)("li",{parentName:"ul"},"the metadata of an EPUB file"),(0,n.kt)("li",{parentName:"ul"},"local media assets")),(0,n.kt)("p",null,"The metadata refresh is dependent of the options of the Library."),(0,n.kt)("h3",{id:"import-metadata-for-cbrcbz-containing-a-comicinfoxml-file"},"Import metadata for CBR/CBZ containing a ComicInfo.xml file"),(0,n.kt)("h4",{id:"book-metadata"},"Book metadata"),(0,n.kt)("p",null,"This will import the following elements from the ",(0,n.kt)("inlineCode",{parentName:"p"},"ComicInfo.xml")," file in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Year"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Month"),", and ",(0,n.kt)("inlineCode",{parentName:"li"},"Day")," to form the ",(0,n.kt)("em",{parentName:"li"},"Release Date")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Writer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Penciller"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Inker"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Colorist"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Letterer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"CoverArtist"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Editor"),", and ",(0,n.kt)("inlineCode",{parentName:"li"},"Translator")," as ",(0,n.kt)("em",{parentName:"li"},"Authors")," with the according role. A value with multiple names separated by a ",(0,n.kt)("inlineCode",{parentName:"li"},",")," will be split in different authors."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Title"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Summary"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Number")," as their Komga equivalent"),(0,n.kt)("li",{parentName:"ul"},"Valid ",(0,n.kt)("inlineCode",{parentName:"li"},"Web")," links as a book link"),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"Tags")," element will be split by ",(0,n.kt)("inlineCode",{parentName:"li"},",")," and added to the book's ",(0,n.kt)("em",{parentName:"li"},"tags")),(0,n.kt)("li",{parentName:"ul"},"If the ",(0,n.kt)("inlineCode",{parentName:"li"},"GTIN")," element contains a valid ISBN, as the book's ",(0,n.kt)("em",{parentName:"li"},"ISBN"))),(0,n.kt)("h4",{id:"series-metadata"},"Series metadata"),(0,n.kt)("p",null,"This will import the following elements from the ",(0,n.kt)("inlineCode",{parentName:"p"},"ComicInfo.xml")," of the Series' books in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"Series")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"Volume")," elements will be used to overwrite the title of the Series, in the form ",(0,n.kt)("inlineCode",{parentName:"li"}," ()"),", or just ",(0,n.kt)("inlineCode",{parentName:"li"},"")," if the ",(0,n.kt)("inlineCode",{parentName:"li"},"Volume")," element is not present, if the ",(0,n.kt)("inlineCode",{parentName:"li"},"Volume")," is ",(0,n.kt)("inlineCode",{parentName:"li"},"1"),", or if ",(0,n.kt)("em",{parentName:"li"},"Append volume to series title")," is disabled. If multiple values are present, the most frequent value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The various ",(0,n.kt)("inlineCode",{parentName:"li"},"AgeRating")," values will be converted to a number in Komga. The highest value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The most frequent ",(0,n.kt)("inlineCode",{parentName:"li"},"Publisher")," value will be used as Komga's equivalent."),(0,n.kt)("li",{parentName:"ul"},"A ",(0,n.kt)("inlineCode",{parentName:"li"},"Manga")," element with the value ",(0,n.kt)("inlineCode",{parentName:"li"},"YesAndRightToLeft")," will mark the reading direction as ",(0,n.kt)("em",{parentName:"li"},"Right to left"),". The most frequent value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"Genre")," element will be split by ",(0,n.kt)("inlineCode",{parentName:"li"},","),". All genres from all books will be added to the Series."),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"LanguageISO")," element will be used as the Series' language. The most frequent value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The highest value from ",(0,n.kt)("inlineCode",{parentName:"li"},"Count")," will be used as the total count of books.")),(0,n.kt)("h4",{id:"collections"},"Collections"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"SeriesGroup")," element will be split by ",(0,n.kt)("inlineCode",{parentName:"p"},",")," and used to create collections with those names, or add the series to an existing collection if it exists."),(0,n.kt)("p",null,"If the ",(0,n.kt)("inlineCode",{parentName:"p"},"SeriesGroup")," element is set to different values in each book of the series, then each value of the elements will create a collection."),(0,n.kt)("h4",{id:"read-lists"},"Read lists"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"AlternateSeries")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArc")," elements will be used to create a read list with that name, or add the book to an existing read list with that name."),(0,n.kt)("p",null,"If the ",(0,n.kt)("inlineCode",{parentName:"p"},"AlternateNumber")," element is set, it will be used to position the book in the read list."),(0,n.kt)("h5",{id:"storyarcnumber"},"StoryArcNumber"),(0,n.kt)("p",null,"If the ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArcNumber")," element is set, it will be used in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArc")," to position the book in the read list."),(0,n.kt)("p",null,"Both ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArc")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArcNumber")," elements can contain multiple values, separated by ",(0,n.kt)("inlineCode",{parentName:"p"},","),". Komga will do its best to match each pair:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If both elements are set, but do not contain the same number of values, the extra values will not be used"),(0,n.kt)("li",{parentName:"ul"},"If there are invalid values, like blank strings or invalid numbers, the whole pair will be ignored")),(0,n.kt)("h3",{id:"import-metadata-from-epub-files"},"Import metadata from EPUB files"),(0,n.kt)("h4",{id:"book-metadata-1"},"Book metadata"),(0,n.kt)("p",null,"This will import the following fields from the Epub metadata in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:title")," element as the ",(0,n.kt)("em",{parentName:"li"},"Title")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:description")," element as the ",(0,n.kt)("em",{parentName:"li"},"Summary")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:date")," element as the ",(0,n.kt)("em",{parentName:"li"},"Release date")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:identifier")," element as the ",(0,n.kt)("em",{parentName:"li"},"ISBN"),", if it is a valid ISBN"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:creator")," element as ",(0,n.kt)("em",{parentName:"li"},"Authors"),". The role will be imported either from the ",(0,n.kt)("inlineCode",{parentName:"li"},"opf:role")," property, or from a ",(0,n.kt)("inlineCode",{parentName:"li"},"meta")," element containing ",(0,n.kt)("inlineCode",{parentName:"li"},"role")," property and a ",(0,n.kt)("inlineCode",{parentName:"li"},"marc:relators")," scheme. A value with multiple names separated by a ",(0,n.kt)("inlineCode",{parentName:"li"},",")," will be split in different authors.")),(0,n.kt)("h4",{id:"series-metadata-1"},"Series metadata"),(0,n.kt)("p",null,"This will import the following fields from the Epub metadata in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:publisher")," element as the ",(0,n.kt)("em",{parentName:"li"},"Publisher")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:language")," element as the ",(0,n.kt)("em",{parentName:"li"},"Language")),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"page-progression-direction")," property of the ",(0,n.kt)("inlineCode",{parentName:"li"},"spine")," element as the ",(0,n.kt)("em",{parentName:"li"},"Reading direction")),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"belongs-to-collection")," meta property will be used to overwrite the title of a Series. If multiple values are present, the most frequent value from all books will be used.")),(0,n.kt)("h3",{id:"import-metadata-generated-by-mylar"},"Import metadata generated by Mylar"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/mylar3/mylar3"},"Mylar")," can generate a ",(0,n.kt)("inlineCode",{parentName:"p"},"series.json")," file inside your Series folders. This option will import the following fields into Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"name")," field will be used for the Series title. If the ",(0,n.kt)("inlineCode",{parentName:"li"},"volume")," field is set and is different from ",(0,n.kt)("inlineCode",{parentName:"li"},"1"),", then the ",(0,n.kt)("inlineCode",{parentName:"li"},"year")," field will be appended to the title, in the form ",(0,n.kt)("inlineCode",{parentName:"li"}," ()"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status")," will be used to set the Series status."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"description_formatted")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"description_text")," will be used for the Series summary."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"publisher")," will be used for the Series publisher."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"age_rating")," will be used for the Series age rating."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"total_issues")," will be used for the total count of books.")),(0,n.kt)("h3",{id:"import-local-media-assets"},"Import local media assets"),(0,n.kt)("h4",{id:"local-artwork"},"Local artwork"),(0,n.kt)("p",null,"This will enable import for local artwork, check the ",(0,n.kt)("a",{parentName:"p",href:"local-artwork-assets"},"Local Artwork Assets")," section for more information."),(0,n.kt)("h3",{id:"import-isbn-within-barcode"},"Import ISBN within barcode"),(0,n.kt)("h4",{id:"isbn-barcode"},"ISBN barcode"),(0,n.kt)("p",null,"Komga will inspect the first and last 3 pages of each book for barcodes. If a barcode is present and contains an ISBN code, it will be imported."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9847],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>c});var i=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=i.createContext({}),d=function(e){var t=i.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},m=function(e){var t=d(e.components);return i.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),p=d(a),h=n,c=p["".concat(s,".").concat(h)]||p[h]||u[h]||l;return a?i.createElement(c,r(r({ref:t},m),{},{components:a})):i.createElement(c,r({ref:t},m))}));function c(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,r=new Array(l);r[0]=h;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[p]="string"==typeof e?e:n,r[1]=o;for(var d=2;d{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var i=a(7462),n=(a(7294),a(3905));const l={},r="Scanning, Analyzing and Refreshing Metadata",o={unversionedId:"guides/scan-analysis-refresh",id:"guides/scan-analysis-refresh",title:"Scanning, Analyzing and Refreshing Metadata",description:"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.",source:"@site/docs/guides/scan-analysis-refresh.md",sourceDirName:"guides",slug:"/guides/scan-analysis-refresh",permalink:"/docs/guides/scan-analysis-refresh",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/scan-analysis-refresh.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"},next:{title:"One-Shots",permalink:"/docs/guides/oneshots"}},s={},d=[{value:"Scan Library Files",id:"scan-library-files",level:2},{value:"Deep scan",id:"deep-scan",level:3},{value:"What happens during a Scan?",id:"what-happens-during-a-scan",level:2},{value:"Analyze books",id:"analyze-books",level:2},{value:"What happens during Analysis?",id:"what-happens-during-analysis",level:3},{value:"Gather media properties",id:"gather-media-properties",level:4},{value:"Generate default artwork",id:"generate-default-artwork",level:4},{value:"Analyze your content",id:"analyze-your-content",level:3},{value:"Media Analysis screen",id:"media-analysis-screen",level:3},{value:"Refresh metadata",id:"refresh-metadata",level:2},{value:"Import metadata for CBR/CBZ containing a ComicInfo.xml file",id:"import-metadata-for-cbrcbz-containing-a-comicinfoxml-file",level:3},{value:"Book metadata",id:"book-metadata",level:4},{value:"Series metadata",id:"series-metadata",level:4},{value:"Collections",id:"collections",level:4},{value:"Read lists",id:"read-lists",level:4},{value:"StoryArcNumber",id:"storyarcnumber",level:5},{value:"Import metadata from EPUB files",id:"import-metadata-from-epub-files",level:3},{value:"Book metadata",id:"book-metadata-1",level:4},{value:"Series metadata",id:"series-metadata-1",level:4},{value:"Import metadata generated by Mylar",id:"import-metadata-generated-by-mylar",level:3},{value:"Import local media assets",id:"import-local-media-assets",level:3},{value:"Local artwork",id:"local-artwork",level:4},{value:"Import ISBN within barcode",id:"import-isbn-within-barcode",level:3},{value:"ISBN barcode",id:"isbn-barcode",level:4}],m={toc:d},p="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,i.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"scanning-analyzing-and-refreshing-metadata"},"Scanning, Analyzing and Refreshing Metadata"),(0,n.kt)("p",null,"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things."),(0,n.kt)("h2",{id:"scan-library-files"},"Scan Library Files"),(0,n.kt)("p",null,"Scanning a library makes Komga check its folders and sub-folders for new or removed books. If it finds new media, it then pulls it into the library. You can think of scanning as \u201ccheck for new or changed content\u201d."),(0,n.kt)("p",null,"All files that have changed after a scan will be Analyzed."),(0,n.kt)("p",null,"You should Scan Library Files if you have:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Added or deleted files or folders"),(0,n.kt)("li",{parentName:"ul"},"Renamed a file or folder"),(0,n.kt)("li",{parentName:"ul"},"Moved files or folders from one location to another")),(0,n.kt)("p",null,"By default, Komga will scan your libraries regularly."),(0,n.kt)("h3",{id:"deep-scan"},"Deep scan"),(0,n.kt)("p",null,"This will force the scanner to compare all scanned books with the ones stored in the database. Normally this is not required, as Komga uses the last modified time of the parent folders to decide whether to compare books, but some filesystems may behave differently."),(0,n.kt)("p",null,"Trigger a Deep Scan if Komga is missing some books after a scan."),(0,n.kt)("h2",{id:"what-happens-during-a-scan"},"What happens during a Scan?"),(0,n.kt)("p",null,"Komga will generate a library representation of your files on disk. A Komga library does ",(0,n.kt)("em",{parentName:"p"},"not")," represent exactly your folder structure."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Komga will create a ",(0,n.kt)("em",{parentName:"li"},"Series")," for each subfolder of any library, whatever the depth of this subfolder in your directory structure"),(0,n.kt)("li",{parentName:"ul"},"Komga will create a ",(0,n.kt)("em",{parentName:"li"},"Book")," for each file found, and place it inside the ",(0,n.kt)("em",{parentName:"li"},"Series")," corresponding to the parent folder of the file")),(0,n.kt)("h2",{id:"analyze-books"},"Analyze books"),(0,n.kt)("p",null,"Analysis is automatically performed when content is added to your Library. In rare cases, new versions of Komga may update the media analysis capabilities to correct something or add the ability to detect new things. In those cases, content may be re-analyzed when you access it after the new server version is installed."),(0,n.kt)("h3",{id:"what-happens-during-analysis"},"What happens during Analysis?"),(0,n.kt)("p",null,"Whenever an item is added to one of your Libraries, Komga performs some analysis on it to gather information. In addition, all files analyzed will also be refreshed for metadata."),(0,n.kt)("h4",{id:"gather-media-properties"},"Gather media properties"),(0,n.kt)("p",null,"The primary purpose of media analysis is to gather information about that media item. All of the media you add to a Library has properties that are useful to know, such as:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Container: ZIP, RAR, EPUB, PDF, etc."),(0,n.kt)("li",{parentName:"ul"},"Images Format: JPEG, PNG, WEBP, etc.")),(0,n.kt)("p",null,"Why, though? What use are these media properties? Your Server, together with your apps, can use this information to help determine whether (and how) content can be played."),(0,n.kt)("p",null,"For example: Imagine you have a CBR file with WEBP images, but you\u2019re using Internet Explorer (which can\u2019t read WEBP). Since the webreader knows what kind of content your browser can display and since your media analysis detected that the book has WEBP images, your Komga Server can convert those images to a compatible format (like JPEG) for you in order to let you read your book successfully."),(0,n.kt)("h4",{id:"generate-default-artwork"},"Generate default artwork"),(0,n.kt)("p",null,"During analysis, artwork will automatically be grabbed from a book file. The first page will be used for poster/thumbnail type purposes."),(0,n.kt)("h3",{id:"analyze-your-content"},"Analyze your content"),(0,n.kt)("p",null,"You can analyze content in multiple ways: for a book, for a series, or even for an entire Library."),(0,n.kt)("p",null,"Look for the action menu icon ",(0,n.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,n.kt)("em",{parentName:"p"},"Analyze"),"."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Depending on the size of your Library, analysis may take a while.")),(0,n.kt)("h3",{id:"media-analysis-screen"},"Media Analysis screen"),(0,n.kt)("p",null,"You can check all the media for which the analysis did not succeed from the Media Analysis screen. You can access it from ",(0,n.kt)("em",{parentName:"p"},"Media Management > Media Analysis"),"."),(0,n.kt)("p",null,"It will show you all books with a status of:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Error: Komga could not analyze the book. If possible, there will be a comment to describe the error."),(0,n.kt)("li",{parentName:"ul"},"Unsupported: Komga does not support those files. The comment will give you more information.")),(0,n.kt)("a",{href:"/assets/media/guides/scan-analysis-refresh/media-analysis.png"},(0,n.kt)("img",{src:"/assets/media/guides/scan-analysis-refresh/media-analysis.png",style:{maxHeight:"400px"},alt:"Media Analysis"})),(0,n.kt)("h2",{id:"refresh-metadata"},"Refresh metadata"),(0,n.kt)("p",null,"Refreshing Metadata for a library, series, or individual book causes the metadata for the item to be refreshed, even if it already has metadata. You can think of refreshing as \u201cupdate metadata for the requested item even if it already has some\u201d."),(0,n.kt)("p",null,"You should refresh a library or individual item if:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"You\u2019ve changed options for the library"),(0,n.kt)("li",{parentName:"ul"},'You\u2019ve added "local media assets" (such as artwork)')),(0,n.kt)("p",null,"Metadata is gathered from the following sources:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a local ",(0,n.kt)("inlineCode",{parentName:"li"},"ComicInfo.xml")," file located inside a CBZ or CBR"),(0,n.kt)("li",{parentName:"ul"},"the metadata of an EPUB file"),(0,n.kt)("li",{parentName:"ul"},"local media assets")),(0,n.kt)("p",null,"The metadata refresh is dependent of the options of the Library."),(0,n.kt)("h3",{id:"import-metadata-for-cbrcbz-containing-a-comicinfoxml-file"},"Import metadata for CBR/CBZ containing a ComicInfo.xml file"),(0,n.kt)("h4",{id:"book-metadata"},"Book metadata"),(0,n.kt)("p",null,"This will import the following elements from the ",(0,n.kt)("inlineCode",{parentName:"p"},"ComicInfo.xml")," file in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Year"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Month"),", and ",(0,n.kt)("inlineCode",{parentName:"li"},"Day")," to form the ",(0,n.kt)("em",{parentName:"li"},"Release Date")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Writer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Penciller"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Inker"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Colorist"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Letterer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"CoverArtist"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Editor"),", and ",(0,n.kt)("inlineCode",{parentName:"li"},"Translator")," as ",(0,n.kt)("em",{parentName:"li"},"Authors")," with the according role. A value with multiple names separated by a ",(0,n.kt)("inlineCode",{parentName:"li"},",")," will be split in different authors."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Title"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Summary"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"Number")," as their Komga equivalent"),(0,n.kt)("li",{parentName:"ul"},"Valid ",(0,n.kt)("inlineCode",{parentName:"li"},"Web")," links as a book link"),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"Tags")," element will be split by ",(0,n.kt)("inlineCode",{parentName:"li"},",")," and added to the book's ",(0,n.kt)("em",{parentName:"li"},"tags")),(0,n.kt)("li",{parentName:"ul"},"If the ",(0,n.kt)("inlineCode",{parentName:"li"},"GTIN")," element contains a valid ISBN, as the book's ",(0,n.kt)("em",{parentName:"li"},"ISBN"))),(0,n.kt)("h4",{id:"series-metadata"},"Series metadata"),(0,n.kt)("p",null,"This will import the following elements from the ",(0,n.kt)("inlineCode",{parentName:"p"},"ComicInfo.xml")," of the Series' books in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"Series")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"Volume")," elements will be used to overwrite the title of the Series, in the form ",(0,n.kt)("inlineCode",{parentName:"li"}," ()"),", or just ",(0,n.kt)("inlineCode",{parentName:"li"},"")," if the ",(0,n.kt)("inlineCode",{parentName:"li"},"Volume")," element is not present, if the ",(0,n.kt)("inlineCode",{parentName:"li"},"Volume")," is ",(0,n.kt)("inlineCode",{parentName:"li"},"1"),", or if ",(0,n.kt)("em",{parentName:"li"},"Append volume to series title")," is disabled. If multiple values are present, the most frequent value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The various ",(0,n.kt)("inlineCode",{parentName:"li"},"AgeRating")," values will be converted to a number in Komga. The highest value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The most frequent ",(0,n.kt)("inlineCode",{parentName:"li"},"Publisher")," value will be used as Komga's equivalent."),(0,n.kt)("li",{parentName:"ul"},"A ",(0,n.kt)("inlineCode",{parentName:"li"},"Manga")," element with the value ",(0,n.kt)("inlineCode",{parentName:"li"},"YesAndRightToLeft")," will mark the reading direction as ",(0,n.kt)("em",{parentName:"li"},"Right to left"),". The most frequent value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"Genre")," element will be split by ",(0,n.kt)("inlineCode",{parentName:"li"},","),". All genres from all books will be added to the Series."),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"LanguageISO")," element will be used as the Series' language. The most frequent value from all books will be used."),(0,n.kt)("li",{parentName:"ul"},"The highest value from ",(0,n.kt)("inlineCode",{parentName:"li"},"Count")," will be used as the total count of books.")),(0,n.kt)("h4",{id:"collections"},"Collections"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"SeriesGroup")," element will be split by ",(0,n.kt)("inlineCode",{parentName:"p"},",")," and used to create collections with those names, or add the series to an existing collection if it exists."),(0,n.kt)("p",null,"If the ",(0,n.kt)("inlineCode",{parentName:"p"},"SeriesGroup")," element is set to different values in each book of the series, then each value of the elements will create a collection."),(0,n.kt)("h4",{id:"read-lists"},"Read lists"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"AlternateSeries")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArc")," elements will be used to create a read list with that name, or add the book to an existing read list with that name."),(0,n.kt)("p",null,"If the ",(0,n.kt)("inlineCode",{parentName:"p"},"AlternateNumber")," element is set, it will be used to position the book in the read list."),(0,n.kt)("h5",{id:"storyarcnumber"},"StoryArcNumber"),(0,n.kt)("p",null,"If the ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArcNumber")," element is set, it will be used in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArc")," to position the book in the read list."),(0,n.kt)("p",null,"Both ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArc")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"StoryArcNumber")," elements can contain multiple values, separated by ",(0,n.kt)("inlineCode",{parentName:"p"},","),". Komga will do its best to match each pair:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If both elements are set, but do not contain the same number of values, the extra values will not be used"),(0,n.kt)("li",{parentName:"ul"},"If there are invalid values, like blank strings or invalid numbers, the whole pair will be ignored")),(0,n.kt)("h3",{id:"import-metadata-from-epub-files"},"Import metadata from EPUB files"),(0,n.kt)("h4",{id:"book-metadata-1"},"Book metadata"),(0,n.kt)("p",null,"This will import the following fields from the Epub metadata in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:title")," element as the ",(0,n.kt)("em",{parentName:"li"},"Title")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:description")," element as the ",(0,n.kt)("em",{parentName:"li"},"Summary")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:date")," element as the ",(0,n.kt)("em",{parentName:"li"},"Release date")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:identifier")," element as the ",(0,n.kt)("em",{parentName:"li"},"ISBN"),", if it is a valid ISBN"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:creator")," element as ",(0,n.kt)("em",{parentName:"li"},"Authors"),". The role will be imported either from the ",(0,n.kt)("inlineCode",{parentName:"li"},"opf:role")," property, or from a ",(0,n.kt)("inlineCode",{parentName:"li"},"meta")," element containing ",(0,n.kt)("inlineCode",{parentName:"li"},"role")," property and a ",(0,n.kt)("inlineCode",{parentName:"li"},"marc:relators")," scheme. A value with multiple names separated by a ",(0,n.kt)("inlineCode",{parentName:"li"},",")," will be split in different authors.")),(0,n.kt)("h4",{id:"series-metadata-1"},"Series metadata"),(0,n.kt)("p",null,"This will import the following fields from the Epub metadata in Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:publisher")," element as the ",(0,n.kt)("em",{parentName:"li"},"Publisher")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"dc:language")," element as the ",(0,n.kt)("em",{parentName:"li"},"Language")),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"page-progression-direction")," property of the ",(0,n.kt)("inlineCode",{parentName:"li"},"spine")," element as the ",(0,n.kt)("em",{parentName:"li"},"Reading direction")),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"belongs-to-collection")," meta property will be used to overwrite the title of a Series. If multiple values are present, the most frequent value from all books will be used.")),(0,n.kt)("h3",{id:"import-metadata-generated-by-mylar"},"Import metadata generated by Mylar"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/mylar3/mylar3"},"Mylar")," can generate a ",(0,n.kt)("inlineCode",{parentName:"p"},"series.json")," file inside your Series folders. This option will import the following fields into Komga:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("inlineCode",{parentName:"li"},"name")," field will be used for the Series title. If the ",(0,n.kt)("inlineCode",{parentName:"li"},"volume")," field is set and is different from ",(0,n.kt)("inlineCode",{parentName:"li"},"1"),", then the ",(0,n.kt)("inlineCode",{parentName:"li"},"year")," field will be appended to the title, in the form ",(0,n.kt)("inlineCode",{parentName:"li"}," ()"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status")," will be used to set the Series status."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"description_formatted")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"description_text")," will be used for the Series summary."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"publisher")," will be used for the Series publisher."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"age_rating")," will be used for the Series age rating."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"total_issues")," will be used for the total count of books.")),(0,n.kt)("h3",{id:"import-local-media-assets"},"Import local media assets"),(0,n.kt)("h4",{id:"local-artwork"},"Local artwork"),(0,n.kt)("p",null,"This will enable import for local artwork, check the ",(0,n.kt)("a",{parentName:"p",href:"local-artwork-assets"},"Local Artwork Assets")," section for more information."),(0,n.kt)("h3",{id:"import-isbn-within-barcode"},"Import ISBN within barcode"),(0,n.kt)("h4",{id:"isbn-barcode"},"ISBN barcode"),(0,n.kt)("p",null,"Komga will inspect the first and last 3 pages of each book for barcodes. If a barcode is present and contains an ISBN code, it will be imported."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0c5c2428.f4aba4c7.js b/assets/js/0c5c2428.8e402252.js similarity index 97% rename from assets/js/0c5c2428.f4aba4c7.js rename to assets/js/0c5c2428.8e402252.js index c41092d4..82e4b24c 100644 --- a/assets/js/0c5c2428.f4aba4c7.js +++ b/assets/js/0c5c2428.8e402252.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6236],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),m=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=m(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=m(n),d=r,f=c["".concat(p,".").concat(d)]||c[d]||u[d]||o;return n?a.createElement(f,i(i({ref:t},s),{},{components:n})):a.createElement(f,i({ref:t},s))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var m=2;m{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var a=n(7462),r=(n(7294),n(3905));const o={},i="Run with the Jar file",l={unversionedId:"installation/jar",id:"installation/jar",title:"Run with the Jar file",description:"You need Java version 17+ to run Komga. Check your version with java -version.",source:"@site/docs/installation/jar.md",sourceDirName:"installation",slug:"/installation/jar",permalink:"/docs/installation/jar",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/jar.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Run with Docker",permalink:"/docs/installation/docker"},next:{title:"Install via third-party integrations",permalink:"/docs/installation/thirdparty"}},p={},m=[{value:"Increase memory limit",id:"increase-memory-limit",level:2},{value:"Updating",id:"updating",level:2}],s={toc:m},c="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-with-the-jar-file"},"Run with the Jar file"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You need Java version 17+ to run Komga. Check your version with ",(0,r.kt)("inlineCode",{parentName:"p"},"java -version"),".")),(0,r.kt)("p",null,"You can run Komga from the fat ",(0,r.kt)("inlineCode",{parentName:"p"},"jar")," file. You can download them in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga/releases"},"releases")," section."),(0,r.kt)("p",null,"In order to run Komga, use the following command (replace ",(0,r.kt)("inlineCode",{parentName:"p"},"x.y.z")," with the actual version number):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar komga-x.y.z.jar\n")),(0,r.kt)("p",null,"Once Komga is started, you can access the ",(0,r.kt)("a",{parentName:"p",href:"../guides/webui"},"web interface"),"."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"On Windows, use ",(0,r.kt)("inlineCode",{parentName:"p"},"javaw")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"java")," to launch Komga ",(0,r.kt)("em",{parentName:"p"},"without")," a command prompt window appearing.")),(0,r.kt)("h2",{id:"increase-memory-limit"},"Increase memory limit"),(0,r.kt)("p",null,"By default the ",(0,r.kt)("inlineCode",{parentName:"p"},"java")," process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some ",(0,r.kt)("inlineCode",{parentName:"p"},"OutOfMemoryException")," in the logs you probably need to increase the maximum memory Komga can use."),(0,r.kt)("p",null,"To do so, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"-Xmx")," command line flag, where ",(0,r.kt)("inlineCode",{parentName:"p"},"")," can be any amount like ",(0,r.kt)("inlineCode",{parentName:"p"},"2048m"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"4g")," etc. For example to run Komga with a maximum of 4gb of memory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar -Xmx4g komga-x.y.z.jar\n")),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"To update just stop Komga, then start it with the latest ",(0,r.kt)("inlineCode",{parentName:"p"},"jar"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6236],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),m=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=m(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=m(n),d=r,f=c["".concat(p,".").concat(d)]||c[d]||u[d]||o;return n?a.createElement(f,i(i({ref:t},s),{},{components:n})):a.createElement(f,i({ref:t},s))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var m=2;m{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var a=n(7462),r=(n(7294),n(3905));const o={},i="Run with the Jar file",l={unversionedId:"installation/jar",id:"installation/jar",title:"Run with the Jar file",description:"You need Java version 17+ to run Komga. Check your version with java -version.",source:"@site/docs/installation/jar.md",sourceDirName:"installation",slug:"/installation/jar",permalink:"/docs/installation/jar",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/jar.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Run with Docker",permalink:"/docs/installation/docker"},next:{title:"Install via third-party integrations",permalink:"/docs/installation/thirdparty"}},p={},m=[{value:"Increase memory limit",id:"increase-memory-limit",level:2},{value:"Updating",id:"updating",level:2}],s={toc:m},c="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-with-the-jar-file"},"Run with the Jar file"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You need Java version 17+ to run Komga. Check your version with ",(0,r.kt)("inlineCode",{parentName:"p"},"java -version"),".")),(0,r.kt)("p",null,"You can run Komga from the fat ",(0,r.kt)("inlineCode",{parentName:"p"},"jar")," file. You can download them in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga/releases"},"releases")," section."),(0,r.kt)("p",null,"In order to run Komga, use the following command (replace ",(0,r.kt)("inlineCode",{parentName:"p"},"x.y.z")," with the actual version number):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar komga-x.y.z.jar\n")),(0,r.kt)("p",null,"Once Komga is started, you can access the ",(0,r.kt)("a",{parentName:"p",href:"../guides/webui"},"web interface"),"."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"On Windows, use ",(0,r.kt)("inlineCode",{parentName:"p"},"javaw")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"java")," to launch Komga ",(0,r.kt)("em",{parentName:"p"},"without")," a command prompt window appearing.")),(0,r.kt)("h2",{id:"increase-memory-limit"},"Increase memory limit"),(0,r.kt)("p",null,"By default the ",(0,r.kt)("inlineCode",{parentName:"p"},"java")," process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some ",(0,r.kt)("inlineCode",{parentName:"p"},"OutOfMemoryException")," in the logs you probably need to increase the maximum memory Komga can use."),(0,r.kt)("p",null,"To do so, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"-Xmx")," command line flag, where ",(0,r.kt)("inlineCode",{parentName:"p"},"")," can be any amount like ",(0,r.kt)("inlineCode",{parentName:"p"},"2048m"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"4g")," etc. For example to run Komga with a maximum of 4gb of memory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"java -jar -Xmx4g komga-x.y.z.jar\n")),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"To update just stop Komga, then start it with the latest ",(0,r.kt)("inlineCode",{parentName:"p"},"jar"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1bb85636.8a5fe3ac.js b/assets/js/1bb85636.8dabb926.js similarity index 99% rename from assets/js/1bb85636.8a5fe3ac.js rename to assets/js/1bb85636.8dabb926.js index 5a8d8112..2f88c7ee 100644 --- a/assets/js/1bb85636.8a5fe3ac.js +++ b/assets/js/1bb85636.8dabb926.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9844],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),d=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(u.Provider,{value:t},e.children)},p="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(n),m=o,h=p["".concat(u,".").concat(m)]||p[m]||l[m]||a;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var r=n(7462),o=(n(7294),n(3905));const a={},i="Read with Chunky Reader (iPad)",s={unversionedId:"guides/chunky",id:"guides/chunky",title:"Read with Chunky Reader (iPad)",description:"Chunky Reader does not work anymore with Komga 1.4.0+",source:"@site/docs/guides/chunky.md",sourceDirName:"guides",slug:"/guides/chunky",permalink:"/docs/guides/chunky",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/chunky.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"},next:{title:"Theme",permalink:"/docs/guides/theme"}},u={},d=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Chunky",id:"adding-your-komga-server-to-chunky",level:2},{value:"Limitations",id:"limitations",level:2}],c={toc:d},p="wrapper";function l(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"read-with-chunky-reader-ipad"},"Read with Chunky Reader (iPad)"),(0,o.kt)("admonition",{title:"Note",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Chunky Reader does not work anymore with Komga 1.4.0+")),(0,o.kt)("h2",{id:"background"},"Background"),(0,o.kt)("p",null,"Thanks to Komga's OPDS support, you can use the ",(0,o.kt)("a",{parentName:"p",href:"https://apps.apple.com/app/id663567628"},"Chunky Reader")," application for iPad to remotely download or stream your comics. Chunky Reader is at time of writing the only comic reader on iPad that supports the OPDS page streaming extension. This lets you stream individual pages without having to download the whole comic file onto your iPad."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Please note that Chunky Reader's OPDS support requires the in app purchase which costs $3.99 or the equivalent of your local currency.")),(0,o.kt)("h2",{id:"adding-your-komga-server-to-chunky"},"Adding your Komga server to Chunky"),(0,o.kt)("p",null,"First you need to make sure that you can browse to your komga server's web UI from Safari on your iPad. Open up Safari, navigate to your server's address and log in as normal. Next, open the address bar, delete ",(0,o.kt)("inlineCode",{parentName:"p"},"/dashboard")," part which is added automatically when you log in, and then append ",(0,o.kt)("inlineCode",{parentName:"p"},"/opds/v1.2/catalog")," to the end of the URL and press return."),(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/safari-check1.png"}),(0,o.kt)("p",null,"You should then see a screen like the below image, if you do, you're ready to proceed with configuring Chunky Reader. You may wish to copy the URL to your iPad clipboard for pasting later."),(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/safari-check2.png"}),(0,o.kt)("p",null,"Open Chunky Reader and click the cloud icon, circled in red in the screenshot below."),(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/cloud-symbol.png"}),(0,o.kt)("p",null,"In the pop up window, click the plus button, circled in red in the screenshot below."),(0,o.kt)("div",{class:"text--center"},(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/plus-button.png",width:"300"})),(0,o.kt)("p",null,'Now choose the green plus button next to "Calibre/Ubooquity/OPDS".'),(0,o.kt)("div",{class:"text--center"},(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/opds-option.png",width:"300"})),(0,o.kt)("p",null,"In this dialogue box, enter your ",(0,o.kt)("em",{parentName:"p"},"server address")," (paste from the earlier step if you copied it to clipboard), ",(0,o.kt)("em",{parentName:"p"},"username"),", and ",(0,o.kt)("em",{parentName:"p"},"password"),". Then click ",(0,o.kt)("em",{parentName:"p"},"Connect"),". Your Komga server should now appear in the cloud icon menu. You can stream comics by navigating to them and tapping the name, or download them via clicking the blue download button next to a comic. You can download all the comics in a given view by tapping the ",(0,o.kt)("em",{parentName:"p"},"All")," button in the bottom right of the menu."),(0,o.kt)("div",{class:"text--center"},(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/list-view.png",width:"300"})),(0,o.kt)("h2",{id:"limitations"},"Limitations"),(0,o.kt)("p",null,"Reading comics via Chunky Reader ",(0,o.kt)("strong",{parentName:"p"},"does not")," update the read progress. This means you will need to manually mark your comics as read via the web UI."))}l.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9844],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),d=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(u.Provider,{value:t},e.children)},p="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(n),m=o,h=p["".concat(u,".").concat(m)]||p[m]||l[m]||a;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var r=n(7462),o=(n(7294),n(3905));const a={},i="Read with Chunky Reader (iPad)",s={unversionedId:"guides/chunky",id:"guides/chunky",title:"Read with Chunky Reader (iPad)",description:"Chunky Reader does not work anymore with Komga 1.4.0+",source:"@site/docs/guides/chunky.md",sourceDirName:"guides",slug:"/guides/chunky",permalink:"/docs/guides/chunky",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/chunky.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"},next:{title:"Theme",permalink:"/docs/guides/theme"}},u={},d=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Chunky",id:"adding-your-komga-server-to-chunky",level:2},{value:"Limitations",id:"limitations",level:2}],c={toc:d},p="wrapper";function l(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"read-with-chunky-reader-ipad"},"Read with Chunky Reader (iPad)"),(0,o.kt)("admonition",{title:"Note",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Chunky Reader does not work anymore with Komga 1.4.0+")),(0,o.kt)("h2",{id:"background"},"Background"),(0,o.kt)("p",null,"Thanks to Komga's OPDS support, you can use the ",(0,o.kt)("a",{parentName:"p",href:"https://apps.apple.com/app/id663567628"},"Chunky Reader")," application for iPad to remotely download or stream your comics. Chunky Reader is at time of writing the only comic reader on iPad that supports the OPDS page streaming extension. This lets you stream individual pages without having to download the whole comic file onto your iPad."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Please note that Chunky Reader's OPDS support requires the in app purchase which costs $3.99 or the equivalent of your local currency.")),(0,o.kt)("h2",{id:"adding-your-komga-server-to-chunky"},"Adding your Komga server to Chunky"),(0,o.kt)("p",null,"First you need to make sure that you can browse to your komga server's web UI from Safari on your iPad. Open up Safari, navigate to your server's address and log in as normal. Next, open the address bar, delete ",(0,o.kt)("inlineCode",{parentName:"p"},"/dashboard")," part which is added automatically when you log in, and then append ",(0,o.kt)("inlineCode",{parentName:"p"},"/opds/v1.2/catalog")," to the end of the URL and press return."),(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/safari-check1.png"}),(0,o.kt)("p",null,"You should then see a screen like the below image, if you do, you're ready to proceed with configuring Chunky Reader. You may wish to copy the URL to your iPad clipboard for pasting later."),(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/safari-check2.png"}),(0,o.kt)("p",null,"Open Chunky Reader and click the cloud icon, circled in red in the screenshot below."),(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/cloud-symbol.png"}),(0,o.kt)("p",null,"In the pop up window, click the plus button, circled in red in the screenshot below."),(0,o.kt)("div",{class:"text--center"},(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/plus-button.png",width:"300"})),(0,o.kt)("p",null,'Now choose the green plus button next to "Calibre/Ubooquity/OPDS".'),(0,o.kt)("div",{class:"text--center"},(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/opds-option.png",width:"300"})),(0,o.kt)("p",null,"In this dialogue box, enter your ",(0,o.kt)("em",{parentName:"p"},"server address")," (paste from the earlier step if you copied it to clipboard), ",(0,o.kt)("em",{parentName:"p"},"username"),", and ",(0,o.kt)("em",{parentName:"p"},"password"),". Then click ",(0,o.kt)("em",{parentName:"p"},"Connect"),". Your Komga server should now appear in the cloud icon menu. You can stream comics by navigating to them and tapping the name, or download them via clicking the blue download button next to a comic. You can download all the comics in a given view by tapping the ",(0,o.kt)("em",{parentName:"p"},"All")," button in the bottom right of the menu."),(0,o.kt)("div",{class:"text--center"},(0,o.kt)("img",{src:"/assets/media/guides/chunky-setup/list-view.png",width:"300"})),(0,o.kt)("h2",{id:"limitations"},"Limitations"),(0,o.kt)("p",null,"Reading comics via Chunky Reader ",(0,o.kt)("strong",{parentName:"p"},"does not")," update the read progress. This means you will need to manually mark your comics as read via the web UI."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1ec3b236.410f639a.js b/assets/js/1ec3b236.979563b6.js similarity index 97% rename from assets/js/1ec3b236.410f639a.js rename to assets/js/1ec3b236.979563b6.js index 955e67ae..ea7f820e 100644 --- a/assets/js/1ec3b236.410f639a.js +++ b/assets/js/1ec3b236.979563b6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7021],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(r),m=a,f=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={},l="Command Line Interface",i={unversionedId:"guides/cli",id:"guides/cli",title:"Command Line Interface",description:"Komga offers a few commands available from the command line.",source:"@site/docs/guides/cli.md",sourceDirName:"guides",slug:"/guides/cli",permalink:"/docs/guides/cli",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cli.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Announcements",permalink:"/docs/guides/announcements"},next:{title:"Contribution",permalink:"/docs/contribution"}},s={},u=[{value:"How to use?",id:"how-to-use",level:2},{value:"With the jar file",id:"with-the-jar-file",level:3},{value:"With docker run",id:"with-docker-run",level:3},{value:"With docker-compose",id:"with-docker-compose",level:3},{value:"Available commands",id:"available-commands",level:2},{value:"List users",id:"list-users",level:3},{value:"Reset password for a user",id:"reset-password-for-a-user",level:3}],c={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"command-line-interface"},"Command Line Interface"),(0,a.kt)("p",null,"Komga offers a few commands available from the command line."),(0,a.kt)("h2",{id:"how-to-use"},"How to use?"),(0,a.kt)("p",null,"You just need to append the command to the command line. Note that Komga will still start and run as usual."),(0,a.kt)("h3",{id:"with-the-jar-file"},"With the ",(0,a.kt)("inlineCode",{parentName:"h3"},"jar")," file"),(0,a.kt)("p",null,"Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"java -jar komga-x.y.z.jar --list-users\n")),(0,a.kt)("h3",{id:"with-docker-run"},"With docker run"),(0,a.kt)("p",null,"Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"docker run ghcr.io/gotson/komga:latest --list-users\n")),(0,a.kt)("h3",{id:"with-docker-compose"},"With docker-compose"),(0,a.kt)("p",null,"You can override the ",(0,a.kt)("inlineCode",{parentName:"p"},"command"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"services:\n komga:\n image: gotson/komga:latest\n command: --newpassword=toto --reset=admin@example.org\n")),(0,a.kt)("h2",{id:"available-commands"},"Available commands"),(0,a.kt)("h3",{id:"list-users"},"List users"),(0,a.kt)("p",null,"Command: ",(0,a.kt)("inlineCode",{parentName:"p"},"--list-users")),(0,a.kt)("p",null,"This will output all the users configured in the database. The output will be shown in the console or the logs."),(0,a.kt)("p",null,"Example:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"2023-08-02T13:41:45.215+08:00 INFO 1979 --- [ main] o.g.k.i.apprunner.ListUsersRunner : Here is a list of all users: [admin@example.org, jacky@example.org]")),(0,a.kt)("h3",{id:"reset-password-for-a-user"},"Reset password for a user"),(0,a.kt)("p",null,"Command: ",(0,a.kt)("inlineCode",{parentName:"p"},"--reset=user@domain.com --newpassword=YourNewPassword")),(0,a.kt)("p",null,"This will reset the password for the specified user."),(0,a.kt)("p",null,"Example:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"2023-08-02T13:50:42.998+08:00 INFO 2806 --- [ main] o.g.k.i.apprunner.PasswordResetRunner : Reset password for user: admin@example.org")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7021],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(r),m=a,f=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={},l="Command Line Interface",i={unversionedId:"guides/cli",id:"guides/cli",title:"Command Line Interface",description:"Komga offers a few commands available from the command line.",source:"@site/docs/guides/cli.md",sourceDirName:"guides",slug:"/guides/cli",permalink:"/docs/guides/cli",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cli.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Announcements",permalink:"/docs/guides/announcements"},next:{title:"Contribution",permalink:"/docs/contribution"}},s={},u=[{value:"How to use?",id:"how-to-use",level:2},{value:"With the jar file",id:"with-the-jar-file",level:3},{value:"With docker run",id:"with-docker-run",level:3},{value:"With docker-compose",id:"with-docker-compose",level:3},{value:"Available commands",id:"available-commands",level:2},{value:"List users",id:"list-users",level:3},{value:"Reset password for a user",id:"reset-password-for-a-user",level:3}],c={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"command-line-interface"},"Command Line Interface"),(0,a.kt)("p",null,"Komga offers a few commands available from the command line."),(0,a.kt)("h2",{id:"how-to-use"},"How to use?"),(0,a.kt)("p",null,"You just need to append the command to the command line. Note that Komga will still start and run as usual."),(0,a.kt)("h3",{id:"with-the-jar-file"},"With the ",(0,a.kt)("inlineCode",{parentName:"h3"},"jar")," file"),(0,a.kt)("p",null,"Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"java -jar komga-x.y.z.jar --list-users\n")),(0,a.kt)("h3",{id:"with-docker-run"},"With docker run"),(0,a.kt)("p",null,"Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"docker run ghcr.io/gotson/komga:latest --list-users\n")),(0,a.kt)("h3",{id:"with-docker-compose"},"With docker-compose"),(0,a.kt)("p",null,"You can override the ",(0,a.kt)("inlineCode",{parentName:"p"},"command"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"services:\n komga:\n image: gotson/komga:latest\n command: --newpassword=toto --reset=admin@example.org\n")),(0,a.kt)("h2",{id:"available-commands"},"Available commands"),(0,a.kt)("h3",{id:"list-users"},"List users"),(0,a.kt)("p",null,"Command: ",(0,a.kt)("inlineCode",{parentName:"p"},"--list-users")),(0,a.kt)("p",null,"This will output all the users configured in the database. The output will be shown in the console or the logs."),(0,a.kt)("p",null,"Example:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"2023-08-02T13:41:45.215+08:00 INFO 1979 --- [ main] o.g.k.i.apprunner.ListUsersRunner : Here is a list of all users: [admin@example.org, jacky@example.org]")),(0,a.kt)("h3",{id:"reset-password-for-a-user"},"Reset password for a user"),(0,a.kt)("p",null,"Command: ",(0,a.kt)("inlineCode",{parentName:"p"},"--reset=user@domain.com --newpassword=YourNewPassword")),(0,a.kt)("p",null,"This will reset the password for the specified user."),(0,a.kt)("p",null,"Example:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"2023-08-02T13:50:42.998+08:00 INFO 2806 --- [ main] o.g.k.i.apprunner.PasswordResetRunner : Reset password for user: admin@example.org")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/206b31bb.b5d45f60.js b/assets/js/206b31bb.2c1772e6.js similarity index 99% rename from assets/js/206b31bb.b5d45f60.js rename to assets/js/206b31bb.2c1772e6.js index f39cd7c7..e0f68585 100644 --- a/assets/js/206b31bb.b5d45f60.js +++ b/assets/js/206b31bb.2c1772e6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[1778],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),d=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},h=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),p=d(n),c=o,m=p["".concat(s,".").concat(c)]||p[c]||u[c]||r;return n?a.createElement(m,i(i({ref:t},h),{},{components:n})):a.createElement(m,i({ref:t},h))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(3905));const r={},i="One-Shots",l={unversionedId:"guides/oneshots",id:"guides/oneshots",title:"One-Shots",description:"What are One-Shots?",source:"@site/docs/guides/oneshots.md",sourceDirName:"guides",slug:"/guides/oneshots",permalink:"/docs/guides/oneshots",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/oneshots.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"},next:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"}},s={},d=[{value:"What are One-Shots?",id:"what-are-one-shots",level:2},{value:"One-Shots handling",id:"one-shots-handling",level:2},{value:"Configuration",id:"configuration",level:3},{value:"Processing",id:"processing",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Dashboard",id:"dashboard",level:3},{value:"REST API",id:"rest-api",level:3}],h={toc:d},p="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},h,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"one-shots"},"One-Shots"),(0,o.kt)("h2",{id:"what-are-one-shots"},"What are One-Shots?"),(0,o.kt)("p",null,"One-Shots are series containing a single book. "),(0,o.kt)("p",null,"However not all series containing a single book are One-Shots. Here are some example of single book series that are not One-Shots:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"a series that has multiple books published, but only a single book is collected in Komga"),(0,o.kt)("li",{parentName:"ul"},"a series that currently has only 1 book published, but will have more in the future")),(0,o.kt)("p",null,"Historically Komga required each series to be in its own directory on disk. This was cumbersome for One-Shots, as each book needed to be placed in a dedicated directory."),(0,o.kt)("p",null,"With One-Shots handling, this is not necessary anymore."),(0,o.kt)("p",null,"One-Shots are still composed of a series with a single book, but are handled slightly differently."),(0,o.kt)("h2",{id:"one-shots-handling"},"One-Shots handling"),(0,o.kt)("h3",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"You can enable One-Shots handling through ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/libraries#one-shots-directory"},"Library options"),"."),(0,o.kt)("h3",{id:"processing"},"Processing"),(0,o.kt)("p",null,"One-Shots are detected during the scan. Any directory for which the full path contains the configured ",(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," will generate One-Shot series instead of standard Series."),(0,o.kt)("p",null,"Given the following directory structure, with ",(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," configured to ",(0,o.kt)("inlineCode",{parentName:"p"},"_oneshots"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/data/books/Comics\n\u251c\u2500\u2500 Space Adventures\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_002.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_003.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 _oneshots\n\u2502\xa0\xa0 \u2514\u2500\u2500 Pluto Adventures.cbz\n\u251c\u2500\u2500 Super Duck\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_002.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 Super_Duck_003.cbz\n\u2514\u2500\u2500 _oneshots\n \u251c\u2500\u2500 A oneshot.cbz\n \u251c\u2500\u2500 Another oneshot.cbz\n \u2514\u2500\u2500 Yet another oneshot.cbz\n")),(0,o.kt)("p",null,"This will result in:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"2 regular series:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Space Adventures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Super Duck")))),(0,o.kt)("li",{parentName:"ul"},"4 One-Shots:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Pluto Adventures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"A oneshot")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Another oneshot")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Yet another oneshot"))))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," is checked against ",(0,o.kt)("strong",{parentName:"p"},"any part of the directory path"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"_oneshots")," will match on:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/_oneshots")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/My weirdly named _oneshots"))))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To match only directories starting with the provided string, prefix ",(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," with ",(0,o.kt)("inlineCode",{parentName:"p"},"/"),", like ",(0,o.kt)("inlineCode",{parentName:"p"},"/_oneshots")," ")),(0,o.kt)("h3",{id:"metadata"},"Metadata"),(0,o.kt)("p",null,"While the book metadata will be processed as usual, the series metadata for One-Shots will be handled slightly differently:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"the Mylar ",(0,o.kt)("inlineCode",{parentName:"li"},"series.json")," is ignored"),(0,o.kt)("li",{parentName:"ul"},"the local artwork is ignored. The one for the book is still processed as usual."),(0,o.kt)("li",{parentName:"ul"},"in addition, some metadata is set:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"the series title and summary are set from the one of the book"),(0,o.kt)("li",{parentName:"ul"},"the series status is set to ",(0,o.kt)("em",{parentName:"li"},"Ended")),(0,o.kt)("li",{parentName:"ul"},"the series total book count is set to 1")))),(0,o.kt)("h3",{id:"dashboard"},"Dashboard"),(0,o.kt)("p",null,"The Dashboard has specific handling for One-Shots:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"One-Shots are displayed in a new view that shows both series and book metadata fields"),(0,o.kt)("li",{parentName:"ul"},"when editing One-Shots metadata, a new dialog will allow to edit both book and series level metadata fields.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"If you edit multiple items and all are One-Shots, this dialog is also used."),(0,o.kt)("li",{parentName:"ul"},"If there is a mix of One-Shots and normal items (series or books), the regular dialog will be used instead.s"))),(0,o.kt)("li",{parentName:"ul"},"One-Shots can be added to both collections and readlists"),(0,o.kt)("li",{parentName:"ul"},"One-Shots will not show in the ",(0,o.kt)("em",{parentName:"li"},"Recently Added Series")," or ",(0,o.kt)("em",{parentName:"li"},"Recently Updated Series")," sections, but they will show in ",(0,o.kt)("em",{parentName:"li"},"Recently Added Books"),"."),(0,o.kt)("li",{parentName:"ul"},"Item card in Series views (when browsing libraries or collections):",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"will show an unread indicator in the top-right corner, instead of the number of unread books"),(0,o.kt)("li",{parentName:"ul"},"will display ",(0,o.kt)("em",{parentName:"li"},"One-shot")," at the bottom of the card instead of the number of books"))),(0,o.kt)("li",{parentName:"ul"},"Item card in Book views (when browsing readlists or recommended) will not display the Series name nor the book number"),(0,o.kt)("li",{parentName:"ul"},"the Series filter panel has a ",(0,o.kt)("em",{parentName:"li"},"One-shot")," filter"),(0,o.kt)("li",{parentName:"ul"},"One-Shots will not show in the Series picker dialog when importing books"),(0,o.kt)("li",{parentName:"ul"},"One-Shots will show only as books in the search bar and detailed search view")),(0,o.kt)("h3",{id:"rest-api"},"REST API"),(0,o.kt)("p",null,"One-Shots are still composed of a Series with a single Book, however both have a new ",(0,o.kt)("inlineCode",{parentName:"p"},"boolean")," attribute ",(0,o.kt)("inlineCode",{parentName:"p"},"oneshot")," which can be used in client applications to handle One-Shots differently."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[1778],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),d=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},h=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),p=d(n),c=o,m=p["".concat(s,".").concat(c)]||p[c]||u[c]||r;return n?a.createElement(m,i(i({ref:t},h),{},{components:n})):a.createElement(m,i({ref:t},h))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(3905));const r={},i="One-Shots",l={unversionedId:"guides/oneshots",id:"guides/oneshots",title:"One-Shots",description:"What are One-Shots?",source:"@site/docs/guides/oneshots.md",sourceDirName:"guides",slug:"/guides/oneshots",permalink:"/docs/guides/oneshots",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/oneshots.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"},next:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"}},s={},d=[{value:"What are One-Shots?",id:"what-are-one-shots",level:2},{value:"One-Shots handling",id:"one-shots-handling",level:2},{value:"Configuration",id:"configuration",level:3},{value:"Processing",id:"processing",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Dashboard",id:"dashboard",level:3},{value:"REST API",id:"rest-api",level:3}],h={toc:d},p="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},h,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"one-shots"},"One-Shots"),(0,o.kt)("h2",{id:"what-are-one-shots"},"What are One-Shots?"),(0,o.kt)("p",null,"One-Shots are series containing a single book. "),(0,o.kt)("p",null,"However not all series containing a single book are One-Shots. Here are some example of single book series that are not One-Shots:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"a series that has multiple books published, but only a single book is collected in Komga"),(0,o.kt)("li",{parentName:"ul"},"a series that currently has only 1 book published, but will have more in the future")),(0,o.kt)("p",null,"Historically Komga required each series to be in its own directory on disk. This was cumbersome for One-Shots, as each book needed to be placed in a dedicated directory."),(0,o.kt)("p",null,"With One-Shots handling, this is not necessary anymore."),(0,o.kt)("p",null,"One-Shots are still composed of a series with a single book, but are handled slightly differently."),(0,o.kt)("h2",{id:"one-shots-handling"},"One-Shots handling"),(0,o.kt)("h3",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"You can enable One-Shots handling through ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/libraries#one-shots-directory"},"Library options"),"."),(0,o.kt)("h3",{id:"processing"},"Processing"),(0,o.kt)("p",null,"One-Shots are detected during the scan. Any directory for which the full path contains the configured ",(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," will generate One-Shot series instead of standard Series."),(0,o.kt)("p",null,"Given the following directory structure, with ",(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," configured to ",(0,o.kt)("inlineCode",{parentName:"p"},"_oneshots"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/data/books/Comics\n\u251c\u2500\u2500 Space Adventures\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_002.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_003.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 _oneshots\n\u2502\xa0\xa0 \u2514\u2500\u2500 Pluto Adventures.cbz\n\u251c\u2500\u2500 Super Duck\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_002.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 Super_Duck_003.cbz\n\u2514\u2500\u2500 _oneshots\n \u251c\u2500\u2500 A oneshot.cbz\n \u251c\u2500\u2500 Another oneshot.cbz\n \u2514\u2500\u2500 Yet another oneshot.cbz\n")),(0,o.kt)("p",null,"This will result in:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"2 regular series:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Space Adventures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Super Duck")))),(0,o.kt)("li",{parentName:"ul"},"4 One-Shots:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Pluto Adventures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"A oneshot")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Another oneshot")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("em",{parentName:"li"},"Yet another oneshot"))))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," is checked against ",(0,o.kt)("strong",{parentName:"p"},"any part of the directory path"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"_oneshots")," will match on:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/_oneshots")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/My weirdly named _oneshots"))))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To match only directories starting with the provided string, prefix ",(0,o.kt)("em",{parentName:"p"},"One-Shots directory")," with ",(0,o.kt)("inlineCode",{parentName:"p"},"/"),", like ",(0,o.kt)("inlineCode",{parentName:"p"},"/_oneshots")," ")),(0,o.kt)("h3",{id:"metadata"},"Metadata"),(0,o.kt)("p",null,"While the book metadata will be processed as usual, the series metadata for One-Shots will be handled slightly differently:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"the Mylar ",(0,o.kt)("inlineCode",{parentName:"li"},"series.json")," is ignored"),(0,o.kt)("li",{parentName:"ul"},"the local artwork is ignored. The one for the book is still processed as usual."),(0,o.kt)("li",{parentName:"ul"},"in addition, some metadata is set:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"the series title and summary are set from the one of the book"),(0,o.kt)("li",{parentName:"ul"},"the series status is set to ",(0,o.kt)("em",{parentName:"li"},"Ended")),(0,o.kt)("li",{parentName:"ul"},"the series total book count is set to 1")))),(0,o.kt)("h3",{id:"dashboard"},"Dashboard"),(0,o.kt)("p",null,"The Dashboard has specific handling for One-Shots:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"One-Shots are displayed in a new view that shows both series and book metadata fields"),(0,o.kt)("li",{parentName:"ul"},"when editing One-Shots metadata, a new dialog will allow to edit both book and series level metadata fields.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"If you edit multiple items and all are One-Shots, this dialog is also used."),(0,o.kt)("li",{parentName:"ul"},"If there is a mix of One-Shots and normal items (series or books), the regular dialog will be used instead.s"))),(0,o.kt)("li",{parentName:"ul"},"One-Shots can be added to both collections and readlists"),(0,o.kt)("li",{parentName:"ul"},"One-Shots will not show in the ",(0,o.kt)("em",{parentName:"li"},"Recently Added Series")," or ",(0,o.kt)("em",{parentName:"li"},"Recently Updated Series")," sections, but they will show in ",(0,o.kt)("em",{parentName:"li"},"Recently Added Books"),"."),(0,o.kt)("li",{parentName:"ul"},"Item card in Series views (when browsing libraries or collections):",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"will show an unread indicator in the top-right corner, instead of the number of unread books"),(0,o.kt)("li",{parentName:"ul"},"will display ",(0,o.kt)("em",{parentName:"li"},"One-shot")," at the bottom of the card instead of the number of books"))),(0,o.kt)("li",{parentName:"ul"},"Item card in Book views (when browsing readlists or recommended) will not display the Series name nor the book number"),(0,o.kt)("li",{parentName:"ul"},"the Series filter panel has a ",(0,o.kt)("em",{parentName:"li"},"One-shot")," filter"),(0,o.kt)("li",{parentName:"ul"},"One-Shots will not show in the Series picker dialog when importing books"),(0,o.kt)("li",{parentName:"ul"},"One-Shots will show only as books in the search bar and detailed search view")),(0,o.kt)("h3",{id:"rest-api"},"REST API"),(0,o.kt)("p",null,"One-Shots are still composed of a Series with a single Book, however both have a new ",(0,o.kt)("inlineCode",{parentName:"p"},"boolean")," attribute ",(0,o.kt)("inlineCode",{parentName:"p"},"oneshot")," which can be used in client applications to handle One-Shots differently."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/24227623.a3541fd8.js b/assets/js/24227623.e0b8ae91.js similarity index 97% rename from assets/js/24227623.a3541fd8.js rename to assets/js/24227623.e0b8ae91.js index e95f4dbf..5dedc29f 100644 --- a/assets/js/24227623.a3541fd8.js +++ b/assets/js/24227623.e0b8ae91.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[2854],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>m});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var d=a.createContext({}),l=function(e){var r=a.useContext(d),t=r;return e&&(t="function"==typeof e?e(r):s(s({},r),e)),t},p=function(e){var r=l(e.components);return a.createElement(d.Provider,{value:r},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},g=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,o=e.originalType,d=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=l(t),g=n,m=c["".concat(d,".").concat(g)]||c[g]||u[g]||o;return t?a.createElement(m,s(s({ref:r},p),{},{components:t})):a.createElement(m,s({ref:r},p))}));function m(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var o=t.length,s=new Array(o);s[0]=g;var i={};for(var d in r)hasOwnProperty.call(r,d)&&(i[d]=r[d]);i.originalType=e,i[c]="string"==typeof e?e:n,s[1]=i;for(var l=2;l{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=t(7462),n=(t(7294),t(3905));const o={},s="Read progress",i={unversionedId:"guides/read-progress",id:"guides/read-progress",title:"Read progress",description:"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.",source:"@site/docs/guides/read-progress.md",sourceDirName:"guides",slug:"/guides/read-progress",permalink:"/docs/guides/read-progress",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/read-progress.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Server settings & management",permalink:"/docs/guides/server-settings"},next:{title:"Collections",permalink:"/docs/guides/collections"}},d={},l=[{value:"Supported readers",id:"supported-readers",level:2},{value:"Webreader",id:"webreader",level:3},{value:"Tachiyomi",id:"tachiyomi",level:3},{value:"CDisplayEx",id:"cdisplayex",level:3},{value:"Unread and in progress indicators",id:"unread-and-in-progress-indicators",level:2},{value:"Marking progress manually",id:"marking-progress-manually",level:2}],p={toc:l},c="wrapper";function u(e){let{components:r,...t}=e;return(0,n.kt)(c,(0,a.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-progress"},"Read progress"),(0,n.kt)("p",null,"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately."),(0,n.kt)("h2",{id:"supported-readers"},"Supported readers"),(0,n.kt)("h3",{id:"webreader"},"Webreader"),(0,n.kt)("p",null,"The webreader can track the progress as you read:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"when you open a book that is in progress, the webreader will resume reading where you left it."),(0,n.kt)("li",{parentName:"ul"},"when you finish reading a book, the webreader will mark it as read.")),(0,n.kt)("h3",{id:"tachiyomi"},"Tachiyomi"),(0,n.kt)("p",null,"Tachiyomi can track progress of read books, using the Komga tracker. See ",(0,n.kt)("a",{parentName:"p",href:"tachiyomi#track-read-progress"},"here")," for more details."),(0,n.kt)("h3",{id:"cdisplayex"},"CDisplayEx"),(0,n.kt)("p",null,"CDisplayEx syncs read status and reading progress, See ",(0,n.kt)("a",{parentName:"p",href:"cdisplayex#reading-status"},"here"),"."),(0,n.kt)("h2",{id:"unread-and-in-progress-indicators"},"Unread and in progress indicators"),(0,n.kt)("p",null,"The book card will display read progress indicators:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Unread books will display an orange tick in the top right corner:")),(0,n.kt)("img",{src:"/assets/media/guides/read-progress/book-card-unread.png",style:{maxHeight:"300px"},alt:"Book card showing unread indicator"}),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"In progress books will display a progress bar at the bottom of the thumbnail:")),(0,n.kt)("img",{src:"/assets/media/guides/read-progress/book-card-inprogress.png",style:{maxHeight:"300px"},alt:"Book card showing reading progress"}),(0,n.kt)("p",null,"In addition, the series card will display the number of unread books in the top right corner:"),(0,n.kt)("img",{src:"/assets/media/guides/read-progress/series-card-unread-count.png",style:{maxHeight:"300px"},alt:"Series card showing unread count of books"}),(0,n.kt)("h2",{id:"marking-progress-manually"},"Marking progress manually"),(0,n.kt)("p",null,"You can mark books or series as read or unread manually. Look for the action menu icon ",(0,n.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,n.kt)("em",{parentName:"p"},"Mark as read")," or ",(0,n.kt)("em",{parentName:"p"},"Mark as unread"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[2854],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>m});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var d=a.createContext({}),l=function(e){var r=a.useContext(d),t=r;return e&&(t="function"==typeof e?e(r):s(s({},r),e)),t},p=function(e){var r=l(e.components);return a.createElement(d.Provider,{value:r},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},g=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,o=e.originalType,d=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=l(t),g=n,m=c["".concat(d,".").concat(g)]||c[g]||u[g]||o;return t?a.createElement(m,s(s({ref:r},p),{},{components:t})):a.createElement(m,s({ref:r},p))}));function m(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var o=t.length,s=new Array(o);s[0]=g;var i={};for(var d in r)hasOwnProperty.call(r,d)&&(i[d]=r[d]);i.originalType=e,i[c]="string"==typeof e?e:n,s[1]=i;for(var l=2;l{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=t(7462),n=(t(7294),t(3905));const o={},s="Read progress",i={unversionedId:"guides/read-progress",id:"guides/read-progress",title:"Read progress",description:"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.",source:"@site/docs/guides/read-progress.md",sourceDirName:"guides",slug:"/guides/read-progress",permalink:"/docs/guides/read-progress",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/read-progress.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Server settings & management",permalink:"/docs/guides/server-settings"},next:{title:"Collections",permalink:"/docs/guides/collections"}},d={},l=[{value:"Supported readers",id:"supported-readers",level:2},{value:"Webreader",id:"webreader",level:3},{value:"Tachiyomi",id:"tachiyomi",level:3},{value:"CDisplayEx",id:"cdisplayex",level:3},{value:"Unread and in progress indicators",id:"unread-and-in-progress-indicators",level:2},{value:"Marking progress manually",id:"marking-progress-manually",level:2}],p={toc:l},c="wrapper";function u(e){let{components:r,...t}=e;return(0,n.kt)(c,(0,a.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-progress"},"Read progress"),(0,n.kt)("p",null,"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately."),(0,n.kt)("h2",{id:"supported-readers"},"Supported readers"),(0,n.kt)("h3",{id:"webreader"},"Webreader"),(0,n.kt)("p",null,"The webreader can track the progress as you read:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"when you open a book that is in progress, the webreader will resume reading where you left it."),(0,n.kt)("li",{parentName:"ul"},"when you finish reading a book, the webreader will mark it as read.")),(0,n.kt)("h3",{id:"tachiyomi"},"Tachiyomi"),(0,n.kt)("p",null,"Tachiyomi can track progress of read books, using the Komga tracker. See ",(0,n.kt)("a",{parentName:"p",href:"tachiyomi#track-read-progress"},"here")," for more details."),(0,n.kt)("h3",{id:"cdisplayex"},"CDisplayEx"),(0,n.kt)("p",null,"CDisplayEx syncs read status and reading progress, See ",(0,n.kt)("a",{parentName:"p",href:"cdisplayex#reading-status"},"here"),"."),(0,n.kt)("h2",{id:"unread-and-in-progress-indicators"},"Unread and in progress indicators"),(0,n.kt)("p",null,"The book card will display read progress indicators:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Unread books will display an orange tick in the top right corner:")),(0,n.kt)("img",{src:"/assets/media/guides/read-progress/book-card-unread.png",style:{maxHeight:"300px"},alt:"Book card showing unread indicator"}),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"In progress books will display a progress bar at the bottom of the thumbnail:")),(0,n.kt)("img",{src:"/assets/media/guides/read-progress/book-card-inprogress.png",style:{maxHeight:"300px"},alt:"Book card showing reading progress"}),(0,n.kt)("p",null,"In addition, the series card will display the number of unread books in the top right corner:"),(0,n.kt)("img",{src:"/assets/media/guides/read-progress/series-card-unread-count.png",style:{maxHeight:"300px"},alt:"Series card showing unread count of books"}),(0,n.kt)("h2",{id:"marking-progress-manually"},"Marking progress manually"),(0,n.kt)("p",null,"You can mark books or series as read or unread manually. Look for the action menu icon ",(0,n.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,n.kt)("em",{parentName:"p"},"Mark as read")," or ",(0,n.kt)("em",{parentName:"p"},"Mark as unread"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2b8f2de1.8e04d80b.js b/assets/js/2b8f2de1.3d315027.js similarity index 98% rename from assets/js/2b8f2de1.8e04d80b.js rename to assets/js/2b8f2de1.3d315027.js index e3c7dc84..ac4c53ff 100644 --- a/assets/js/2b8f2de1.8e04d80b.js +++ b/assets/js/2b8f2de1.3d315027.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9925],{3905:(t,e,r)=>{r.d(e,{Zo:()=>s,kt:()=>k});var a=r(7294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function l(t){for(var e=1;e=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var i=a.createContext({}),d=function(t){var e=a.useContext(i),r=e;return t&&(r="function"==typeof t?t(e):l(l({},e),t)),r},s=function(t){var e=d(t.components);return a.createElement(i.Provider,{value:e},t.children)},m="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(t,e){var r=t.components,n=t.mdxType,o=t.originalType,i=t.parentName,s=p(t,["components","mdxType","originalType","parentName"]),m=d(r),u=n,k=m["".concat(i,".").concat(u)]||m[u]||c[u]||o;return r?a.createElement(k,l(l({ref:e},s),{},{components:r})):a.createElement(k,l({ref:e},s))}));function k(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=r.length,l=new Array(o);l[0]=u;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[m]="string"==typeof t?t:n,l[1]=p;for(var d=2;d{r.r(e),r.d(e,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>p,toc:()=>d});var a=r(7462),n=(r(7294),r(3905));const o={},l="Read with any OPDS reader",p={unversionedId:"guides/opds",id:"guides/opds",title:"Read with any OPDS reader",description:"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.",source:"@site/docs/guides/opds.md",sourceDirName:"guides",slug:"/guides/opds",permalink:"/docs/guides/opds",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/opds.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"},next:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"}},i={},d=[],s={toc:d},m="wrapper";function c(t){let{components:e,...r}=t;return(0,n.kt)(m,(0,a.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-with-any-opds-reader"},"Read with any OPDS reader"),(0,n.kt)("p",null,"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol."),(0,n.kt)("p",null,"Komga supports OPDS v1 and v2, the URL should be configured accordingly:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"OPDS v1: ",(0,n.kt)("inlineCode",{parentName:"li"},"http(s)://your-server(:25600)(/baseUrl)/opds/v1.2/catalog")),(0,n.kt)("li",{parentName:"ul"},"OPDS v2: ",(0,n.kt)("inlineCode",{parentName:"li"},"http(s)://your-server(:25600)(/baseUrl)/opds/v2/catalog"))),(0,n.kt)("p",null,"Here is a list of reader applications that have been tested:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"OS"),(0,n.kt)("th",{parentName:"tr",align:null},"App name"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Status"),(0,n.kt)("th",{parentName:"tr",align:"center"},"OpenSearch support"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Page streaming support"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=org.geometerplus.zlibrary.ui.android"},"FBReader: Favorite Book Reader")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u274c Can't download CBR/CBZ, only PDF. PDF only supported in Premium version. Does not remember password."),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=com.flyersoft.moonreader"},"Moon+ Reader")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=com.foobnix.pdf.reader"},"Librera")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=com.obreey.reader"},"PocketBook")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u274c Doesn't show CBR/CBZ"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"iOS"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"http://kybook-reader.com/"},"KyBook 3")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},(0,n.kt)("strong",{parentName:"td"},"Yes")),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"iOS"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://panels.app/"},"Panels")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},(0,n.kt)("strong",{parentName:"td"},"OPDS PSE 1.0")," (v2.8.0+)",(0,n.kt)("br",null),(0,n.kt)("strong",{parentName:"td"},"OPDS PSE 1.1")," (v2.9.7+)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"iPadOS"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://apps.apple.com/us/app/chunky-comic-reader/id663567628"},"Chunky Comic Reader")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u274c Does not work anymore with Komga 1.4.0+"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},(0,n.kt)("strong",{parentName:"td"},"OPDS PSE 1.0"))))),(0,n.kt)("p",null,"The OPDS v1 feed also supports:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"OpenSearch functionality, to search by ",(0,n.kt)("inlineCode",{parentName:"li"},"Series")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://anansi-project.github.io/docs/opds-pse/intro"},"OPDS Page Streaming Extension 1.2"))))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9925],{3905:(t,e,r)=>{r.d(e,{Zo:()=>s,kt:()=>k});var a=r(7294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function l(t){for(var e=1;e=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var i=a.createContext({}),d=function(t){var e=a.useContext(i),r=e;return t&&(r="function"==typeof t?t(e):l(l({},e),t)),r},s=function(t){var e=d(t.components);return a.createElement(i.Provider,{value:e},t.children)},m="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(t,e){var r=t.components,n=t.mdxType,o=t.originalType,i=t.parentName,s=p(t,["components","mdxType","originalType","parentName"]),m=d(r),u=n,k=m["".concat(i,".").concat(u)]||m[u]||c[u]||o;return r?a.createElement(k,l(l({ref:e},s),{},{components:r})):a.createElement(k,l({ref:e},s))}));function k(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=r.length,l=new Array(o);l[0]=u;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[m]="string"==typeof t?t:n,l[1]=p;for(var d=2;d{r.r(e),r.d(e,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>p,toc:()=>d});var a=r(7462),n=(r(7294),r(3905));const o={},l="Read with any OPDS reader",p={unversionedId:"guides/opds",id:"guides/opds",title:"Read with any OPDS reader",description:"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.",source:"@site/docs/guides/opds.md",sourceDirName:"guides",slug:"/guides/opds",permalink:"/docs/guides/opds",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/opds.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"},next:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"}},i={},d=[],s={toc:d},m="wrapper";function c(t){let{components:e,...r}=t;return(0,n.kt)(m,(0,a.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-with-any-opds-reader"},"Read with any OPDS reader"),(0,n.kt)("p",null,"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol."),(0,n.kt)("p",null,"Komga supports OPDS v1 and v2, the URL should be configured accordingly:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"OPDS v1: ",(0,n.kt)("inlineCode",{parentName:"li"},"http(s)://your-server(:25600)(/baseUrl)/opds/v1.2/catalog")),(0,n.kt)("li",{parentName:"ul"},"OPDS v2: ",(0,n.kt)("inlineCode",{parentName:"li"},"http(s)://your-server(:25600)(/baseUrl)/opds/v2/catalog"))),(0,n.kt)("p",null,"Here is a list of reader applications that have been tested:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"OS"),(0,n.kt)("th",{parentName:"tr",align:null},"App name"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Status"),(0,n.kt)("th",{parentName:"tr",align:"center"},"OpenSearch support"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Page streaming support"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=org.geometerplus.zlibrary.ui.android"},"FBReader: Favorite Book Reader")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u274c Can't download CBR/CBZ, only PDF. PDF only supported in Premium version. Does not remember password."),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=com.flyersoft.moonreader"},"Moon+ Reader")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=com.foobnix.pdf.reader"},"Librera")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Android"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://play.google.com/store/apps/details?id=com.obreey.reader"},"PocketBook")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u274c Doesn't show CBR/CBZ"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"iOS"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"http://kybook-reader.com/"},"KyBook 3")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},(0,n.kt)("strong",{parentName:"td"},"Yes")),(0,n.kt)("td",{parentName:"tr",align:"center"},"No")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"iOS"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://panels.app/"},"Panels")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},(0,n.kt)("strong",{parentName:"td"},"OPDS PSE 1.0")," (v2.8.0+)",(0,n.kt)("br",null),(0,n.kt)("strong",{parentName:"td"},"OPDS PSE 1.1")," (v2.9.7+)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"iPadOS"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://apps.apple.com/us/app/chunky-comic-reader/id663567628"},"Chunky Comic Reader")),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u274c Does not work anymore with Komga 1.4.0+"),(0,n.kt)("td",{parentName:"tr",align:"center"},"No"),(0,n.kt)("td",{parentName:"tr",align:"center"},(0,n.kt)("strong",{parentName:"td"},"OPDS PSE 1.0"))))),(0,n.kt)("p",null,"The OPDS v1 feed also supports:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"OpenSearch functionality, to search by ",(0,n.kt)("inlineCode",{parentName:"li"},"Series")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://anansi-project.github.io/docs/opds-pse/intro"},"OPDS Page Streaming Extension 1.2"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/416fe654.62e3f434.js b/assets/js/416fe654.c0076a1f.js similarity index 98% rename from assets/js/416fe654.62e3f434.js rename to assets/js/416fe654.c0076a1f.js index 7be65710..3e954703 100644 --- a/assets/js/416fe654.62e3f434.js +++ b/assets/js/416fe654.c0076a1f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7214],{3905:(t,e,o)=>{o.d(e,{Zo:()=>c,kt:()=>g});var n=o(7294);function r(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function a(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,n)}return o}function i(t){for(var e=1;e=0||(r[o]=t[o]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,o)&&(r[o]=t[o])}return r}var l=n.createContext({}),p=function(t){var e=n.useContext(l),o=e;return t&&(o="function"==typeof t?t(e):i(i({},e),t)),o},c=function(t){var e=p(t.components);return n.createElement(l.Provider,{value:e},t.children)},u="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},h=n.forwardRef((function(t,e){var o=t.components,r=t.mdxType,a=t.originalType,l=t.parentName,c=s(t,["components","mdxType","originalType","parentName"]),u=p(o),h=r,g=u["".concat(l,".").concat(h)]||u[h]||m[h]||a;return o?n.createElement(g,i(i({ref:e},c),{},{components:o})):n.createElement(g,i({ref:e},c))}));function g(t,e){var o=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[u]="string"==typeof t?t:r,i[1]=s;for(var p=2;p{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const a={},i="Contribution",s={unversionedId:"contribution",id:"contribution",title:"Contribution",description:"Code",source:"@site/docs/contribution.md",sourceDirName:".",slug:"/contribution",permalink:"/docs/contribution",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/contribution.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Command Line Interface",permalink:"/docs/guides/cli"},next:{title:"Community",permalink:"/docs/community"}},l={},p=[{value:"Code",id:"code",level:2},{value:"Application",id:"application",level:3},{value:"Tachiyomi Extension",id:"tachiyomi-extension",level:3},{value:"Website",id:"website",level:3},{value:"Translation",id:"translation",level:2},{value:"Helpful links",id:"helpful-links",level:4},{value:"Project status",id:"project-status",level:4},{value:"Donation",id:"donation",level:2},{value:"Sponsors",id:"sponsors",level:2}],c={toc:p},u="wrapper";function m(t){let{components:e,...o}=t;return(0,r.kt)(u,(0,n.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"contribution"},"Contribution"),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Skilled at code? Know how to improve something or you generally want to support the creation of the app?"),(0,r.kt)("h3",{id:"application"},"Application"),(0,r.kt)("p",null,"The main application: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga"},"gotson/komga")," ",(0,r.kt)("img",{parentName:"p",src:"https://img.shields.io/github/issues/gotson/komga?style=social",alt:"GitHub issues"})),(0,r.kt)("h3",{id:"tachiyomi-extension"},"Tachiyomi Extension"),(0,r.kt)("p",null,"The official Komga extension for Tachiyomi: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/tachiyomiorg/tachiyomi-extensions/tree/master/src/all/komga"},"tachiyomiorg/tachiyomi-extensions")),(0,r.kt)("h3",{id:"website"},"Website"),(0,r.kt)("p",null,"The repository that hosts this very website you're reading on now: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga-website"},"gotson/komga-website")),(0,r.kt)("h2",{id:"translation"},"Translation"),(0,r.kt)("a",{href:"https://hosted.weblate.org/engage/komga/"},(0,r.kt)("img",{src:"https://hosted.weblate.org/widgets/komga/-/svg-badge.svg",alt:"Translation status"})),(0,r.kt)("p",null,"Want to help translate the app to your language? You can easily help by utilizing a service we use called ",(0,r.kt)("strong",{parentName:"p"},"Weblate"),"."),(0,r.kt)("p",null,"Visit our translation project ",(0,r.kt)("a",{parentName:"p",href:"https://hosted.weblate.org/engage/komga/"},"here"),"."),(0,r.kt)("h4",{id:"helpful-links"},"Helpful links"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.weblate.org/en/latest/user/translating.html"},"Translators guide")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.weblate.org/en/latest/user/profile.html#secondary-languages"},"Secondary-languages")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.weblate.org/en/latest/user/profile.html#subscriptions"},"Subscriptions"))),(0,r.kt)("h4",{id:"project-status"},"Project status"),(0,r.kt)("a",{href:"https://hosted.weblate.org/engage/komga/"},(0,r.kt)("img",{src:"https://hosted.weblate.org/widgets/komga/-/horizontal-auto.svg",alt:"Translation status"})),(0,r.kt)("h2",{id:"donation"},"Donation"),(0,r.kt)("p",null,"If you can't contribute code, but you still wish to help, then you can choose to contribute financially by using the buttons below, or going directly to any of those platforms:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://opencollective.com/komga"},"Open Collective")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://ko-fi.com/gotson"},"Ko-Fi")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/sponsors/gotson"},"Github Sponsors"))),(0,r.kt)("h2",{id:"sponsors"},"Sponsors"),(0,r.kt)("br",null),(0,r.kt)("a",{href:"https://www.jetbrains.com/?from=Komga",target:"_blank",rel:"noopener"},(0,r.kt)("img",{src:"/assets/media/sponsors/sponsors-jetbrains.png",style:{maxHeight:"100px"}})))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7214],{3905:(t,e,o)=>{o.d(e,{Zo:()=>c,kt:()=>g});var n=o(7294);function r(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function a(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,n)}return o}function i(t){for(var e=1;e=0||(r[o]=t[o]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,o)&&(r[o]=t[o])}return r}var l=n.createContext({}),p=function(t){var e=n.useContext(l),o=e;return t&&(o="function"==typeof t?t(e):i(i({},e),t)),o},c=function(t){var e=p(t.components);return n.createElement(l.Provider,{value:e},t.children)},u="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},h=n.forwardRef((function(t,e){var o=t.components,r=t.mdxType,a=t.originalType,l=t.parentName,c=s(t,["components","mdxType","originalType","parentName"]),u=p(o),h=r,g=u["".concat(l,".").concat(h)]||u[h]||m[h]||a;return o?n.createElement(g,i(i({ref:e},c),{},{components:o})):n.createElement(g,i({ref:e},c))}));function g(t,e){var o=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[u]="string"==typeof t?t:r,i[1]=s;for(var p=2;p{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const a={},i="Contribution",s={unversionedId:"contribution",id:"contribution",title:"Contribution",description:"Code",source:"@site/docs/contribution.md",sourceDirName:".",slug:"/contribution",permalink:"/docs/contribution",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/contribution.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Command Line Interface",permalink:"/docs/guides/cli"},next:{title:"Community",permalink:"/docs/community"}},l={},p=[{value:"Code",id:"code",level:2},{value:"Application",id:"application",level:3},{value:"Tachiyomi Extension",id:"tachiyomi-extension",level:3},{value:"Website",id:"website",level:3},{value:"Translation",id:"translation",level:2},{value:"Helpful links",id:"helpful-links",level:4},{value:"Project status",id:"project-status",level:4},{value:"Donation",id:"donation",level:2},{value:"Sponsors",id:"sponsors",level:2}],c={toc:p},u="wrapper";function m(t){let{components:e,...o}=t;return(0,r.kt)(u,(0,n.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"contribution"},"Contribution"),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Skilled at code? Know how to improve something or you generally want to support the creation of the app?"),(0,r.kt)("h3",{id:"application"},"Application"),(0,r.kt)("p",null,"The main application: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga"},"gotson/komga")," ",(0,r.kt)("img",{parentName:"p",src:"https://img.shields.io/github/issues/gotson/komga?style=social",alt:"GitHub issues"})),(0,r.kt)("h3",{id:"tachiyomi-extension"},"Tachiyomi Extension"),(0,r.kt)("p",null,"The official Komga extension for Tachiyomi: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/tachiyomiorg/tachiyomi-extensions/tree/master/src/all/komga"},"tachiyomiorg/tachiyomi-extensions")),(0,r.kt)("h3",{id:"website"},"Website"),(0,r.kt)("p",null,"The repository that hosts this very website you're reading on now: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga-website"},"gotson/komga-website")),(0,r.kt)("h2",{id:"translation"},"Translation"),(0,r.kt)("a",{href:"https://hosted.weblate.org/engage/komga/"},(0,r.kt)("img",{src:"https://hosted.weblate.org/widgets/komga/-/svg-badge.svg",alt:"Translation status"})),(0,r.kt)("p",null,"Want to help translate the app to your language? You can easily help by utilizing a service we use called ",(0,r.kt)("strong",{parentName:"p"},"Weblate"),"."),(0,r.kt)("p",null,"Visit our translation project ",(0,r.kt)("a",{parentName:"p",href:"https://hosted.weblate.org/engage/komga/"},"here"),"."),(0,r.kt)("h4",{id:"helpful-links"},"Helpful links"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.weblate.org/en/latest/user/translating.html"},"Translators guide")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.weblate.org/en/latest/user/profile.html#secondary-languages"},"Secondary-languages")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.weblate.org/en/latest/user/profile.html#subscriptions"},"Subscriptions"))),(0,r.kt)("h4",{id:"project-status"},"Project status"),(0,r.kt)("a",{href:"https://hosted.weblate.org/engage/komga/"},(0,r.kt)("img",{src:"https://hosted.weblate.org/widgets/komga/-/horizontal-auto.svg",alt:"Translation status"})),(0,r.kt)("h2",{id:"donation"},"Donation"),(0,r.kt)("p",null,"If you can't contribute code, but you still wish to help, then you can choose to contribute financially by using the buttons below, or going directly to any of those platforms:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://opencollective.com/komga"},"Open Collective")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://ko-fi.com/gotson"},"Ko-Fi")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/sponsors/gotson"},"Github Sponsors"))),(0,r.kt)("h2",{id:"sponsors"},"Sponsors"),(0,r.kt)("br",null),(0,r.kt)("a",{href:"https://www.jetbrains.com/?from=Komga",target:"_blank",rel:"noopener"},(0,r.kt)("img",{src:"/assets/media/sponsors/sponsors-jetbrains.png",style:{maxHeight:"100px"}})))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/49136dfa.ac336df7.js b/assets/js/49136dfa.f49687bb.js similarity index 97% rename from assets/js/49136dfa.ac336df7.js rename to assets/js/49136dfa.f49687bb.js index 7812005a..0144445f 100644 --- a/assets/js/49136dfa.ac336df7.js +++ b/assets/js/49136dfa.f49687bb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[473],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>f});var i=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function l(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=i.createContext({}),c=function(e){var t=i.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,s=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=c(o),m=r,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return o?i.createElement(f,l(l({ref:t},p),{},{components:o})):i.createElement(f,l({ref:t},p))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,l=new Array(n);l[0]=m;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a[u]="string"==typeof e?e:r,l[1]=a;for(var c=2;c{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var i=o(7462),r=(o(7294),o(3905));const n={},l="Import Books",a={unversionedId:"guides/import-books",id:"guides/import-books",title:"Import Books",description:"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).",source:"@site/docs/guides/import-books.md",sourceDirName:"guides",slug:"/guides/import-books",permalink:"/docs/guides/import-books",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/import-books.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Full Text Search",permalink:"/docs/guides/search"},next:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"}},s={},c=[{value:"Scan for books",id:"scan-for-books",level:2},{value:"Select destination series",id:"select-destination-series",level:2},{value:"Check book details",id:"check-book-details",level:2},{value:"Finalize the import",id:"finalize-the-import",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,i.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"import-books"},"Import Books"),(0,r.kt)("p",null,"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the ",(0,r.kt)("em",{parentName:"p"},"Import > Books")," screen)."),(0,r.kt)("h2",{id:"scan-for-books"},"Scan for books"),(0,r.kt)("p",null,"Start by choosing a folder to scan for eligible books, and click ",(0,r.kt)("em",{parentName:"p"},"Scan"),"."),(0,r.kt)("img",{src:"/assets/media/guides/import-books/book-import-scan.png",style:{maxHeight:" 400px"},alt:"Scan for books"}),(0,r.kt)("p",null,"Komga will display a list of all files eligible for import."),(0,r.kt)("h2",{id:"select-destination-series"},"Select destination series"),(0,r.kt)("p",null,"You will need to pick a destination series for each. You can choose individually, or for all the selected files at once using the ",(0,r.kt)("em",{parentName:"p"},"Select Series")," button."),(0,r.kt)("img",{src:"/assets/media/guides/import-books/book-import-pick-series.png",style:{maxHeight:" 400px"},alt:"Select series"}),(0,r.kt)("h2",{id:"check-book-details"},"Check book details"),(0,r.kt)("p",null,"For each book, you can:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"display the book details: format, number of pages, and detailed page list"),(0,r.kt)("li",{parentName:"ul"},"browse the book pages"),(0,r.kt)("li",{parentName:"ul"},"change the destination file name")),(0,r.kt)("p",null,"If you choose a number for a book, and a book already exists with that number, Komga will offer you to upgrade it, effectively replacing the existing file. In case of upgrade, you can:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"display the details of both books side by side"),(0,r.kt)("li",{parentName:"ul"},"browse both books side by side")),(0,r.kt)("img",{src:"/assets/media/guides/import-books/book-import-buttons.png",style:{maxHeight:" 400px"},alt:"Book actions"}),(0,r.kt)("h2",{id:"finalize-the-import"},"Finalize the import"),(0,r.kt)("p",null,"Komga will import only the selected files (checkbox on the left)."),(0,r.kt)("p",null,"You can decide to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"move the files: files will be moved from their location, effectively deleting the original file."),(0,r.kt)("li",{parentName:"ul"},"copy/hardlink the files: Komga will try to hardlink the files to their destination (compatible file systems only), and if that doesn't work will copy the files to their destination, leaving the original file untouched.")),(0,r.kt)("p",null,"Cick ",(0,r.kt)("em",{parentName:"p"},"Import")," to start the import process."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[473],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>f});var i=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function l(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=i.createContext({}),c=function(e){var t=i.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,s=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=c(o),m=r,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return o?i.createElement(f,l(l({ref:t},p),{},{components:o})):i.createElement(f,l({ref:t},p))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,l=new Array(n);l[0]=m;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a[u]="string"==typeof e?e:r,l[1]=a;for(var c=2;c{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var i=o(7462),r=(o(7294),o(3905));const n={},l="Import Books",a={unversionedId:"guides/import-books",id:"guides/import-books",title:"Import Books",description:"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).",source:"@site/docs/guides/import-books.md",sourceDirName:"guides",slug:"/guides/import-books",permalink:"/docs/guides/import-books",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/import-books.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Full Text Search",permalink:"/docs/guides/search"},next:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"}},s={},c=[{value:"Scan for books",id:"scan-for-books",level:2},{value:"Select destination series",id:"select-destination-series",level:2},{value:"Check book details",id:"check-book-details",level:2},{value:"Finalize the import",id:"finalize-the-import",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,i.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"import-books"},"Import Books"),(0,r.kt)("p",null,"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the ",(0,r.kt)("em",{parentName:"p"},"Import > Books")," screen)."),(0,r.kt)("h2",{id:"scan-for-books"},"Scan for books"),(0,r.kt)("p",null,"Start by choosing a folder to scan for eligible books, and click ",(0,r.kt)("em",{parentName:"p"},"Scan"),"."),(0,r.kt)("img",{src:"/assets/media/guides/import-books/book-import-scan.png",style:{maxHeight:" 400px"},alt:"Scan for books"}),(0,r.kt)("p",null,"Komga will display a list of all files eligible for import."),(0,r.kt)("h2",{id:"select-destination-series"},"Select destination series"),(0,r.kt)("p",null,"You will need to pick a destination series for each. You can choose individually, or for all the selected files at once using the ",(0,r.kt)("em",{parentName:"p"},"Select Series")," button."),(0,r.kt)("img",{src:"/assets/media/guides/import-books/book-import-pick-series.png",style:{maxHeight:" 400px"},alt:"Select series"}),(0,r.kt)("h2",{id:"check-book-details"},"Check book details"),(0,r.kt)("p",null,"For each book, you can:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"display the book details: format, number of pages, and detailed page list"),(0,r.kt)("li",{parentName:"ul"},"browse the book pages"),(0,r.kt)("li",{parentName:"ul"},"change the destination file name")),(0,r.kt)("p",null,"If you choose a number for a book, and a book already exists with that number, Komga will offer you to upgrade it, effectively replacing the existing file. In case of upgrade, you can:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"display the details of both books side by side"),(0,r.kt)("li",{parentName:"ul"},"browse both books side by side")),(0,r.kt)("img",{src:"/assets/media/guides/import-books/book-import-buttons.png",style:{maxHeight:" 400px"},alt:"Book actions"}),(0,r.kt)("h2",{id:"finalize-the-import"},"Finalize the import"),(0,r.kt)("p",null,"Komga will import only the selected files (checkbox on the left)."),(0,r.kt)("p",null,"You can decide to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"move the files: files will be moved from their location, effectively deleting the original file."),(0,r.kt)("li",{parentName:"ul"},"copy/hardlink the files: Komga will try to hardlink the files to their destination (compatible file systems only), and if that doesn't work will copy the files to their destination, leaving the original file untouched.")),(0,r.kt)("p",null,"Cick ",(0,r.kt)("em",{parentName:"p"},"Import")," to start the import process."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4c25ac78.dbeef1d4.js b/assets/js/4c25ac78.e4b87ef1.js similarity index 98% rename from assets/js/4c25ac78.dbeef1d4.js rename to assets/js/4c25ac78.e4b87ef1.js index ed00c664..198f99bc 100644 --- a/assets/js/4c25ac78.dbeef1d4.js +++ b/assets/js/4c25ac78.e4b87ef1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[2727],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>p});var i=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=i.createContext({}),d=function(e){var t=i.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},m=function(e){var t=d(e.components);return i.createElement(o.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=d(a),h=r,p=u["".concat(o,".").concat(h)]||u[h]||c[h]||n;return a?i.createElement(p,l(l({ref:t},m),{},{components:a})):i.createElement(p,l({ref:t},m))}));function p(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,l=new Array(n);l[0]=h;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[u]="string"==typeof e?e:r,l[1]=s;for(var d=2;d{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=a(7462),r=(a(7294),a(3905));const n={},l="Edit Metadata",s={unversionedId:"guides/edit-metadata",id:"guides/edit-metadata",title:"Edit Metadata",description:"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.",source:"@site/docs/guides/edit-metadata.md",sourceDirName:"guides",slug:"/guides/edit-metadata",permalink:"/docs/guides/edit-metadata",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/edit-metadata.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"One-Shots",permalink:"/docs/guides/oneshots"},next:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"}},o={},d=[{value:"The Edit Screen",id:"the-edit-screen",level:2},{value:"Opening the Edit Screen",id:"opening-the-edit-screen",level:3},{value:"From the Item Card",id:"from-the-item-card",level:4},{value:"From the Item Details",id:"from-the-item-details",level:4},{value:"Edit Screen Details",id:"edit-screen-details",level:3},{value:"Edit Screen for Series",id:"edit-screen-for-series",level:4},{value:"General",id:"general",level:5},{value:"Tags",id:"tags",level:5},{value:"Edit Screen for Books",id:"edit-screen-for-books",level:4},{value:"General",id:"general-1",level:5},{value:"Authors",id:"authors",level:5},{value:"Tags",id:"tags-1",level:5},{value:"Using the Edit Screen",id:"using-the-edit-screen",level:2},{value:"Editing Standard Fields, Tags or Authors",id:"editing-standard-fields-tags-or-authors",level:3},{value:"Changing Fields",id:"changing-fields",level:3},{value:"Locking And Unlocking",id:"locking-and-unlocking",level:3},{value:"Sort Titles",id:"sort-titles",level:3},{value:"Sort Numbers",id:"sort-numbers",level:3}],m={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,i.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"edit-metadata"},"Edit Metadata"),(0,r.kt)("p",null,"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience."),(0,r.kt)("p",null,"You may wish to customize or change the information associated with a library item."),(0,r.kt)("h2",{id:"the-edit-screen"},"The Edit Screen"),(0,r.kt)("h3",{id:"opening-the-edit-screen"},"Opening the Edit Screen"),(0,r.kt)("p",null,"The edit screen for an item can be accessed in several ways, depending on where you are."),(0,r.kt)("h4",{id:"from-the-item-card"},"From the Item Card"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Hover over the item card"),(0,r.kt)("li",{parentName:"ol"},"Click the ",(0,r.kt)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," icon")),(0,r.kt)("h4",{id:"from-the-item-details"},"From the Item Details"),(0,r.kt)("p",null,"When viewing the details for a Library item, click the ",(0,r.kt)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," button in the top actionbar."),(0,r.kt)("h3",{id:"edit-screen-details"},"Edit Screen Details"),(0,r.kt)("p",null,"The Edit Screen allows you to access title, authors, summary, tags, and more. There are several areas of the Edit Screen that can be accessed from the tabs on the left side."),(0,r.kt)("h4",{id:"edit-screen-for-series"},"Edit Screen for Series"),(0,r.kt)("h5",{id:"general"},"General"),(0,r.kt)("p",null,"The General screen allows you to edit details such as the title, sort title, summary, and more."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),(0,r.kt)("h5",{id:"tags"},"Tags"),(0,r.kt)("p",null,"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-series-tags.png",style:{maxHeight:"300px"}}),(0,r.kt)("h4",{id:"edit-screen-for-books"},"Edit Screen for Books"),(0,r.kt)("h5",{id:"general-1"},"General"),(0,r.kt)("p",null,"The General screen allows you to edit details such as the title, number, summary, and more."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-book-general.png",style:{maxHeight:"300px"}}),(0,r.kt)("h5",{id:"authors"},"Authors"),(0,r.kt)("p",null,"The Authors page includes metadata such as writers, pencillers, inkers, and more. These are items that can have more than one value and are typically available for sorting or filtering."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-book-authors.png",style:{maxHeight:"300px"}}),(0,r.kt)("h5",{id:"tags-1"},"Tags"),(0,r.kt)("p",null,"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-book-tags.png",style:{maxHeight:"300px"}}),(0,r.kt)("h2",{id:"using-the-edit-screen"},"Using the Edit Screen"),(0,r.kt)("h3",{id:"editing-standard-fields-tags-or-authors"},"Editing Standard Fields, Tags or Authors"),(0,r.kt)("h3",{id:"changing-fields"},"Changing Fields"),(0,r.kt)("p",null,"To edit the details for a particular piece of metadata:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Choose the tab of category you want to change on the left, then click the detail field"),(0,r.kt)("li",{parentName:"ul"},"Type or paste the changes"),(0,r.kt)("li",{parentName:"ul"},"For items in the Tags or Authors area, simply start typing the name. If the name already exists in the database, it will appear for you and you can select it. Otherwise, simply type out the name like normal.")),(0,r.kt)("p",null,"To remove an item, click the ",(0,r.kt)("inlineCode",{parentName:"p"},"X")," next to the entry."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/author-chip.png",style:{maxHeight:"80px"}}),(0,r.kt)("h3",{id:"locking-and-unlocking"},"Locking And Unlocking"),(0,r.kt)("p",null,"If you\u2019ve made an edit to a field, it is automatically locked. A locked field will not be altered when an item is refreshed. To lock or unlock a field:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Edit the field and it will lock automatically"),(0,r.kt)("li",{parentName:"ul"},"Click the lock icon to either lock or unlock the field"),(0,r.kt)("li",{parentName:"ul"},"A field is locked when the lock icon is colored orange")),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/locked-field.png",style:{maxHeight:"80px"}}),(0,r.kt)("h3",{id:"sort-titles"},"Sort Titles"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Title")," field lets you control how items are sorted alphabetically. The ",(0,r.kt)("inlineCode",{parentName:"p"},"Title")," field is what will be displayed, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Title")," field is used for sorting."),(0,r.kt)("p",null,'For example, if you want to ignore the article ("The") for your series like "The Boys":'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Find the "The Boys" series and open the Edit Details screen'),(0,r.kt)("li",{parentName:"ul"},"Click in the ",(0,r.kt)("inlineCode",{parentName:"li"},"Sort Title"),' and type "Boys (The)" then ',(0,r.kt)("inlineCode",{parentName:"li"},"Save Changes"))),(0,r.kt)("p",null,'The result is that the series "The Boys" will appear together in the list under the letter B and sorted as entered in the ',(0,r.kt)("inlineCode",{parentName:"p"},"Sort Title")," field."),(0,r.kt)("h3",{id:"sort-numbers"},"Sort Numbers"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Number")," field lets you control how items are sorted within a series. The ",(0,r.kt)("inlineCode",{parentName:"p"},"Number")," field is what will be displayed, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Number")," field is used for sorting."),(0,r.kt)("p",null,'For example, if you have a "2015 Special" that is between book 24 and 25:'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"set the ",(0,r.kt)("inlineCode",{parentName:"li"},"Number"),' to "2015 Special"'),(0,r.kt)("li",{parentName:"ul"},"set the ",(0,r.kt)("inlineCode",{parentName:"li"},"Sort Number"),' to "24.5"')),(0,r.kt)("p",null,'The result is that the special book will appear between book 24 and 25, and will show "2015 Special" as its number.'))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[2727],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>p});var i=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=i.createContext({}),d=function(e){var t=i.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},m=function(e){var t=d(e.components);return i.createElement(o.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=d(a),h=r,p=u["".concat(o,".").concat(h)]||u[h]||c[h]||n;return a?i.createElement(p,l(l({ref:t},m),{},{components:a})):i.createElement(p,l({ref:t},m))}));function p(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,l=new Array(n);l[0]=h;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[u]="string"==typeof e?e:r,l[1]=s;for(var d=2;d{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=a(7462),r=(a(7294),a(3905));const n={},l="Edit Metadata",s={unversionedId:"guides/edit-metadata",id:"guides/edit-metadata",title:"Edit Metadata",description:"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.",source:"@site/docs/guides/edit-metadata.md",sourceDirName:"guides",slug:"/guides/edit-metadata",permalink:"/docs/guides/edit-metadata",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/edit-metadata.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"One-Shots",permalink:"/docs/guides/oneshots"},next:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"}},o={},d=[{value:"The Edit Screen",id:"the-edit-screen",level:2},{value:"Opening the Edit Screen",id:"opening-the-edit-screen",level:3},{value:"From the Item Card",id:"from-the-item-card",level:4},{value:"From the Item Details",id:"from-the-item-details",level:4},{value:"Edit Screen Details",id:"edit-screen-details",level:3},{value:"Edit Screen for Series",id:"edit-screen-for-series",level:4},{value:"General",id:"general",level:5},{value:"Tags",id:"tags",level:5},{value:"Edit Screen for Books",id:"edit-screen-for-books",level:4},{value:"General",id:"general-1",level:5},{value:"Authors",id:"authors",level:5},{value:"Tags",id:"tags-1",level:5},{value:"Using the Edit Screen",id:"using-the-edit-screen",level:2},{value:"Editing Standard Fields, Tags or Authors",id:"editing-standard-fields-tags-or-authors",level:3},{value:"Changing Fields",id:"changing-fields",level:3},{value:"Locking And Unlocking",id:"locking-and-unlocking",level:3},{value:"Sort Titles",id:"sort-titles",level:3},{value:"Sort Numbers",id:"sort-numbers",level:3}],m={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,i.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"edit-metadata"},"Edit Metadata"),(0,r.kt)("p",null,"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience."),(0,r.kt)("p",null,"You may wish to customize or change the information associated with a library item."),(0,r.kt)("h2",{id:"the-edit-screen"},"The Edit Screen"),(0,r.kt)("h3",{id:"opening-the-edit-screen"},"Opening the Edit Screen"),(0,r.kt)("p",null,"The edit screen for an item can be accessed in several ways, depending on where you are."),(0,r.kt)("h4",{id:"from-the-item-card"},"From the Item Card"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Hover over the item card"),(0,r.kt)("li",{parentName:"ol"},"Click the ",(0,r.kt)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," icon")),(0,r.kt)("h4",{id:"from-the-item-details"},"From the Item Details"),(0,r.kt)("p",null,"When viewing the details for a Library item, click the ",(0,r.kt)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," button in the top actionbar."),(0,r.kt)("h3",{id:"edit-screen-details"},"Edit Screen Details"),(0,r.kt)("p",null,"The Edit Screen allows you to access title, authors, summary, tags, and more. There are several areas of the Edit Screen that can be accessed from the tabs on the left side."),(0,r.kt)("h4",{id:"edit-screen-for-series"},"Edit Screen for Series"),(0,r.kt)("h5",{id:"general"},"General"),(0,r.kt)("p",null,"The General screen allows you to edit details such as the title, sort title, summary, and more."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),(0,r.kt)("h5",{id:"tags"},"Tags"),(0,r.kt)("p",null,"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-series-tags.png",style:{maxHeight:"300px"}}),(0,r.kt)("h4",{id:"edit-screen-for-books"},"Edit Screen for Books"),(0,r.kt)("h5",{id:"general-1"},"General"),(0,r.kt)("p",null,"The General screen allows you to edit details such as the title, number, summary, and more."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-book-general.png",style:{maxHeight:"300px"}}),(0,r.kt)("h5",{id:"authors"},"Authors"),(0,r.kt)("p",null,"The Authors page includes metadata such as writers, pencillers, inkers, and more. These are items that can have more than one value and are typically available for sorting or filtering."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-book-authors.png",style:{maxHeight:"300px"}}),(0,r.kt)("h5",{id:"tags-1"},"Tags"),(0,r.kt)("p",null,"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/edit-book-tags.png",style:{maxHeight:"300px"}}),(0,r.kt)("h2",{id:"using-the-edit-screen"},"Using the Edit Screen"),(0,r.kt)("h3",{id:"editing-standard-fields-tags-or-authors"},"Editing Standard Fields, Tags or Authors"),(0,r.kt)("h3",{id:"changing-fields"},"Changing Fields"),(0,r.kt)("p",null,"To edit the details for a particular piece of metadata:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Choose the tab of category you want to change on the left, then click the detail field"),(0,r.kt)("li",{parentName:"ul"},"Type or paste the changes"),(0,r.kt)("li",{parentName:"ul"},"For items in the Tags or Authors area, simply start typing the name. If the name already exists in the database, it will appear for you and you can select it. Otherwise, simply type out the name like normal.")),(0,r.kt)("p",null,"To remove an item, click the ",(0,r.kt)("inlineCode",{parentName:"p"},"X")," next to the entry."),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/author-chip.png",style:{maxHeight:"80px"}}),(0,r.kt)("h3",{id:"locking-and-unlocking"},"Locking And Unlocking"),(0,r.kt)("p",null,"If you\u2019ve made an edit to a field, it is automatically locked. A locked field will not be altered when an item is refreshed. To lock or unlock a field:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Edit the field and it will lock automatically"),(0,r.kt)("li",{parentName:"ul"},"Click the lock icon to either lock or unlock the field"),(0,r.kt)("li",{parentName:"ul"},"A field is locked when the lock icon is colored orange")),(0,r.kt)("img",{src:"/assets/media/guides/edit-metadata/locked-field.png",style:{maxHeight:"80px"}}),(0,r.kt)("h3",{id:"sort-titles"},"Sort Titles"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Title")," field lets you control how items are sorted alphabetically. The ",(0,r.kt)("inlineCode",{parentName:"p"},"Title")," field is what will be displayed, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Title")," field is used for sorting."),(0,r.kt)("p",null,'For example, if you want to ignore the article ("The") for your series like "The Boys":'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Find the "The Boys" series and open the Edit Details screen'),(0,r.kt)("li",{parentName:"ul"},"Click in the ",(0,r.kt)("inlineCode",{parentName:"li"},"Sort Title"),' and type "Boys (The)" then ',(0,r.kt)("inlineCode",{parentName:"li"},"Save Changes"))),(0,r.kt)("p",null,'The result is that the series "The Boys" will appear together in the list under the letter B and sorted as entered in the ',(0,r.kt)("inlineCode",{parentName:"p"},"Sort Title")," field."),(0,r.kt)("h3",{id:"sort-numbers"},"Sort Numbers"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Number")," field lets you control how items are sorted within a series. The ",(0,r.kt)("inlineCode",{parentName:"p"},"Number")," field is what will be displayed, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"Sort Number")," field is used for sorting."),(0,r.kt)("p",null,'For example, if you have a "2015 Special" that is between book 24 and 25:'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"set the ",(0,r.kt)("inlineCode",{parentName:"li"},"Number"),' to "2015 Special"'),(0,r.kt)("li",{parentName:"ul"},"set the ",(0,r.kt)("inlineCode",{parentName:"li"},"Sort Number"),' to "24.5"')),(0,r.kt)("p",null,'The result is that the special book will appear between book 24 and 25, and will show "2015 Special" as its number.'))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4cc4731f.34d0eb1f.js b/assets/js/4cc4731f.6334e60d.js similarity index 99% rename from assets/js/4cc4731f.34d0eb1f.js rename to assets/js/4cc4731f.6334e60d.js index 4816ec69..6f8e63fb 100644 --- a/assets/js/4cc4731f.34d0eb1f.js +++ b/assets/js/4cc4731f.6334e60d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[1169],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>h});var n=a(7294);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function r(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var s=n.createContext({}),p=function(t){var e=n.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},u=function(t){var e=p(t.components);return n.createElement(s.Provider,{value:e},t.children)},d="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,o=t.originalType,s=t.parentName,u=i(t,["components","mdxType","originalType","parentName"]),d=p(a),m=l,h=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return a?n.createElement(h,r(r({ref:e},u),{},{components:a})):n.createElement(h,r({ref:e},u))}));function h(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var o=a.length,r=new Array(o);r[0]=m;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=t,i[d]="string"==typeof t?t:l,r[1]=i;for(var p=2;p{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(7462),l=(a(7294),a(3905));const o={},r="Install via third-party integrations",i={unversionedId:"installation/thirdparty",id:"installation/thirdparty",title:"Install via third-party integrations",description:"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.",source:"@site/docs/installation/thirdparty.md",sourceDirName:"installation",slug:"/installation/thirdparty",permalink:"/docs/installation/thirdparty",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/thirdparty.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Run with the Jar file",permalink:"/docs/installation/jar"},next:{title:"Configuration options",permalink:"/docs/installation/configuration"}},s={},p=[{value:"Windows Installer and Updater",id:"windows-installer-and-updater",level:2},{value:"Scoop (Windows)",id:"scoop-windows",level:2},{value:"Installation",id:"installation",level:3},{value:"1. (Skip if JDK is installed) Install JDK",id:"1-skip-if-jdk-is-installed-install-jdk",level:4},{value:"2. Install Komga",id:"2-install-komga",level:4},{value:"Manage",id:"manage",level:3},{value:"Run",id:"run",level:4},{value:"Update",id:"update",level:4},{value:"Uninstall",id:"uninstall",level:4},{value:"AUR - Arch User Repository",id:"aur---arch-user-repository",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Run",id:"run-1",level:3},{value:"QNAP",id:"qnap",level:2},{value:"FreeNAS",id:"freenas",level:2},{value:"YunoHost",id:"yunohost",level:2},{value:"TrueNAS SCALE",id:"truenas-scale",level:2}],u={toc:p},d="wrapper";function c(t){let{components:e,...a}=t;return(0,l.kt)(d,(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"install-via-third-party-integrations"},"Install via third-party integrations"),(0,l.kt)("admonition",{title:"Warning",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.")),(0,l.kt)("h2",{id:"windows-installer-and-updater"},"Windows Installer and Updater"),(0,l.kt)("p",null,"A ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/losslesspng/SetUpKomgaJava"},"Powershell script")," to get up and running with Komga."),(0,l.kt)("h2",{id:"scoop-windows"},"Scoop (Windows)"),(0,l.kt)("p",null,"Komga is available in ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/ScoopInstaller/Scoop"},"Scoop"),"'s ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/ScoopInstaller/Extras"},"extras")," bucket."),(0,l.kt)("h3",{id:"installation"},"Installation"),(0,l.kt)("p",null,"You need Scoop to use this installation method. Instruction to install Scoop can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/ScoopInstaller/Scoop#installation"},"here"),"."),(0,l.kt)("h4",{id:"1-skip-if-jdk-is-installed-install-jdk"},"1. (Skip if JDK is installed) Install JDK"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop bucket add java")," and then run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop install java/temurin-lts-jdk"),"."),(0,l.kt)("h4",{id:"2-install-komga"},"2. Install Komga"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop bucket add extras")," and then run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop install komga"),"."),(0,l.kt)("h3",{id:"manage"},"Manage"),(0,l.kt)("h4",{id:"run"},"Run"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"komga"),"."),(0,l.kt)("p",null,"Note: Default config dir is ",(0,l.kt)("inlineCode",{parentName:"p"},"%USERPROFILE%\\scoop\\apps\\komga\\current\\config")),(0,l.kt)("h4",{id:"update"},"Update"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop update komga"),"."),(0,l.kt)("h4",{id:"uninstall"},"Uninstall"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop uninstall komga")),(0,l.kt)("h2",{id:"aur---arch-user-repository"},"AUR - Arch User Repository"),(0,l.kt)("p",null,"Komga is available as an ",(0,l.kt)("a",{parentName:"p",href:"https://aur.archlinux.org/packages/komga/"},"AUR")," package."),(0,l.kt)("h3",{id:"installation-1"},"Installation"),(0,l.kt)("p",null,"It can be installed using ",(0,l.kt)("inlineCode",{parentName:"p"},"yay -S komga")," (or any other AUR package manager)."),(0,l.kt)("h3",{id:"run-1"},"Run"),(0,l.kt)("p",null,"Just run ",(0,l.kt)("inlineCode",{parentName:"p"},"komga"),"."),(0,l.kt)("h2",{id:"qnap"},"QNAP"),(0,l.kt)("p",null,"Komga is available as a ",(0,l.kt)("a",{parentName:"p",href:"https://www.qnapclub.eu/en/qpkg/853"},"QPKG"),"."),(0,l.kt)("h2",{id:"freenas"},"FreeNAS"),(0,l.kt)("p",null,"There is a ",(0,l.kt)("a",{parentName:"p",href:"https://blog.tommyku.com/blog/deploying-komga-on-freenas-jail/"},"tutorial")," to install Komga on FreeNAS jail."),(0,l.kt)("h2",{id:"yunohost"},"YunoHost"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://install-app.yunohost.org/?app=komga"},(0,l.kt)("img",{parentName:"a",src:"https://install-app.yunohost.org/install-with-yunohost.svg",alt:"Install Komga with YunoHost"}))),(0,l.kt)("h2",{id:"truenas-scale"},"TrueNAS SCALE"),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"SCALE is still in beta")),(0,l.kt)("p",null,"There is a ",(0,l.kt)("a",{parentName:"p",href:"https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/"},"tutorial")," to install Truecharts on TrueNAS SCALE. Follow steps 1-4 to add TrueCharts to SCALE.\nIn order to create komga you need to find it under the TrueCharts apps in SCALE.\nScale needs access to ip range of: 172.16.0.0/16 in order to deploy.\nKeep all defaults and change: "),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Enter a name with lowercase letters."),(0,l.kt)("li",{parentName:"ol"},'Change the update type to "Rolling Update:Create new pods and then kill old ones"'),(0,l.kt)("li",{parentName:"ol"},"Next"),(0,l.kt)("li",{parentName:"ol"},"You can change the node port to whatever you prefer, this is the port you will be accessing komga over. "),(0,l.kt)("li",{parentName:"ol"},"This is the Komga Data source, add what you need. "),(0,l.kt)("li",{parentName:"ol"},"Next"),(0,l.kt)("li",{parentName:"ol"},"Next"),(0,l.kt)("li",{parentName:"ol"},"Choose the container resources (I chose default), Next."),(0,l.kt)("li",{parentName:"ol"},"I left this at disabled, Next."),(0,l.kt)("li",{parentName:"ol"},"Install Komga and let it run.\nOnce its installed click portal and you now have komga setup in SCALE.")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[1169],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>h});var n=a(7294);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function r(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var s=n.createContext({}),p=function(t){var e=n.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},u=function(t){var e=p(t.components);return n.createElement(s.Provider,{value:e},t.children)},d="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,o=t.originalType,s=t.parentName,u=i(t,["components","mdxType","originalType","parentName"]),d=p(a),m=l,h=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return a?n.createElement(h,r(r({ref:e},u),{},{components:a})):n.createElement(h,r({ref:e},u))}));function h(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var o=a.length,r=new Array(o);r[0]=m;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=t,i[d]="string"==typeof t?t:l,r[1]=i;for(var p=2;p{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(7462),l=(a(7294),a(3905));const o={},r="Install via third-party integrations",i={unversionedId:"installation/thirdparty",id:"installation/thirdparty",title:"Install via third-party integrations",description:"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.",source:"@site/docs/installation/thirdparty.md",sourceDirName:"installation",slug:"/installation/thirdparty",permalink:"/docs/installation/thirdparty",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/thirdparty.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Run with the Jar file",permalink:"/docs/installation/jar"},next:{title:"Configuration options",permalink:"/docs/installation/configuration"}},s={},p=[{value:"Windows Installer and Updater",id:"windows-installer-and-updater",level:2},{value:"Scoop (Windows)",id:"scoop-windows",level:2},{value:"Installation",id:"installation",level:3},{value:"1. (Skip if JDK is installed) Install JDK",id:"1-skip-if-jdk-is-installed-install-jdk",level:4},{value:"2. Install Komga",id:"2-install-komga",level:4},{value:"Manage",id:"manage",level:3},{value:"Run",id:"run",level:4},{value:"Update",id:"update",level:4},{value:"Uninstall",id:"uninstall",level:4},{value:"AUR - Arch User Repository",id:"aur---arch-user-repository",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Run",id:"run-1",level:3},{value:"QNAP",id:"qnap",level:2},{value:"FreeNAS",id:"freenas",level:2},{value:"YunoHost",id:"yunohost",level:2},{value:"TrueNAS SCALE",id:"truenas-scale",level:2}],u={toc:p},d="wrapper";function c(t){let{components:e,...a}=t;return(0,l.kt)(d,(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"install-via-third-party-integrations"},"Install via third-party integrations"),(0,l.kt)("admonition",{title:"Warning",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.")),(0,l.kt)("h2",{id:"windows-installer-and-updater"},"Windows Installer and Updater"),(0,l.kt)("p",null,"A ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/losslesspng/SetUpKomgaJava"},"Powershell script")," to get up and running with Komga."),(0,l.kt)("h2",{id:"scoop-windows"},"Scoop (Windows)"),(0,l.kt)("p",null,"Komga is available in ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/ScoopInstaller/Scoop"},"Scoop"),"'s ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/ScoopInstaller/Extras"},"extras")," bucket."),(0,l.kt)("h3",{id:"installation"},"Installation"),(0,l.kt)("p",null,"You need Scoop to use this installation method. Instruction to install Scoop can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/ScoopInstaller/Scoop#installation"},"here"),"."),(0,l.kt)("h4",{id:"1-skip-if-jdk-is-installed-install-jdk"},"1. (Skip if JDK is installed) Install JDK"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop bucket add java")," and then run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop install java/temurin-lts-jdk"),"."),(0,l.kt)("h4",{id:"2-install-komga"},"2. Install Komga"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop bucket add extras")," and then run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop install komga"),"."),(0,l.kt)("h3",{id:"manage"},"Manage"),(0,l.kt)("h4",{id:"run"},"Run"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"komga"),"."),(0,l.kt)("p",null,"Note: Default config dir is ",(0,l.kt)("inlineCode",{parentName:"p"},"%USERPROFILE%\\scoop\\apps\\komga\\current\\config")),(0,l.kt)("h4",{id:"update"},"Update"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop update komga"),"."),(0,l.kt)("h4",{id:"uninstall"},"Uninstall"),(0,l.kt)("p",null,"Run ",(0,l.kt)("inlineCode",{parentName:"p"},"scoop uninstall komga")),(0,l.kt)("h2",{id:"aur---arch-user-repository"},"AUR - Arch User Repository"),(0,l.kt)("p",null,"Komga is available as an ",(0,l.kt)("a",{parentName:"p",href:"https://aur.archlinux.org/packages/komga/"},"AUR")," package."),(0,l.kt)("h3",{id:"installation-1"},"Installation"),(0,l.kt)("p",null,"It can be installed using ",(0,l.kt)("inlineCode",{parentName:"p"},"yay -S komga")," (or any other AUR package manager)."),(0,l.kt)("h3",{id:"run-1"},"Run"),(0,l.kt)("p",null,"Just run ",(0,l.kt)("inlineCode",{parentName:"p"},"komga"),"."),(0,l.kt)("h2",{id:"qnap"},"QNAP"),(0,l.kt)("p",null,"Komga is available as a ",(0,l.kt)("a",{parentName:"p",href:"https://www.qnapclub.eu/en/qpkg/853"},"QPKG"),"."),(0,l.kt)("h2",{id:"freenas"},"FreeNAS"),(0,l.kt)("p",null,"There is a ",(0,l.kt)("a",{parentName:"p",href:"https://blog.tommyku.com/blog/deploying-komga-on-freenas-jail/"},"tutorial")," to install Komga on FreeNAS jail."),(0,l.kt)("h2",{id:"yunohost"},"YunoHost"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://install-app.yunohost.org/?app=komga"},(0,l.kt)("img",{parentName:"a",src:"https://install-app.yunohost.org/install-with-yunohost.svg",alt:"Install Komga with YunoHost"}))),(0,l.kt)("h2",{id:"truenas-scale"},"TrueNAS SCALE"),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"SCALE is still in beta")),(0,l.kt)("p",null,"There is a ",(0,l.kt)("a",{parentName:"p",href:"https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/"},"tutorial")," to install Truecharts on TrueNAS SCALE. Follow steps 1-4 to add TrueCharts to SCALE.\nIn order to create komga you need to find it under the TrueCharts apps in SCALE.\nScale needs access to ip range of: 172.16.0.0/16 in order to deploy.\nKeep all defaults and change: "),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Enter a name with lowercase letters."),(0,l.kt)("li",{parentName:"ol"},'Change the update type to "Rolling Update:Create new pods and then kill old ones"'),(0,l.kt)("li",{parentName:"ol"},"Next"),(0,l.kt)("li",{parentName:"ol"},"You can change the node port to whatever you prefer, this is the port you will be accessing komga over. "),(0,l.kt)("li",{parentName:"ol"},"This is the Komga Data source, add what you need. "),(0,l.kt)("li",{parentName:"ol"},"Next"),(0,l.kt)("li",{parentName:"ol"},"Next"),(0,l.kt)("li",{parentName:"ol"},"Choose the container resources (I chose default), Next."),(0,l.kt)("li",{parentName:"ol"},"I left this at disabled, Next."),(0,l.kt)("li",{parentName:"ol"},"Install Komga and let it run.\nOnce its installed click portal and you now have komga setup in SCALE.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/55519d27.723d3ba6.js b/assets/js/55519d27.0c6c2589.js similarity index 99% rename from assets/js/55519d27.723d3ba6.js rename to assets/js/55519d27.0c6c2589.js index e0c8023b..78f386b4 100644 --- a/assets/js/55519d27.723d3ba6.js +++ b/assets/js/55519d27.0c6c2589.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4114],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var i=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=i.createContext({}),c=function(e){var t=i.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},d=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=r,h=p["".concat(s,".").concat(m)]||p[m]||u[m]||n;return a?i.createElement(h,o(o({ref:t},d),{},{components:a})):i.createElement(h,o({ref:t},d))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,o=new Array(n);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var i=a(7462),r=(a(7294),a(3905));const n={},o="Libraries",l={unversionedId:"guides/libraries",id:"guides/libraries",title:"Libraries",description:"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.",source:"@site/docs/guides/libraries.md",sourceDirName:"guides",slug:"/guides/libraries",permalink:"/docs/guides/libraries",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/libraries.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Desktop Application",permalink:"/docs/guides/desktop"},next:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"}},s={},c=[{value:"Creating libraries",id:"creating-libraries",level:2},{value:"Scanner",id:"scanner",level:3},{value:"Empty trash automatically after every scan",id:"empty-trash-automatically-after-every-scan",level:4},{value:"Force directory modified time",id:"force-directory-modified-time",level:4},{value:"Scan on startup",id:"scan-on-startup",level:4},{value:"Scan interval",id:"scan-interval",level:4},{value:"One-Shots directory",id:"one-shots-directory",level:4},{value:"Scan for these file types",id:"scan-for-these-file-types",level:4},{value:"Directory exclusions",id:"directory-exclusions",level:4},{value:"Options",id:"options",level:3},{value:"Analysis",id:"analysis",level:4},{value:"Compute hash for files",id:"compute-hash-for-files",level:5},{value:"Compute hash for pages",id:"compute-hash-for-pages",level:5},{value:"Analyze page dimensions",id:"analyze-page-dimensions",level:5},{value:"File management",id:"file-management",level:4},{value:"Automatically repair incorrect file extensions",id:"automatically-repair-incorrect-file-extensions",level:5},{value:"Automatically convert to CBZ",id:"automatically-convert-to-cbz",level:5},{value:"Series cover",id:"series-cover",level:4},{value:"Metadata",id:"metadata",level:3},{value:"Edit a library",id:"edit-a-library",level:2},{value:"Delete a library",id:"delete-a-library",level:2}],d={toc:c},p="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,i.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"libraries"},"Libraries"),(0,r.kt)("p",null,"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users."),(0,r.kt)("p",null,"Each library has a root folder, and no library can share any part of their path."),(0,r.kt)("p",null,"For example if you have a library with a root path of ",(0,r.kt)("inlineCode",{parentName:"p"},"/books/mangas"),", you can't create a library with a root path of ",(0,r.kt)("inlineCode",{parentName:"p"},"/books"),", because the two root paths would overlap. You can however create a library with a root path of ",(0,r.kt)("inlineCode",{parentName:"p"},"/books/comics"),"."),(0,r.kt)("h2",{id:"creating-libraries"},"Creating libraries"),(0,r.kt)("p",null,"From the web interface:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"click on the ",(0,r.kt)("em",{parentName:"li"},"+")," icon next to ",(0,r.kt)("em",{parentName:"li"},"Libraries")," in the sidebar ",(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add.png",style:{verticalAlign:"middle",maxHeight:"32px"}})),(0,r.kt)("li",{parentName:"ul"},"choose a ",(0,r.kt)("em",{parentName:"li"},"Name")," for your library"),(0,r.kt)("li",{parentName:"ul"},"click the ",(0,r.kt)("em",{parentName:"li"},"Browse")," button and select a root folder containing your books"),(0,r.kt)("li",{parentName:"ul"},"click ",(0,r.kt)("em",{parentName:"li"},"Add"))),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-dialog.png",style:{maxHeight:"300px"},alt:"Add Library Dialog"}),(0,r.kt)("p",null,"You can also specify extra options."),(0,r.kt)("h3",{id:"scanner"},"Scanner"),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-scanner.png",style:{maxHeight:"400px"},alt:"Add Library Dialog Scanner"}),(0,r.kt)("h4",{id:"empty-trash-automatically-after-every-scan"},"Empty trash automatically after every scan"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/trash#automatically-empty-trash"},"Emptying library trash"),"."),(0,r.kt)("h4",{id:"force-directory-modified-time"},"Force directory modified time"),(0,r.kt)("p",null,"This will force the last modified time of a directory as the maximum from its own last modified time and the last modified time from all the books inside the directory. This should be used only if your filesystem does not update the last modified time of a directory when files inside it are modified (Google Drive for instance)."),(0,r.kt)("h4",{id:"scan-on-startup"},"Scan on startup"),(0,r.kt)("p",null,"If enabled, the library will be scanner when Komga starts."),(0,r.kt)("h4",{id:"scan-interval"},"Scan interval"),(0,r.kt)("p",null,"Choose to scan all of your libraries on a time-based interval. Choose the interval to use from the dropdown. Available frequencies:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"disabled"),(0,r.kt)("li",{parentName:"ul"},"hourly"),(0,r.kt)("li",{parentName:"ul"},"every 6 hours"),(0,r.kt)("li",{parentName:"ul"},"every 12 hours"),(0,r.kt)("li",{parentName:"ul"},"daily"),(0,r.kt)("li",{parentName:"ul"},"weekly")),(0,r.kt)("p",null,"The scan interval is based on when Komga started, or when you changed that setting for the library. For instance, if you have it set to \u201cevery 6 hours\u201d and you start your server at 12:35, then a scan will be started around 18:35."),(0,r.kt)("h4",{id:"one-shots-directory"},"One-Shots directory"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/oneshots"},"One-Shots"),"."),(0,r.kt)("h4",{id:"scan-for-these-file-types"},"Scan for these file types"),(0,r.kt)("p",null,"This will configure the scanner to only look for files with specific file extensions. Available types:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Comic Book archives: ",(0,r.kt)("inlineCode",{parentName:"li"},"cbz"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"zip"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"cbr"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"rar")),(0,r.kt)("li",{parentName:"ul"},"PDF: ",(0,r.kt)("inlineCode",{parentName:"li"},"pdf")),(0,r.kt)("li",{parentName:"ul"},"Epub: ",(0,r.kt)("inlineCode",{parentName:"li"},"epub"))),(0,r.kt)("h4",{id:"directory-exclusions"},"Directory exclusions"),(0,r.kt)("p",null,"You can specify any pattern to exclude directory subtrees from the scan."),(0,r.kt)("p",null,"Any directory for which the full path contains any of the configured patterns will be ignored during the scan."),(0,r.kt)("p",null,"Patterns are checked against ",(0,r.kt)("strong",{parentName:"p"},"any part of the directory path"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"#recycle")," will match on:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/#recycle")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/My weirdly named #recycle comic"))))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To match only directories starting with the provided string, prefix the pattern with ",(0,r.kt)("inlineCode",{parentName:"p"},"/"),", like ",(0,r.kt)("inlineCode",{parentName:"p"},"/#recycle"))),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-options.png",style:{maxHeight:"500px"},alt:"Add Library Dialog Options"}),(0,r.kt)("h4",{id:"analysis"},"Analysis"),(0,r.kt)("h5",{id:"compute-hash-for-files"},"Compute hash for files"),(0,r.kt)("p",null,'Komga will compute a filehash for your files. This is required for the "restore from trash bin" functionality to work, and to detect duplicate files.'),(0,r.kt)("p",null,"This can consume lots of resources on large libraries or slow hardware."),(0,r.kt)("h5",{id:"compute-hash-for-pages"},"Compute hash for pages"),(0,r.kt)("p",null,"Komga will compute a filehash for the first and last 3 pages in each book (",(0,r.kt)("inlineCode",{parentName:"p"},"cbz")," only). Those are used to detect duplicate pages."),(0,r.kt)("p",null,"This can consume lots of resources on large libraries or slow hardware."),(0,r.kt)("h5",{id:"analyze-page-dimensions"},"Analyze page dimensions"),(0,r.kt)("p",null,"Komga will retrieve each page's dimensions (width and height). This is useful for:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"properly displaying landscape pages in the web reader, when using double pages"),(0,r.kt)("li",{parentName:"ul"},'comparing page dimensions in the "Import" dialog')),(0,r.kt)("p",null,"This can consume lots of resources on large libraries or slow hardware."),(0,r.kt)("h4",{id:"file-management"},"File management"),(0,r.kt)("h5",{id:"automatically-repair-incorrect-file-extensions"},"Automatically repair incorrect file extensions"),(0,r.kt)("p",null,"Files with an incorrect extension will be automatically renamed in the background. For example a ",(0,r.kt)("inlineCode",{parentName:"p"},"zip")," file with a ",(0,r.kt)("inlineCode",{parentName:"p"},".cbr")," extension will be renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},".cbz"),"."),(0,r.kt)("h5",{id:"automatically-convert-to-cbz"},"Automatically convert to CBZ"),(0,r.kt)("p",null,"Books in ",(0,r.kt)("inlineCode",{parentName:"p"},"rar"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"cbr")," format (RAR4 only) will be converted to ",(0,r.kt)("inlineCode",{parentName:"p"},"cbz")," automatically in the background. The ",(0,r.kt)("inlineCode",{parentName:"p"},"zip")," files are created with the ",(0,r.kt)("inlineCode",{parentName:"p"},"DEFLATE")," method without compression."),(0,r.kt)("h4",{id:"series-cover"},"Series cover"),(0,r.kt)("p",null,"Choose which book cover is used for the series."),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-metadata.png",style:{maxHeight:"600px"},alt:"Add Library Dialog Metadata"}),(0,r.kt)("p",null,"Check the ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/scan-analysis-refresh#refresh-metadata"},"Refresh Metadata")," section to know more about what they do."),(0,r.kt)("h2",{id:"edit-a-library"},"Edit a library"),(0,r.kt)("p",null,"To edit a library, look for the action menu icon ",(0,r.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,r.kt)("em",{parentName:"p"},"Edit"),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"If you change the root folder of a library, and ",(0,r.kt)("strong",{parentName:"p"},"the new path doesn't share anything with the previous path"),", you will lose all your series, books and read progress for that library."),(0,r.kt)("p",{parentName:"admonition"},"If you change the path ",(0,r.kt)("strong",{parentName:"p"},"for a parent directory of the current path"),", you will not lose your content."),(0,r.kt)("p",{parentName:"admonition"},"If you change the path ",(0,r.kt)("strong",{parentName:"p"},"for a child directory of the current path"),", you will lose part of your content.")),(0,r.kt)("h2",{id:"delete-a-library"},"Delete a library"),(0,r.kt)("p",null,"To delete a library, look for the action menu icon ",(0,r.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,r.kt)("em",{parentName:"p"},"Delete"),"."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Deleting a library will remove all series and books contained in this library. Read progress for all those books will be deleted."),(0,r.kt)("p",{parentName:"admonition"},"Your media files will not be affected."),(0,r.kt)("p",{parentName:"admonition"},"This cannot be undone.")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4114],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var i=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=i.createContext({}),c=function(e){var t=i.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},d=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=r,h=p["".concat(s,".").concat(m)]||p[m]||u[m]||n;return a?i.createElement(h,o(o({ref:t},d),{},{components:a})):i.createElement(h,o({ref:t},d))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,o=new Array(n);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var i=a(7462),r=(a(7294),a(3905));const n={},o="Libraries",l={unversionedId:"guides/libraries",id:"guides/libraries",title:"Libraries",description:"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.",source:"@site/docs/guides/libraries.md",sourceDirName:"guides",slug:"/guides/libraries",permalink:"/docs/guides/libraries",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/libraries.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Desktop Application",permalink:"/docs/guides/desktop"},next:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"}},s={},c=[{value:"Creating libraries",id:"creating-libraries",level:2},{value:"Scanner",id:"scanner",level:3},{value:"Empty trash automatically after every scan",id:"empty-trash-automatically-after-every-scan",level:4},{value:"Force directory modified time",id:"force-directory-modified-time",level:4},{value:"Scan on startup",id:"scan-on-startup",level:4},{value:"Scan interval",id:"scan-interval",level:4},{value:"One-Shots directory",id:"one-shots-directory",level:4},{value:"Scan for these file types",id:"scan-for-these-file-types",level:4},{value:"Directory exclusions",id:"directory-exclusions",level:4},{value:"Options",id:"options",level:3},{value:"Analysis",id:"analysis",level:4},{value:"Compute hash for files",id:"compute-hash-for-files",level:5},{value:"Compute hash for pages",id:"compute-hash-for-pages",level:5},{value:"Analyze page dimensions",id:"analyze-page-dimensions",level:5},{value:"File management",id:"file-management",level:4},{value:"Automatically repair incorrect file extensions",id:"automatically-repair-incorrect-file-extensions",level:5},{value:"Automatically convert to CBZ",id:"automatically-convert-to-cbz",level:5},{value:"Series cover",id:"series-cover",level:4},{value:"Metadata",id:"metadata",level:3},{value:"Edit a library",id:"edit-a-library",level:2},{value:"Delete a library",id:"delete-a-library",level:2}],d={toc:c},p="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,i.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"libraries"},"Libraries"),(0,r.kt)("p",null,"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users."),(0,r.kt)("p",null,"Each library has a root folder, and no library can share any part of their path."),(0,r.kt)("p",null,"For example if you have a library with a root path of ",(0,r.kt)("inlineCode",{parentName:"p"},"/books/mangas"),", you can't create a library with a root path of ",(0,r.kt)("inlineCode",{parentName:"p"},"/books"),", because the two root paths would overlap. You can however create a library with a root path of ",(0,r.kt)("inlineCode",{parentName:"p"},"/books/comics"),"."),(0,r.kt)("h2",{id:"creating-libraries"},"Creating libraries"),(0,r.kt)("p",null,"From the web interface:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"click on the ",(0,r.kt)("em",{parentName:"li"},"+")," icon next to ",(0,r.kt)("em",{parentName:"li"},"Libraries")," in the sidebar ",(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add.png",style:{verticalAlign:"middle",maxHeight:"32px"}})),(0,r.kt)("li",{parentName:"ul"},"choose a ",(0,r.kt)("em",{parentName:"li"},"Name")," for your library"),(0,r.kt)("li",{parentName:"ul"},"click the ",(0,r.kt)("em",{parentName:"li"},"Browse")," button and select a root folder containing your books"),(0,r.kt)("li",{parentName:"ul"},"click ",(0,r.kt)("em",{parentName:"li"},"Add"))),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-dialog.png",style:{maxHeight:"300px"},alt:"Add Library Dialog"}),(0,r.kt)("p",null,"You can also specify extra options."),(0,r.kt)("h3",{id:"scanner"},"Scanner"),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-scanner.png",style:{maxHeight:"400px"},alt:"Add Library Dialog Scanner"}),(0,r.kt)("h4",{id:"empty-trash-automatically-after-every-scan"},"Empty trash automatically after every scan"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/trash#automatically-empty-trash"},"Emptying library trash"),"."),(0,r.kt)("h4",{id:"force-directory-modified-time"},"Force directory modified time"),(0,r.kt)("p",null,"This will force the last modified time of a directory as the maximum from its own last modified time and the last modified time from all the books inside the directory. This should be used only if your filesystem does not update the last modified time of a directory when files inside it are modified (Google Drive for instance)."),(0,r.kt)("h4",{id:"scan-on-startup"},"Scan on startup"),(0,r.kt)("p",null,"If enabled, the library will be scanner when Komga starts."),(0,r.kt)("h4",{id:"scan-interval"},"Scan interval"),(0,r.kt)("p",null,"Choose to scan all of your libraries on a time-based interval. Choose the interval to use from the dropdown. Available frequencies:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"disabled"),(0,r.kt)("li",{parentName:"ul"},"hourly"),(0,r.kt)("li",{parentName:"ul"},"every 6 hours"),(0,r.kt)("li",{parentName:"ul"},"every 12 hours"),(0,r.kt)("li",{parentName:"ul"},"daily"),(0,r.kt)("li",{parentName:"ul"},"weekly")),(0,r.kt)("p",null,"The scan interval is based on when Komga started, or when you changed that setting for the library. For instance, if you have it set to \u201cevery 6 hours\u201d and you start your server at 12:35, then a scan will be started around 18:35."),(0,r.kt)("h4",{id:"one-shots-directory"},"One-Shots directory"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/oneshots"},"One-Shots"),"."),(0,r.kt)("h4",{id:"scan-for-these-file-types"},"Scan for these file types"),(0,r.kt)("p",null,"This will configure the scanner to only look for files with specific file extensions. Available types:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Comic Book archives: ",(0,r.kt)("inlineCode",{parentName:"li"},"cbz"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"zip"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"cbr"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"rar")),(0,r.kt)("li",{parentName:"ul"},"PDF: ",(0,r.kt)("inlineCode",{parentName:"li"},"pdf")),(0,r.kt)("li",{parentName:"ul"},"Epub: ",(0,r.kt)("inlineCode",{parentName:"li"},"epub"))),(0,r.kt)("h4",{id:"directory-exclusions"},"Directory exclusions"),(0,r.kt)("p",null,"You can specify any pattern to exclude directory subtrees from the scan."),(0,r.kt)("p",null,"Any directory for which the full path contains any of the configured patterns will be ignored during the scan."),(0,r.kt)("p",null,"Patterns are checked against ",(0,r.kt)("strong",{parentName:"p"},"any part of the directory path"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"#recycle")," will match on:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/#recycle")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/data/books/Comics/My weirdly named #recycle comic"))))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To match only directories starting with the provided string, prefix the pattern with ",(0,r.kt)("inlineCode",{parentName:"p"},"/"),", like ",(0,r.kt)("inlineCode",{parentName:"p"},"/#recycle"))),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-options.png",style:{maxHeight:"500px"},alt:"Add Library Dialog Options"}),(0,r.kt)("h4",{id:"analysis"},"Analysis"),(0,r.kt)("h5",{id:"compute-hash-for-files"},"Compute hash for files"),(0,r.kt)("p",null,'Komga will compute a filehash for your files. This is required for the "restore from trash bin" functionality to work, and to detect duplicate files.'),(0,r.kt)("p",null,"This can consume lots of resources on large libraries or slow hardware."),(0,r.kt)("h5",{id:"compute-hash-for-pages"},"Compute hash for pages"),(0,r.kt)("p",null,"Komga will compute a filehash for the first and last 3 pages in each book (",(0,r.kt)("inlineCode",{parentName:"p"},"cbz")," only). Those are used to detect duplicate pages."),(0,r.kt)("p",null,"This can consume lots of resources on large libraries or slow hardware."),(0,r.kt)("h5",{id:"analyze-page-dimensions"},"Analyze page dimensions"),(0,r.kt)("p",null,"Komga will retrieve each page's dimensions (width and height). This is useful for:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"properly displaying landscape pages in the web reader, when using double pages"),(0,r.kt)("li",{parentName:"ul"},'comparing page dimensions in the "Import" dialog')),(0,r.kt)("p",null,"This can consume lots of resources on large libraries or slow hardware."),(0,r.kt)("h4",{id:"file-management"},"File management"),(0,r.kt)("h5",{id:"automatically-repair-incorrect-file-extensions"},"Automatically repair incorrect file extensions"),(0,r.kt)("p",null,"Files with an incorrect extension will be automatically renamed in the background. For example a ",(0,r.kt)("inlineCode",{parentName:"p"},"zip")," file with a ",(0,r.kt)("inlineCode",{parentName:"p"},".cbr")," extension will be renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},".cbz"),"."),(0,r.kt)("h5",{id:"automatically-convert-to-cbz"},"Automatically convert to CBZ"),(0,r.kt)("p",null,"Books in ",(0,r.kt)("inlineCode",{parentName:"p"},"rar"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"cbr")," format (RAR4 only) will be converted to ",(0,r.kt)("inlineCode",{parentName:"p"},"cbz")," automatically in the background. The ",(0,r.kt)("inlineCode",{parentName:"p"},"zip")," files are created with the ",(0,r.kt)("inlineCode",{parentName:"p"},"DEFLATE")," method without compression."),(0,r.kt)("h4",{id:"series-cover"},"Series cover"),(0,r.kt)("p",null,"Choose which book cover is used for the series."),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("img",{src:"/assets/media/guides/libraries/library-add-metadata.png",style:{maxHeight:"600px"},alt:"Add Library Dialog Metadata"}),(0,r.kt)("p",null,"Check the ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/scan-analysis-refresh#refresh-metadata"},"Refresh Metadata")," section to know more about what they do."),(0,r.kt)("h2",{id:"edit-a-library"},"Edit a library"),(0,r.kt)("p",null,"To edit a library, look for the action menu icon ",(0,r.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,r.kt)("em",{parentName:"p"},"Edit"),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"If you change the root folder of a library, and ",(0,r.kt)("strong",{parentName:"p"},"the new path doesn't share anything with the previous path"),", you will lose all your series, books and read progress for that library."),(0,r.kt)("p",{parentName:"admonition"},"If you change the path ",(0,r.kt)("strong",{parentName:"p"},"for a parent directory of the current path"),", you will not lose your content."),(0,r.kt)("p",{parentName:"admonition"},"If you change the path ",(0,r.kt)("strong",{parentName:"p"},"for a child directory of the current path"),", you will lose part of your content.")),(0,r.kt)("h2",{id:"delete-a-library"},"Delete a library"),(0,r.kt)("p",null,"To delete a library, look for the action menu icon ",(0,r.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,r.kt)("em",{parentName:"p"},"Delete"),"."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Deleting a library will remove all series and books contained in this library. Read progress for all those books will be deleted."),(0,r.kt)("p",{parentName:"admonition"},"Your media files will not be affected."),(0,r.kt)("p",{parentName:"admonition"},"This cannot be undone.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5592dbb1.882478c2.js b/assets/js/5592dbb1.9ca87331.js similarity index 96% rename from assets/js/5592dbb1.882478c2.js rename to assets/js/5592dbb1.9ca87331.js index f48f905c..57c2433a 100644 --- a/assets/js/5592dbb1.882478c2.js +++ b/assets/js/5592dbb1.9ca87331.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[8336],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=c(r),m=o,f=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return r?n.createElement(f,a(a({ref:t},s),{},{components:r})):n.createElement(f,a({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[u]="string"==typeof e?e:o,a[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const i={},a="Desktop Application",p={unversionedId:"guides/desktop",id:"guides/desktop",title:"Desktop Application",description:"The Desktop application runs in your menu bar / tray icon:",source:"@site/docs/guides/desktop.md",sourceDirName:"guides",slug:"/guides/desktop",permalink:"/docs/guides/desktop",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/desktop.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Accessing the web interface",permalink:"/docs/guides/webui"},next:{title:"Libraries",permalink:"/docs/guides/libraries"}},l={},c=[],s={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"desktop-application"},"Desktop Application"),(0,o.kt)("p",null,"The Desktop application runs in your menu bar / tray icon:"),(0,o.kt)("img",{src:"/assets/media/guides/desktop/desktop-menu.png",style:{maxHeight:"200px"},alt:"Desktop application menu"}),(0,o.kt)("p",null,"From the menu you can:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open Komga: this will open the ",(0,o.kt)("a",{parentName:"li",href:"./webui"},"web interface"),"."),(0,o.kt)("li",{parentName:"ul"},"Show log file: this will open a file explorer at the location of the log file."),(0,o.kt)("li",{parentName:"ul"},"Open configuration directory: this will open a file explorer at the location of the configuration directory."),(0,o.kt)("li",{parentName:"ul"},"Quit Komga: this will stop Komga and exit the application.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[8336],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=c(r),m=o,f=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return r?n.createElement(f,a(a({ref:t},s),{},{components:r})):n.createElement(f,a({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[u]="string"==typeof e?e:o,a[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const i={},a="Desktop Application",p={unversionedId:"guides/desktop",id:"guides/desktop",title:"Desktop Application",description:"The Desktop application runs in your menu bar / tray icon:",source:"@site/docs/guides/desktop.md",sourceDirName:"guides",slug:"/guides/desktop",permalink:"/docs/guides/desktop",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/desktop.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Accessing the web interface",permalink:"/docs/guides/webui"},next:{title:"Libraries",permalink:"/docs/guides/libraries"}},l={},c=[],s={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"desktop-application"},"Desktop Application"),(0,o.kt)("p",null,"The Desktop application runs in your menu bar / tray icon:"),(0,o.kt)("img",{src:"/assets/media/guides/desktop/desktop-menu.png",style:{maxHeight:"200px"},alt:"Desktop application menu"}),(0,o.kt)("p",null,"From the menu you can:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open Komga: this will open the ",(0,o.kt)("a",{parentName:"li",href:"./webui"},"web interface"),"."),(0,o.kt)("li",{parentName:"ul"},"Show log file: this will open a file explorer at the location of the log file."),(0,o.kt)("li",{parentName:"ul"},"Open configuration directory: this will open a file explorer at the location of the configuration directory."),(0,o.kt)("li",{parentName:"ul"},"Quit Komga: this will stop Komga and exit the application.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/58903ab2.016468f7.js b/assets/js/58903ab2.6d61701d.js similarity index 97% rename from assets/js/58903ab2.016468f7.js rename to assets/js/58903ab2.6d61701d.js index 9d4a8ff5..0fb6a4ef 100644 --- a/assets/js/58903ab2.016468f7.js +++ b/assets/js/58903ab2.6d61701d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6399],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(n),f=r,h=d["".concat(p,".").concat(f)]||d[f]||u[f]||o;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={},i="Install the Desktop application",l={unversionedId:"installation/desktop",id:"installation/desktop",title:"Install the Desktop application",description:"You can install Komga from the Download page. Just follow the instructions on the page.",source:"@site/docs/installation/desktop.md",sourceDirName:"installation",slug:"/installation/desktop",permalink:"/docs/installation/desktop",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/desktop.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install from the Microsoft Store",permalink:"/docs/installation/ms-store"},next:{title:"Run with Docker",permalink:"/docs/installation/docker"}},p={},s=[{value:"Updating",id:"updating",level:2},{value:"Windows",id:"windows",level:3},{value:"macOS",id:"macos",level:3},{value:"Linux",id:"linux",level:3},{value:"Read next",id:"read-next",level:2}],c={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"install-the-desktop-application"},"Install the Desktop application"),(0,r.kt)("p",null,"You can install Komga from the ",(0,r.kt)("a",{parentName:"p",href:"https://download.komga.org"},"Download page"),". Just follow the instructions on the page."),(0,r.kt)("p",null,"The desktop application is available for Windows, macOS and Linux."),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"The application will automatically update itself when a new version is available."),(0,r.kt)("h3",{id:"windows"},"Windows"),(0,r.kt)("p",null,"The OS itself will check for updates every 8 hours and upgrade the app in the background, even if it's not being used. Users will never see an update prompt."),(0,r.kt)("h3",{id:"macos"},"macOS"),(0,r.kt)("p",null,"The app will check for updates on startup without blocking the user, and on a schedule whilst the app runs. Once the user agrees, updates will be downloaded and applied in the background ready for the next launch."),(0,r.kt)("h3",{id:"linux"},"Linux"),(0,r.kt)("p",null,"An update check will be performed synchronously on each app start. If a new version is available then the update process will start and the update downloaded and applied, without any user interaction being required."),(0,r.kt)("h2",{id:"read-next"},"Read next"),(0,r.kt)("p",null,"Check the ",(0,r.kt)("a",{parentName:"p",href:"../guides/desktop"},"Desktop Application")," page."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6399],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(n),f=r,h=d["".concat(p,".").concat(f)]||d[f]||u[f]||o;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={},i="Install the Desktop application",l={unversionedId:"installation/desktop",id:"installation/desktop",title:"Install the Desktop application",description:"You can install Komga from the Download page. Just follow the instructions on the page.",source:"@site/docs/installation/desktop.md",sourceDirName:"installation",slug:"/installation/desktop",permalink:"/docs/installation/desktop",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/desktop.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install from the Microsoft Store",permalink:"/docs/installation/ms-store"},next:{title:"Run with Docker",permalink:"/docs/installation/docker"}},p={},s=[{value:"Updating",id:"updating",level:2},{value:"Windows",id:"windows",level:3},{value:"macOS",id:"macos",level:3},{value:"Linux",id:"linux",level:3},{value:"Read next",id:"read-next",level:2}],c={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"install-the-desktop-application"},"Install the Desktop application"),(0,r.kt)("p",null,"You can install Komga from the ",(0,r.kt)("a",{parentName:"p",href:"https://download.komga.org"},"Download page"),". Just follow the instructions on the page."),(0,r.kt)("p",null,"The desktop application is available for Windows, macOS and Linux."),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"The application will automatically update itself when a new version is available."),(0,r.kt)("h3",{id:"windows"},"Windows"),(0,r.kt)("p",null,"The OS itself will check for updates every 8 hours and upgrade the app in the background, even if it's not being used. Users will never see an update prompt."),(0,r.kt)("h3",{id:"macos"},"macOS"),(0,r.kt)("p",null,"The app will check for updates on startup without blocking the user, and on a schedule whilst the app runs. Once the user agrees, updates will be downloaded and applied in the background ready for the next launch."),(0,r.kt)("h3",{id:"linux"},"Linux"),(0,r.kt)("p",null,"An update check will be performed synchronously on each app start. If a new version is available then the update process will start and the update downloaded and applied, without any user interaction being required."),(0,r.kt)("h2",{id:"read-next"},"Read next"),(0,r.kt)("p",null,"Check the ",(0,r.kt)("a",{parentName:"p",href:"../guides/desktop"},"Desktop Application")," page."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5ef0e9d6.683b49a9.js b/assets/js/5ef0e9d6.4ad716ad.js similarity index 97% rename from assets/js/5ef0e9d6.683b49a9.js rename to assets/js/5ef0e9d6.4ad716ad.js index 0501db76..22d8a1ab 100644 --- a/assets/js/5ef0e9d6.683b49a9.js +++ b/assets/js/5ef0e9d6.4ad716ad.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9880],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>g});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var c=r.createContext({}),u=function(e){var t=r.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=u(e.components);return r.createElement(c.Provider,{value:t},e.children)},s="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=u(a),d=n,g=s["".concat(c,".").concat(d)]||s[d]||p[d]||o;return a?r.createElement(g,i(i({ref:t},m),{},{components:a})):r.createElement(g,i({ref:t},m))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[s]="string"==typeof e?e:n,i[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=a(7462),n=(a(7294),a(3905));const o={},i="Community",l={unversionedId:"community",id:"community",title:"Community",description:"This page lists community applications or tools that can be used alongside Komga.",source:"@site/docs/community.md",sourceDirName:".",slug:"/community",permalink:"/docs/community",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/community.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Contribution",permalink:"/docs/contribution"},next:{title:"Frequently Asked Questions",permalink:"/docs/faq"}},c={},u=[{value:"Komf",id:"komf",level:2},{value:"Kurp",id:"kurp",level:2},{value:"Manga Manager",id:"manga-manager",level:2},{value:"KoMI",id:"komi",level:2},{value:"Mylar League",id:"mylar-league",level:2}],m={toc:u},s="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(s,(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"community"},"Community"),(0,n.kt)("p",null,"This page lists community applications or tools that can be used alongside Komga."),(0,n.kt)("h2",{id:"komf"},"Komf"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/Snd-R/komf"},"Komga and Kavita Metadata Fetcher")," is a tool that fetches metadata and thumbnails for your digital comic book library. It can automatically pick up added series and update their metadata and thumbnail.")),(0,n.kt)("h2",{id:"kurp"},"Kurp"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/Snd-R/kurp"},"Komga and Kavita upscaling reverse proxy"),". Reverse proxy that intercepts image requests and applies upscaling. Other requests are transparently proxied without noticable delay")),(0,n.kt)("h2",{id:"manga-manager"},"Manga Manager"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/MangaManagerORG/Manga-Manager"},"Manga Manager")," is an all-in-one tool to make managing your manga library easy. Has a built-in metadata editor as well as cover and back cover editor.")),(0,n.kt)("h2",{id:"komi"},"KoMI"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/edwinbadillo/KoMI"},"KoMI")," is a user script that adds buttons in the series page to perform metadata matching with online sources."),(0,n.kt)("h2",{id:"mylar-league"},"Mylar League"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/flips22/mylar-league"},"Mylar League")," is a collection of various tools to aid in the integration of mylar and komga with leagueofcomicgeeks.com.")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9880],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>g});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var c=r.createContext({}),u=function(e){var t=r.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=u(e.components);return r.createElement(c.Provider,{value:t},e.children)},s="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=u(a),d=n,g=s["".concat(c,".").concat(d)]||s[d]||p[d]||o;return a?r.createElement(g,i(i({ref:t},m),{},{components:a})):r.createElement(g,i({ref:t},m))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[s]="string"==typeof e?e:n,i[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=a(7462),n=(a(7294),a(3905));const o={},i="Community",l={unversionedId:"community",id:"community",title:"Community",description:"This page lists community applications or tools that can be used alongside Komga.",source:"@site/docs/community.md",sourceDirName:".",slug:"/community",permalink:"/docs/community",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/community.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Contribution",permalink:"/docs/contribution"},next:{title:"Frequently Asked Questions",permalink:"/docs/faq"}},c={},u=[{value:"Komf",id:"komf",level:2},{value:"Kurp",id:"kurp",level:2},{value:"Manga Manager",id:"manga-manager",level:2},{value:"KoMI",id:"komi",level:2},{value:"Mylar League",id:"mylar-league",level:2}],m={toc:u},s="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(s,(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"community"},"Community"),(0,n.kt)("p",null,"This page lists community applications or tools that can be used alongside Komga."),(0,n.kt)("h2",{id:"komf"},"Komf"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/Snd-R/komf"},"Komga and Kavita Metadata Fetcher")," is a tool that fetches metadata and thumbnails for your digital comic book library. It can automatically pick up added series and update their metadata and thumbnail.")),(0,n.kt)("h2",{id:"kurp"},"Kurp"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/Snd-R/kurp"},"Komga and Kavita upscaling reverse proxy"),". Reverse proxy that intercepts image requests and applies upscaling. Other requests are transparently proxied without noticable delay")),(0,n.kt)("h2",{id:"manga-manager"},"Manga Manager"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/MangaManagerORG/Manga-Manager"},"Manga Manager")," is an all-in-one tool to make managing your manga library easy. Has a built-in metadata editor as well as cover and back cover editor.")),(0,n.kt)("h2",{id:"komi"},"KoMI"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/edwinbadillo/KoMI"},"KoMI")," is a user script that adds buttons in the series page to perform metadata matching with online sources."),(0,n.kt)("h2",{id:"mylar-league"},"Mylar League"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://github.com/flips22/mylar-league"},"Mylar League")," is a collection of various tools to aid in the integration of mylar and komga with leagueofcomicgeeks.com.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/607df45e.6c4f2561.js b/assets/js/607df45e.558bb10a.js similarity index 98% rename from assets/js/607df45e.6c4f2561.js rename to assets/js/607df45e.558bb10a.js index 9540a292..7e8ea30b 100644 --- a/assets/js/607df45e.6c4f2561.js +++ b/assets/js/607df45e.558bb10a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9112],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),m=o,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={},i="Google Drive and rclone",l={unversionedId:"installation/gdrive",id:"installation/gdrive",title:"Google Drive and rclone",description:"If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.",source:"@site/docs/installation/gdrive.md",sourceDirName:"installation",slug:"/installation/gdrive",permalink:"/docs/installation/gdrive",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/gdrive.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Social login",permalink:"/docs/installation/oauth2"},next:{title:"Guides",permalink:"/docs/category/guides"}},c={},s=[],p={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"google-drive-and-rclone"},"Google Drive and rclone"),(0,o.kt)("p",null,"If your books are stored on Google Drive, you can use ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/plexdrive/plexdrive"},"Plexdrive")," or ",(0,o.kt)("a",{parentName:"p",href:"https://rclone.org/"},"rclone")," to make them accessible to Komga."),(0,o.kt)("p",null,"You will need to configure your library to ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/libraries#force-directory-modified-time"},"force the directory modified time"),"."),(0,o.kt)("p",null,"Rclone requires some specific configuration to cache files locally, and work better with Komga.\nHere is a user-provided configuration that works well (thanks Magikarp):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"rclone mount : \\\n --no-checksum \\\n --use-server-modtime \\\n --no-gzip-encoding \\\n --no-update-modtime \\\n --no-seek \\\n --modify-window 2m \\\n --allow-other \\\n --allow-non-empty \\\n --dir-cache-time 30m \\\n --cache-read-retries 15 \\\n --cache-db-purge \\\n --timeout 30m \\\n --vfs-cache-mode full \\\n --vfs-read-chunk-size 2M \\\n --vfs-read-chunk-size-limit 5M \\\n --vfs-cache-max-age 30m \\\n --attr-timeout 20s \\\n --poll-interval 9m \\\n --vfs-cache-poll-interval 10m\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9112],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),m=o,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={},i="Google Drive and rclone",l={unversionedId:"installation/gdrive",id:"installation/gdrive",title:"Google Drive and rclone",description:"If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.",source:"@site/docs/installation/gdrive.md",sourceDirName:"installation",slug:"/installation/gdrive",permalink:"/docs/installation/gdrive",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/gdrive.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Social login",permalink:"/docs/installation/oauth2"},next:{title:"Guides",permalink:"/docs/category/guides"}},c={},s=[],p={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"google-drive-and-rclone"},"Google Drive and rclone"),(0,o.kt)("p",null,"If your books are stored on Google Drive, you can use ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/plexdrive/plexdrive"},"Plexdrive")," or ",(0,o.kt)("a",{parentName:"p",href:"https://rclone.org/"},"rclone")," to make them accessible to Komga."),(0,o.kt)("p",null,"You will need to configure your library to ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/libraries#force-directory-modified-time"},"force the directory modified time"),"."),(0,o.kt)("p",null,"Rclone requires some specific configuration to cache files locally, and work better with Komga.\nHere is a user-provided configuration that works well (thanks Magikarp):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"rclone mount : \\\n --no-checksum \\\n --use-server-modtime \\\n --no-gzip-encoding \\\n --no-update-modtime \\\n --no-seek \\\n --modify-window 2m \\\n --allow-other \\\n --allow-non-empty \\\n --dir-cache-time 30m \\\n --cache-read-retries 15 \\\n --cache-db-purge \\\n --timeout 30m \\\n --vfs-cache-mode full \\\n --vfs-read-chunk-size 2M \\\n --vfs-read-chunk-size-limit 5M \\\n --vfs-cache-max-age 30m \\\n --attr-timeout 20s \\\n --poll-interval 9m \\\n --vfs-cache-poll-interval 10m\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/674e178f.276682dd.js b/assets/js/674e178f.017e3942.js similarity index 99% rename from assets/js/674e178f.276682dd.js rename to assets/js/674e178f.017e3942.js index 1ffc74d3..e5762b40 100644 --- a/assets/js/674e178f.276682dd.js +++ b/assets/js/674e178f.017e3942.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5203],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=o,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return n?a.createElement(h,i(i({ref:t},d),{},{components:n})):a.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const r={},i="Read with CDisplayEx",s={unversionedId:"guides/cdisplayex",id:"guides/cdisplayex",title:"Read with CDisplayEx",description:"The premium version of CDisplayEx for Android allows you to connect",source:"@site/docs/guides/cdisplayex.md",sourceDirName:"guides",slug:"/guides/cdisplayex",permalink:"/docs/guides/cdisplayex",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cdisplayex.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Paperback",permalink:"/docs/guides/paperback"},next:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"}},l={},p=[{value:"Add a new location",id:"add-a-new-location",level:2},{value:"Nested folders",id:"nested-folders",level:2},{value:"Library",id:"library",level:2},{value:"Reading status",id:"reading-status",level:2}],d={toc:p},c="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"read-with-cdisplayex"},"Read with CDisplayEx"),(0,o.kt)("p",null,"The premium version of ",(0,o.kt)("a",{parentName:"p",href:"https://www.cdisplayex.com/mobile/"},"CDisplayEx")," for Android allows you to connect\nto Komga using the ",(0,o.kt)("a",{parentName:"p",href:"../api/rest#authenticating"},"REST API"),"."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"If you have disabled the ",(0,o.kt)("a",{parentName:"p",href:"libraries#analyze-page-dimensions"},"page dimensions analysis")," option, re-enable it,\nit is necessary to open books with CDisplayEx.")),(0,o.kt)("h2",{id:"add-a-new-location"},"Add a new location"),(0,o.kt)("p",null,"On the home page, use the big ",(0,o.kt)("strong",{parentName:"p"},"+")," button at the bottom right to add a new location. Then choose the Komga option from the list that appears.\nA dialog box appears asking you to enter some information."),(0,o.kt)("p",null,"You can specify an ",(0,o.kt)("strong",{parentName:"p"},"IP Address")," or a ",(0,o.kt)("strong",{parentName:"p"},"host name")," to identify the remote server.\nHere are some examples: ",(0,o.kt)("inlineCode",{parentName:"p"},"192.168.1.12, computer.local, demo.komga.org, user.host.net/komga")),(0,o.kt)("p",null,"Enter your ",(0,o.kt)("strong",{parentName:"p"},"username")," and ",(0,o.kt)("strong",{parentName:"p"},"password"),"."),(0,o.kt)("p",null,"Specify a ",(0,o.kt)("strong",{parentName:"p"},"port")," number if you are using a different port than the one used by default by the HTTP or HTTPS protocols. If you are using HTTPS, check the ",(0,o.kt)("strong",{parentName:"p"},"SSL")," option."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you are using a self-signed certificate and don't want to add it to your device, there is an experimental option to disable SSL certificate verification.")),(0,o.kt)("p",null,"The application uses a ",(0,o.kt)("strong",{parentName:"p"},"virtual folder")," structure to browse books by library, series, collections and reading lists. Select a folder to\nmake only part of your library accessible. If you want to make everything accessible, leave the ",(0,o.kt)("strong",{parentName:"p"},"path")," blank."),(0,o.kt)("p",null,"Add a ",(0,o.kt)("strong",{parentName:"p"},"description")," and leave the other options checked."),(0,o.kt)("p",null,"Now press the ",(0,o.kt)("strong",{parentName:"p"},"ADD")," button, the synchronization will start, depending on the size of your library and the performance of your server,\nit may take a few minutes or a few seconds. You will be notified when this operation is complete."),(0,o.kt)("h2",{id:"nested-folders"},"Nested folders"),(0,o.kt)("p",null,"Without waiting for the synchronization to complete, you can browse folders by tapping on the location that was just\nadded to the home page. In this view, the server must be reachable. You will be able to navigate in a virtual folder structure."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To see a thumbnail on the folder and to display statistical information,\nyou must activate the thumbnail option: ",(0,o.kt)("a",{parentName:"p",href:"https://www.cdisplayex.com/mobile/settings/#show-a-thumbnail-on-folders"},"Show a thumbnail on folders"))),(0,o.kt)("h2",{id:"library"},"Library"),(0,o.kt)("p",null,"Once the synchronization is complete, the location has been added to the application library, it is accessible offline.\nGo to the series from the home page or by using the navigation bar. If you want to read a book offline you need to download it,\nlong press on the book and use the download button."),(0,o.kt)("h2",{id:"reading-status"},"Reading status"),(0,o.kt)("p",null,"Reading status and read progress are synced at different times when you use the app."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"When you sync location manually. (Make a long press on the location and start the synchronization)"),(0,o.kt)("li",{parentName:"ul"},"When you browse or refresh a series folder from a location."),(0,o.kt)("li",{parentName:"ul"},"When you open and close a book."),(0,o.kt)("li",{parentName:"ul"},"When the app goes into the background while a book is open.")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5203],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=o,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return n?a.createElement(h,i(i({ref:t},d),{},{components:n})):a.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const r={},i="Read with CDisplayEx",s={unversionedId:"guides/cdisplayex",id:"guides/cdisplayex",title:"Read with CDisplayEx",description:"The premium version of CDisplayEx for Android allows you to connect",source:"@site/docs/guides/cdisplayex.md",sourceDirName:"guides",slug:"/guides/cdisplayex",permalink:"/docs/guides/cdisplayex",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cdisplayex.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Paperback",permalink:"/docs/guides/paperback"},next:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"}},l={},p=[{value:"Add a new location",id:"add-a-new-location",level:2},{value:"Nested folders",id:"nested-folders",level:2},{value:"Library",id:"library",level:2},{value:"Reading status",id:"reading-status",level:2}],d={toc:p},c="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"read-with-cdisplayex"},"Read with CDisplayEx"),(0,o.kt)("p",null,"The premium version of ",(0,o.kt)("a",{parentName:"p",href:"https://www.cdisplayex.com/mobile/"},"CDisplayEx")," for Android allows you to connect\nto Komga using the ",(0,o.kt)("a",{parentName:"p",href:"../api/rest#authenticating"},"REST API"),"."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"If you have disabled the ",(0,o.kt)("a",{parentName:"p",href:"libraries#analyze-page-dimensions"},"page dimensions analysis")," option, re-enable it,\nit is necessary to open books with CDisplayEx.")),(0,o.kt)("h2",{id:"add-a-new-location"},"Add a new location"),(0,o.kt)("p",null,"On the home page, use the big ",(0,o.kt)("strong",{parentName:"p"},"+")," button at the bottom right to add a new location. Then choose the Komga option from the list that appears.\nA dialog box appears asking you to enter some information."),(0,o.kt)("p",null,"You can specify an ",(0,o.kt)("strong",{parentName:"p"},"IP Address")," or a ",(0,o.kt)("strong",{parentName:"p"},"host name")," to identify the remote server.\nHere are some examples: ",(0,o.kt)("inlineCode",{parentName:"p"},"192.168.1.12, computer.local, demo.komga.org, user.host.net/komga")),(0,o.kt)("p",null,"Enter your ",(0,o.kt)("strong",{parentName:"p"},"username")," and ",(0,o.kt)("strong",{parentName:"p"},"password"),"."),(0,o.kt)("p",null,"Specify a ",(0,o.kt)("strong",{parentName:"p"},"port")," number if you are using a different port than the one used by default by the HTTP or HTTPS protocols. If you are using HTTPS, check the ",(0,o.kt)("strong",{parentName:"p"},"SSL")," option."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you are using a self-signed certificate and don't want to add it to your device, there is an experimental option to disable SSL certificate verification.")),(0,o.kt)("p",null,"The application uses a ",(0,o.kt)("strong",{parentName:"p"},"virtual folder")," structure to browse books by library, series, collections and reading lists. Select a folder to\nmake only part of your library accessible. If you want to make everything accessible, leave the ",(0,o.kt)("strong",{parentName:"p"},"path")," blank."),(0,o.kt)("p",null,"Add a ",(0,o.kt)("strong",{parentName:"p"},"description")," and leave the other options checked."),(0,o.kt)("p",null,"Now press the ",(0,o.kt)("strong",{parentName:"p"},"ADD")," button, the synchronization will start, depending on the size of your library and the performance of your server,\nit may take a few minutes or a few seconds. You will be notified when this operation is complete."),(0,o.kt)("h2",{id:"nested-folders"},"Nested folders"),(0,o.kt)("p",null,"Without waiting for the synchronization to complete, you can browse folders by tapping on the location that was just\nadded to the home page. In this view, the server must be reachable. You will be able to navigate in a virtual folder structure."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To see a thumbnail on the folder and to display statistical information,\nyou must activate the thumbnail option: ",(0,o.kt)("a",{parentName:"p",href:"https://www.cdisplayex.com/mobile/settings/#show-a-thumbnail-on-folders"},"Show a thumbnail on folders"))),(0,o.kt)("h2",{id:"library"},"Library"),(0,o.kt)("p",null,"Once the synchronization is complete, the location has been added to the application library, it is accessible offline.\nGo to the series from the home page or by using the navigation bar. If you want to read a book offline you need to download it,\nlong press on the book and use the download button."),(0,o.kt)("h2",{id:"reading-status"},"Reading status"),(0,o.kt)("p",null,"Reading status and read progress are synced at different times when you use the app."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"When you sync location manually. (Make a long press on the location and start the synchronization)"),(0,o.kt)("li",{parentName:"ul"},"When you browse or refresh a series folder from a location."),(0,o.kt)("li",{parentName:"ul"},"When you open and close a book."),(0,o.kt)("li",{parentName:"ul"},"When the app goes into the background while a book is open.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/767395cb.cf1475a1.js b/assets/js/767395cb.04527083.js similarity index 97% rename from assets/js/767395cb.cf1475a1.js rename to assets/js/767395cb.04527083.js index c6fe6f71..a26dcfa9 100644 --- a/assets/js/767395cb.cf1475a1.js +++ b/assets/js/767395cb.04527083.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3526],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=l(r),m=o,y=c["".concat(p,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(y,i(i({ref:t},u),{},{components:r})):n.createElement(y,i({ref:t},u))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={},i="Expose your server",s={unversionedId:"installation/https",id:"installation/https",title:"Expose your server",description:"HTTPS",source:"@site/docs/installation/https.md",sourceDirName:"installation",slug:"/installation/https",permalink:"/docs/installation/https",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/https.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Configuration options",permalink:"/docs/installation/configuration"},next:{title:"Social login",permalink:"/docs/installation/oauth2"}},p={},l=[{value:"HTTPS",id:"https",level:2},{value:"Reverse proxy",id:"reverse-proxy",level:2},{value:"Caddy (v1)",id:"caddy-v1",level:3},{value:"Caddy (v2)",id:"caddy-v2",level:3}],u={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"expose-your-server"},"Expose your server"),(0,o.kt)("h2",{id:"https"},"HTTPS"),(0,o.kt)("p",null,"If you want to open your Komga server outside your local network, it is strongly advised to secure it with ",(0,o.kt)("inlineCode",{parentName:"p"},"https")," (especially due to the use of http basic authentication)."),(0,o.kt)("p",null,"Spring Boot supports ",(0,o.kt)("inlineCode",{parentName:"p"},"https")," out of the box, but you will have to configure it, and ",(0,o.kt)("inlineCode",{parentName:"p"},"https")," is most useful only with valid certificates (not self-signed), which most people don't readily have available."),(0,o.kt)("p",null,"I recommend using ",(0,o.kt)("a",{parentName:"p",href:"https://caddyserver.com/"},"Caddy")," as a reverse proxy, as it supports the automatic generation of ",(0,o.kt)("a",{parentName:"p",href:"https://letsencrypt.org/"},"Let's Encrypt")," certificates."),(0,o.kt)("h2",{id:"reverse-proxy"},"Reverse proxy"),(0,o.kt)("p",null,"Here are some sample configuration on how to configure reverse proxy for Komga."),(0,o.kt)("h3",{id:"caddy-v1"},"Caddy (v1)"),(0,o.kt)("p",null,"Without a base URL configured in Komga, using a subdomain:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"komga.yourdomain.com {\n proxy / http://your-komga-server:25600 {\n transparent\n }\n}\n")),(0,o.kt)("p",null,"With a base URL configured in Komga:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"yourdomain.com {\n proxy /komga http://your-komga-server:25600 {\n transparent\n }\n}\n")),(0,o.kt)("h3",{id:"caddy-v2"},"Caddy (v2)"),(0,o.kt)("p",null,"Without a base URL configured in Komga, using a subdomain:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"komga.yourdomain.com {\n reverse_proxy http://your-komga-server:25600\n}\n")),(0,o.kt)("p",null,"With a base URL configured in Komga:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"yourdomain.com {\n reverse_proxy /komga/* http://your-komga-server:25600\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3526],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=l(r),m=o,y=c["".concat(p,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(y,i(i({ref:t},u),{},{components:r})):n.createElement(y,i({ref:t},u))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={},i="Expose your server",s={unversionedId:"installation/https",id:"installation/https",title:"Expose your server",description:"HTTPS",source:"@site/docs/installation/https.md",sourceDirName:"installation",slug:"/installation/https",permalink:"/docs/installation/https",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/https.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Configuration options",permalink:"/docs/installation/configuration"},next:{title:"Social login",permalink:"/docs/installation/oauth2"}},p={},l=[{value:"HTTPS",id:"https",level:2},{value:"Reverse proxy",id:"reverse-proxy",level:2},{value:"Caddy (v1)",id:"caddy-v1",level:3},{value:"Caddy (v2)",id:"caddy-v2",level:3}],u={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"expose-your-server"},"Expose your server"),(0,o.kt)("h2",{id:"https"},"HTTPS"),(0,o.kt)("p",null,"If you want to open your Komga server outside your local network, it is strongly advised to secure it with ",(0,o.kt)("inlineCode",{parentName:"p"},"https")," (especially due to the use of http basic authentication)."),(0,o.kt)("p",null,"Spring Boot supports ",(0,o.kt)("inlineCode",{parentName:"p"},"https")," out of the box, but you will have to configure it, and ",(0,o.kt)("inlineCode",{parentName:"p"},"https")," is most useful only with valid certificates (not self-signed), which most people don't readily have available."),(0,o.kt)("p",null,"I recommend using ",(0,o.kt)("a",{parentName:"p",href:"https://caddyserver.com/"},"Caddy")," as a reverse proxy, as it supports the automatic generation of ",(0,o.kt)("a",{parentName:"p",href:"https://letsencrypt.org/"},"Let's Encrypt")," certificates."),(0,o.kt)("h2",{id:"reverse-proxy"},"Reverse proxy"),(0,o.kt)("p",null,"Here are some sample configuration on how to configure reverse proxy for Komga."),(0,o.kt)("h3",{id:"caddy-v1"},"Caddy (v1)"),(0,o.kt)("p",null,"Without a base URL configured in Komga, using a subdomain:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"komga.yourdomain.com {\n proxy / http://your-komga-server:25600 {\n transparent\n }\n}\n")),(0,o.kt)("p",null,"With a base URL configured in Komga:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"yourdomain.com {\n proxy /komga http://your-komga-server:25600 {\n transparent\n }\n}\n")),(0,o.kt)("h3",{id:"caddy-v2"},"Caddy (v2)"),(0,o.kt)("p",null,"Without a base URL configured in Komga, using a subdomain:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"komga.yourdomain.com {\n reverse_proxy http://your-komga-server:25600\n}\n")),(0,o.kt)("p",null,"With a base URL configured in Komga:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"yourdomain.com {\n reverse_proxy /komga/* http://your-komga-server:25600\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7d6e8713.da059be4.js b/assets/js/7d6e8713.ea0c0d1e.js similarity index 99% rename from assets/js/7d6e8713.da059be4.js rename to assets/js/7d6e8713.ea0c0d1e.js index fd6ebc7b..01c5e407 100644 --- a/assets/js/7d6e8713.da059be4.js +++ b/assets/js/7d6e8713.ea0c0d1e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3620],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var r=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=r.createContext({}),d=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,i=e.mdxType,n=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),p=d(a),g=i,h=p["".concat(s,".").concat(g)]||p[g]||c[g]||n;return a?r.createElement(h,l(l({ref:t},u),{},{components:a})):r.createElement(h,l({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=a.length,l=new Array(n);l[0]=g;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[p]="string"==typeof e?e:i,l[1]=o;for(var d=2;d{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>n,metadata:()=>o,toc:()=>d});var r=a(7462),i=(a(7294),a(3905));const n={},l="Read with the Webreader",o={unversionedId:"guides/webreader",id:"guides/webreader",title:"Read with the Webreader",description:"Komga has an integrated Webreader packed with features.",source:"@site/docs/guides/webreader.md",sourceDirName:"guides",slug:"/guides/webreader",permalink:"/docs/guides/webreader",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webreader.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Readers",permalink:"/docs/category/readers"},next:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"}},s={},d=[{value:"Settings",id:"settings",level:2},{value:"General",id:"general",level:3},{value:"Reading mode",id:"reading-mode",level:4},{value:"Animate page transitions",id:"animate-page-transitions",level:4},{value:"Gestures",id:"gestures",level:4},{value:"Display",id:"display",level:3},{value:"Background color",id:"background-color",level:4},{value:"Reader specific options: Paged reader",id:"reader-specific-options-paged-reader",level:3},{value:"Scale type",id:"scale-type",level:4},{value:"Double pages",id:"double-pages",level:4},{value:"Thumbnails explorer",id:"thumbnails-explorer",level:2},{value:"Help dialog",id:"help-dialog",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...a}=e;return(0,i.kt)(p,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"read-with-the-webreader"},"Read with the Webreader"),(0,i.kt)("p",null,"Komga has an integrated Webreader packed with features."),(0,i.kt)("p",null,"To start reading a book, you can click on the read button either on the book card, or on the book details screen."),(0,i.kt)("img",{src:"/assets/media/guides/webreader/book-card.png",style:{maxHeight:"300px"},alt:"Book Card Read Button"}),(0,i.kt)("img",{src:"/assets/media/guides/webreader/read-button.png",style:{maxHeight:"300px"},alt:"Book Details read button"}),(0,i.kt)("p",null,"Here is an overview of the Webreader's interface."),(0,i.kt)("a",{href:"/assets/media/guides/webreader/reader.png"},(0,i.kt)("img",{src:"/assets/media/guides/webreader/reader.png",alt:"Webreader overview"})),(0,i.kt)("h2",{id:"settings"},"Settings"),(0,i.kt)("p",null,"The Webreader can be configured in various ways from the settings dialog."),(0,i.kt)("img",{src:"/assets/media/guides/webreader/reader-settings.png",style:{maxHeight:"400px"},alt:"Webreader settings"}),(0,i.kt)("h3",{id:"general"},"General"),(0,i.kt)("h4",{id:"reading-mode"},"Reading mode"),(0,i.kt)("p",null,"Four reading modes are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Left to right"),(0,i.kt)("li",{parentName:"ul"},"Right to left"),(0,i.kt)("li",{parentName:"ul"},"Vertical"),(0,i.kt)("li",{parentName:"ul"},"Webtoon: displays all the pages in a continuous vertical strip")),(0,i.kt)("p",null,"The Webreader will automatically use the ",(0,i.kt)("em",{parentName:"p"},"Reading direction")," specified in the Book metadata."),(0,i.kt)("h4",{id:"animate-page-transitions"},"Animate page transitions"),(0,i.kt)("p",null,"If enable, a smooth transition will be used to switch between pages."),(0,i.kt)("h4",{id:"gestures"},"Gestures"),(0,i.kt)("p",null,"Touch gestures are available in the Page reader only (Left to right, Right to left, Vertical), and can be disabled if necessary."),(0,i.kt)("h3",{id:"display"},"Display"),(0,i.kt)("h4",{id:"background-color"},"Background color"),(0,i.kt)("p",null,"You can choose the background color of the reader between white and black."),(0,i.kt)("h3",{id:"reader-specific-options-paged-reader"},"Reader specific options: Paged reader"),(0,i.kt)("h4",{id:"scale-type"},"Scale type"),(0,i.kt)("p",null,"Four scale types are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Fit to screen"),(0,i.kt)("li",{parentName:"ul"},"Fit to width"),(0,i.kt)("li",{parentName:"ul"},"Fit to height"),(0,i.kt)("li",{parentName:"ul"},"Original")),(0,i.kt)("h4",{id:"double-pages"},"Double pages"),(0,i.kt)("p",null,"When enabled, the Webreader will display two pages on the same screen, like an open book, with the following exceptions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The first and last page will always be shown as a single page"),(0,i.kt)("li",{parentName:"ul"},"If a page has a landscape orientation (width > height), it will be show as a single page")),(0,i.kt)("h2",{id:"thumbnails-explorer"},"Thumbnails explorer"),(0,i.kt)("p",null,"You can use the Thumbnails explorer to have an overview of all the pages in the book, and to quickly navigate to a particular page."),(0,i.kt)("img",{src:"/assets/media/guides/webreader/thumbnails-explorer.png",alt:"Thumbnails explorer"}),(0,i.kt)("h2",{id:"help-dialog"},"Help dialog"),(0,i.kt)("p",null,"The help dialog will display the available keyboard shortcuts. The dialog is context-aware, and will only show shortcuts that are relevant to the current reading mode."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3620],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var r=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=r.createContext({}),d=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,i=e.mdxType,n=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),p=d(a),g=i,h=p["".concat(s,".").concat(g)]||p[g]||c[g]||n;return a?r.createElement(h,l(l({ref:t},u),{},{components:a})):r.createElement(h,l({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=a.length,l=new Array(n);l[0]=g;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[p]="string"==typeof e?e:i,l[1]=o;for(var d=2;d{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>n,metadata:()=>o,toc:()=>d});var r=a(7462),i=(a(7294),a(3905));const n={},l="Read with the Webreader",o={unversionedId:"guides/webreader",id:"guides/webreader",title:"Read with the Webreader",description:"Komga has an integrated Webreader packed with features.",source:"@site/docs/guides/webreader.md",sourceDirName:"guides",slug:"/guides/webreader",permalink:"/docs/guides/webreader",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webreader.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Readers",permalink:"/docs/category/readers"},next:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"}},s={},d=[{value:"Settings",id:"settings",level:2},{value:"General",id:"general",level:3},{value:"Reading mode",id:"reading-mode",level:4},{value:"Animate page transitions",id:"animate-page-transitions",level:4},{value:"Gestures",id:"gestures",level:4},{value:"Display",id:"display",level:3},{value:"Background color",id:"background-color",level:4},{value:"Reader specific options: Paged reader",id:"reader-specific-options-paged-reader",level:3},{value:"Scale type",id:"scale-type",level:4},{value:"Double pages",id:"double-pages",level:4},{value:"Thumbnails explorer",id:"thumbnails-explorer",level:2},{value:"Help dialog",id:"help-dialog",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...a}=e;return(0,i.kt)(p,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"read-with-the-webreader"},"Read with the Webreader"),(0,i.kt)("p",null,"Komga has an integrated Webreader packed with features."),(0,i.kt)("p",null,"To start reading a book, you can click on the read button either on the book card, or on the book details screen."),(0,i.kt)("img",{src:"/assets/media/guides/webreader/book-card.png",style:{maxHeight:"300px"},alt:"Book Card Read Button"}),(0,i.kt)("img",{src:"/assets/media/guides/webreader/read-button.png",style:{maxHeight:"300px"},alt:"Book Details read button"}),(0,i.kt)("p",null,"Here is an overview of the Webreader's interface."),(0,i.kt)("a",{href:"/assets/media/guides/webreader/reader.png"},(0,i.kt)("img",{src:"/assets/media/guides/webreader/reader.png",alt:"Webreader overview"})),(0,i.kt)("h2",{id:"settings"},"Settings"),(0,i.kt)("p",null,"The Webreader can be configured in various ways from the settings dialog."),(0,i.kt)("img",{src:"/assets/media/guides/webreader/reader-settings.png",style:{maxHeight:"400px"},alt:"Webreader settings"}),(0,i.kt)("h3",{id:"general"},"General"),(0,i.kt)("h4",{id:"reading-mode"},"Reading mode"),(0,i.kt)("p",null,"Four reading modes are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Left to right"),(0,i.kt)("li",{parentName:"ul"},"Right to left"),(0,i.kt)("li",{parentName:"ul"},"Vertical"),(0,i.kt)("li",{parentName:"ul"},"Webtoon: displays all the pages in a continuous vertical strip")),(0,i.kt)("p",null,"The Webreader will automatically use the ",(0,i.kt)("em",{parentName:"p"},"Reading direction")," specified in the Book metadata."),(0,i.kt)("h4",{id:"animate-page-transitions"},"Animate page transitions"),(0,i.kt)("p",null,"If enable, a smooth transition will be used to switch between pages."),(0,i.kt)("h4",{id:"gestures"},"Gestures"),(0,i.kt)("p",null,"Touch gestures are available in the Page reader only (Left to right, Right to left, Vertical), and can be disabled if necessary."),(0,i.kt)("h3",{id:"display"},"Display"),(0,i.kt)("h4",{id:"background-color"},"Background color"),(0,i.kt)("p",null,"You can choose the background color of the reader between white and black."),(0,i.kt)("h3",{id:"reader-specific-options-paged-reader"},"Reader specific options: Paged reader"),(0,i.kt)("h4",{id:"scale-type"},"Scale type"),(0,i.kt)("p",null,"Four scale types are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Fit to screen"),(0,i.kt)("li",{parentName:"ul"},"Fit to width"),(0,i.kt)("li",{parentName:"ul"},"Fit to height"),(0,i.kt)("li",{parentName:"ul"},"Original")),(0,i.kt)("h4",{id:"double-pages"},"Double pages"),(0,i.kt)("p",null,"When enabled, the Webreader will display two pages on the same screen, like an open book, with the following exceptions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The first and last page will always be shown as a single page"),(0,i.kt)("li",{parentName:"ul"},"If a page has a landscape orientation (width > height), it will be show as a single page")),(0,i.kt)("h2",{id:"thumbnails-explorer"},"Thumbnails explorer"),(0,i.kt)("p",null,"You can use the Thumbnails explorer to have an overview of all the pages in the book, and to quickly navigate to a particular page."),(0,i.kt)("img",{src:"/assets/media/guides/webreader/thumbnails-explorer.png",alt:"Thumbnails explorer"}),(0,i.kt)("h2",{id:"help-dialog"},"Help dialog"),(0,i.kt)("p",null,"The help dialog will display the available keyboard shortcuts. The dialog is context-aware, and will only show shortcuts that are relevant to the current reading mode."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7da97648.7621a791.js b/assets/js/7da97648.980f5b75.js similarity index 97% rename from assets/js/7da97648.7621a791.js rename to assets/js/7da97648.980f5b75.js index 23487245..4e9512d3 100644 --- a/assets/js/7da97648.7621a791.js +++ b/assets/js/7da97648.980f5b75.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5671],{3905:(e,t,i)=>{i.d(t,{Zo:()=>m,kt:()=>h});var r=i(7294);function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function n(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function o(e){for(var t=1;t=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},m=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var i=e.components,a=e.mdxType,n=e.originalType,c=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=l(i),u=a,h=p["".concat(c,".").concat(u)]||p[u]||d[u]||n;return i?r.createElement(h,o(o({ref:t},m),{},{components:i})):r.createElement(h,o({ref:t},m))}));function h(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=i.length,o=new Array(n);o[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var l=2;l{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=i(7462),a=(i(7294),i(3905));const n={},o="Read with Tachiyomi",s={unversionedId:"guides/tachiyomi",id:"guides/tachiyomi",title:"Read with Tachiyomi",description:"Install and configure",source:"@site/docs/guides/tachiyomi.md",sourceDirName:"guides",slug:"/guides/tachiyomi",permalink:"/docs/guides/tachiyomi",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/tachiyomi.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with the Webreader",permalink:"/docs/guides/webreader"},next:{title:"Read with Paperback",permalink:"/docs/guides/paperback"}},c={},l=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Browse",id:"browse",level:2},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}],m={toc:l},p="wrapper";function d(e){let{components:t,...i}=e;return(0,a.kt)(p,(0,r.Z)({},m,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"read-with-tachiyomi"},"Read with Tachiyomi"),(0,a.kt)("h2",{id:"install-and-configure"},"Install and configure"),(0,a.kt)("p",null,"Komga has an official extension for ",(0,a.kt)("a",{parentName:"p",href:"https://tachiyomi.org"},"Tachiyomi"),", available from within Tachiyomi's extension menu."),(0,a.kt)("p",null,"Once installed, the extension will let you configure up to 3 Komga servers."),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-extension-info.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension info"}),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-configuration.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension configuration"}),(0,a.kt)("p",null,"You will need to configure the extension with your ",(0,a.kt)("em",{parentName:"p"},"server address"),", ",(0,a.kt)("em",{parentName:"p"},"username")," and ",(0,a.kt)("em",{parentName:"p"},"password")," before you can use it."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Example server address: ",(0,a.kt)("inlineCode",{parentName:"p"},"http://my.server:25600(/baseUrl)")),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"Note that there is no trailing slash (",(0,a.kt)("inlineCode",{parentName:"strong"},"/"),")."))),(0,a.kt)("h2",{id:"browse"},"Browse"),(0,a.kt)("p",null,"You can browse series, use the filter menu, and search for series."),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-browse.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension browse"}),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-filters.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension filters"}),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-search.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension search"}),(0,a.kt)("h2",{id:"track-read-progress"},"Track read progress"),(0,a.kt)("p",null,"Tachiyomi starting from ",(0,a.kt)("inlineCode",{parentName:"p"},"0.12.1")," can keep your read progress in sync with your Komga server. Check the official Tachiyomi website for ",(0,a.kt)("a",{parentName:"p",href:"https://tachiyomi.org/help/guides/tracking/#what-is-tracking"},"instructions"),"."),(0,a.kt)("p",null,"Requirements:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Tachiyomi ",(0,a.kt)("inlineCode",{parentName:"li"},"0.12.1+")),(0,a.kt)("li",{parentName:"ul"},"Komga ",(0,a.kt)("inlineCode",{parentName:"li"},"0. 95.2+")),(0,a.kt)("li",{parentName:"ul"},"Tachiyomi Komga extension ",(0,a.kt)("inlineCode",{parentName:"li"},"1.2.24+"))),(0,a.kt)("h2",{id:"changelog-and-compatibility"},"Changelog and Compatibility"),(0,a.kt)("p",null,"Each version of the Komga extension need a specific version of the Komga server to work properly. Check the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/inorichi/tachiyomi-extensions/blob/master/src/all/komga/CHANGELOG.md"},"CHANGELOG")," for more information."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5671],{3905:(e,t,i)=>{i.d(t,{Zo:()=>m,kt:()=>h});var r=i(7294);function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function n(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function o(e){for(var t=1;t=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},m=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var i=e.components,a=e.mdxType,n=e.originalType,c=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=l(i),u=a,h=p["".concat(c,".").concat(u)]||p[u]||d[u]||n;return i?r.createElement(h,o(o({ref:t},m),{},{components:i})):r.createElement(h,o({ref:t},m))}));function h(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=i.length,o=new Array(n);o[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var l=2;l{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=i(7462),a=(i(7294),i(3905));const n={},o="Read with Tachiyomi",s={unversionedId:"guides/tachiyomi",id:"guides/tachiyomi",title:"Read with Tachiyomi",description:"Install and configure",source:"@site/docs/guides/tachiyomi.md",sourceDirName:"guides",slug:"/guides/tachiyomi",permalink:"/docs/guides/tachiyomi",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/tachiyomi.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with the Webreader",permalink:"/docs/guides/webreader"},next:{title:"Read with Paperback",permalink:"/docs/guides/paperback"}},c={},l=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Browse",id:"browse",level:2},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}],m={toc:l},p="wrapper";function d(e){let{components:t,...i}=e;return(0,a.kt)(p,(0,r.Z)({},m,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"read-with-tachiyomi"},"Read with Tachiyomi"),(0,a.kt)("h2",{id:"install-and-configure"},"Install and configure"),(0,a.kt)("p",null,"Komga has an official extension for ",(0,a.kt)("a",{parentName:"p",href:"https://tachiyomi.org"},"Tachiyomi"),", available from within Tachiyomi's extension menu."),(0,a.kt)("p",null,"Once installed, the extension will let you configure up to 3 Komga servers."),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-extension-info.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension info"}),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-configuration.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension configuration"}),(0,a.kt)("p",null,"You will need to configure the extension with your ",(0,a.kt)("em",{parentName:"p"},"server address"),", ",(0,a.kt)("em",{parentName:"p"},"username")," and ",(0,a.kt)("em",{parentName:"p"},"password")," before you can use it."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Example server address: ",(0,a.kt)("inlineCode",{parentName:"p"},"http://my.server:25600(/baseUrl)")),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"Note that there is no trailing slash (",(0,a.kt)("inlineCode",{parentName:"strong"},"/"),")."))),(0,a.kt)("h2",{id:"browse"},"Browse"),(0,a.kt)("p",null,"You can browse series, use the filter menu, and search for series."),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-browse.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension browse"}),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-filters.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension filters"}),(0,a.kt)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-search.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension search"}),(0,a.kt)("h2",{id:"track-read-progress"},"Track read progress"),(0,a.kt)("p",null,"Tachiyomi starting from ",(0,a.kt)("inlineCode",{parentName:"p"},"0.12.1")," can keep your read progress in sync with your Komga server. Check the official Tachiyomi website for ",(0,a.kt)("a",{parentName:"p",href:"https://tachiyomi.org/help/guides/tracking/#what-is-tracking"},"instructions"),"."),(0,a.kt)("p",null,"Requirements:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Tachiyomi ",(0,a.kt)("inlineCode",{parentName:"li"},"0.12.1+")),(0,a.kt)("li",{parentName:"ul"},"Komga ",(0,a.kt)("inlineCode",{parentName:"li"},"0. 95.2+")),(0,a.kt)("li",{parentName:"ul"},"Tachiyomi Komga extension ",(0,a.kt)("inlineCode",{parentName:"li"},"1.2.24+"))),(0,a.kt)("h2",{id:"changelog-and-compatibility"},"Changelog and Compatibility"),(0,a.kt)("p",null,"Each version of the Komga extension need a specific version of the Komga server to work properly. Check the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/inorichi/tachiyomi-extensions/blob/master/src/all/komga/CHANGELOG.md"},"CHANGELOG")," for more information."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/97c4f258.ed2d9f8d.js b/assets/js/97c4f258.cc3805d9.js similarity index 99% rename from assets/js/97c4f258.ed2d9f8d.js rename to assets/js/97c4f258.cc3805d9.js index 7bba3b03..3d5d01bf 100644 --- a/assets/js/97c4f258.ed2d9f8d.js +++ b/assets/js/97c4f258.cc3805d9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[305],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function r(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),m=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=m(e.components);return o.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=m(a),u=n,k=p["".concat(s,".").concat(u)]||p[u]||c[u]||i;return a?o.createElement(k,r(r({ref:t},d),{},{components:a})):o.createElement(k,r({ref:t},d))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,r=new Array(i);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:n,r[1]=l;for(var m=2;m{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var o=a(7462),n=(a(7294),a(3905));const i={},r="Configuration options",l={unversionedId:"installation/configuration",id:"installation/configuration",title:"Configuration options",description:"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.",source:"@site/docs/installation/configuration.md",sourceDirName:"installation",slug:"/installation/configuration",permalink:"/docs/installation/configuration",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/configuration.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install via third-party integrations",permalink:"/docs/installation/thirdparty"},next:{title:"Expose your server",permalink:"/docs/installation/https"}},s={},m=[{value:"Optional configuration",id:"optional-configuration",level:2},{value:"KOMGA_CONFIGDIR / komga.config-dir: <directory>",id:"komga_configdir--komgaconfig-dir-directory",level:4},{value:"SERVER_PORT / server.port: <port>",id:"server_port--serverport-port",level:4},{value:"SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: <baseUrl>",id:"server_servlet_context_path--serverservletcontext-path-baseurl",level:4},{value:"SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: <duration>",id:"server_servlet_session_timeout--serverservletsessiontimeout-duration",level:4},{value:"KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: <cron>",id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron",level:4},{value:"KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: <true/false>",id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse",level:4},{value:"KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: <exclusions>",id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions",level:4},{value:"KOMGA_REMEMBERME_KEY / komga.remember-me.key: <key>",id:"komga_rememberme_key--komgaremember-mekey-key",level:4},{value:"KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: <duration>",id:"komga_rememberme_validity--komgaremember-mevalidity-duration",level:4},{value:"KOMGA_SESSIONTIMEOUT / komga.session-timeout: <duration>",id:"komga_sessiontimeout--komgasession-timeout-duration",level:4},{value:"KOMGA_DATABASE_FILE / komga.database.file: <file path>",id:"komga_database_file--komgadatabasefile-file-path",level:4},{value:"KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: <origins>",id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins",level:4},{value:"KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: <true/false>",id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse",level:4},{value:"KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: <true/false>",id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse",level:4},{value:"KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: <true/false>",id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse",level:4},{value:"KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: <true/false>",id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse",level:4},{value:"LOGGING_FILE_NAME / logging.file.name: <logfile name>",id:"logging_file_name--loggingfilename-logfile-name",level:4},{value:"KOMGA_TASKCONSUMERS / komga.task-consumers: <int>",id:"komga_taskconsumers--komgatask-consumers-int",level:4},{value:"KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: <int>",id:"komga_taskconsumersmax--komgatask-consumers-max-int",level:4},{value:"Sample Configuration File",id:"sample-configuration-file",level:2},{value:"Database performance",id:"database-performance",level:2}],d={toc:m},p="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"configuration-options"},"Configuration options"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour."),(0,n.kt)("p",{parentName:"admonition"},"The ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file does not exist by default, you need to create one if you want to customize the configuration.")),(0,n.kt)("p",null,"Komga relies heavily on ",(0,n.kt)("a",{parentName:"p",href:"https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html"},"Spring Boot's configuration"),", leveraging ",(0,n.kt)("inlineCode",{parentName:"p"},"profiles")," and configuration ",(0,n.kt)("inlineCode",{parentName:"p"},"properties"),"."),(0,n.kt)("p",null,"The easiest way to configure is either via environment variables (a good fit for ",(0,n.kt)("inlineCode",{parentName:"p"},"docker")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"docker-compose"),") or by using an ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file located in the configuration directory:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The Docker image will load any ",(0,n.kt)("inlineCode",{parentName:"li"},"application.yml")," file located in the ",(0,n.kt)("inlineCode",{parentName:"li"},"/config")," mounted folder."),(0,n.kt)("li",{parentName:"ul"},"The Jar will load any ",(0,n.kt)("inlineCode",{parentName:"li"},"application.yml")," file located in the ",(0,n.kt)("inlineCode",{parentName:"li"},"komga.config-dir")," directory (defaults to ",(0,n.kt)("inlineCode",{parentName:"li"},"~/.komga"),", ",(0,n.kt)("a",{parentName:"li",href:"#komga-configdir-komga-config-dir-directory"},"more details"),").")),(0,n.kt)("p",null,"Each configuration key can have a different format depending if it's from the environment variable, or from the ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file. In the following section I will provide both format in the form ",(0,n.kt)("inlineCode",{parentName:"p"},"ENVIRONMENT_VARIABLE")," / ",(0,n.kt)("inlineCode",{parentName:"p"},"application-property"),"."),(0,n.kt)("p",null,"You can also specify configuration via the command line, when launching the ",(0,n.kt)("inlineCode",{parentName:"p"},"jar"),". Use the ",(0,n.kt)("inlineCode",{parentName:"p"},"application-property")," form, and prefix with ",(0,n.kt)("inlineCode",{parentName:"p"},"--"),". For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'java -jar komga.jar --server.servlet.context-path="/komga" --server.port=8443\n')),(0,n.kt)("h2",{id:"optional-configuration"},"Optional configuration"),(0,n.kt)("p",null,"You can use some optional configuration keys:"),(0,n.kt)("h4",{id:"komga_configdir--komgaconfig-dir-directory"},"KOMGA_CONFIGDIR / komga.config-dir: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"The Komga configuration directory. Will be used to store the logs, database, and any other file Komga needs."),(0,n.kt)("p",null,"Defaults to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"%LOCALAPPDATA%/Komga")," on the ",(0,n.kt)("em",{parentName:"li"},"Windows app"),". That folder is virtualized by Windows. "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"~/Library/Application Support/Komga")," on the macOS app. "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"~/.komga")," otherwise.")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"~")," is your home directory on Unix, and your User profile on Windows."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"When overriding this configuration, you need to use ",(0,n.kt)("inlineCode",{parentName:"em"},"${user.home}")," instead of ",(0,n.kt)("inlineCode",{parentName:"em"},"~")," (this is a specific Spring Boot variable).")),(0,n.kt)("h4",{id:"server_port--serverport-port"},"SERVER_PORT / server.port: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"Port to listen to for the API and web interface."),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"25600"),"."),(0,n.kt)("h4",{id:"server_servlet_context_path--serverservletcontext-path-baseurl"},"SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"Base URL, useful if you need to reverse proxy with a subfolder."),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"/"),"."),(0,n.kt)("h4",{id:"server_servlet_session_timeout--serverservletsessiontimeout-duration"},"SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"The duration after which an inactive session will expire. You can specify the timeunit, for example ",(0,n.kt)("inlineCode",{parentName:"p"},"14d")," for 14 days, or ",(0,n.kt)("inlineCode",{parentName:"p"},"24h")," for 24 hours. If no unit is set, seconds will be used."),(0,n.kt)("p",null,"Defaults to 30 minutes."),(0,n.kt)("h4",{id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/libraries#scan-interval"},"Library options: scan interval"),"."),(0,n.kt)("h4",{id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/libraries#scan-on-startup"},"Library options: scan on startup"),"."),(0,n.kt)("h4",{id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/libraries#directory-exclusions"},"Library options: directory exclusions"),"."),(0,n.kt)("h4",{id:"komga_rememberme_key--komgaremember-mekey-key"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_REMEMBERME_KEY / komga.remember-me.key: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_rememberme_validity--komgaremember-mevalidity-duration"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_sessiontimeout--komgasession-timeout-duration"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_SESSIONTIMEOUT / komga.session-timeout: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been replaced by ",(0,n.kt)("inlineCode",{parentName:"p"},"server.servlet.session.timeout"),"."),(0,n.kt)("h4",{id:"komga_database_file--komgadatabasefile-file-path"},"KOMGA_DATABASE_FILE / komga.database.file: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"File path for the SQLite database."),(0,n.kt)("p",null,"If you want to change the directory, it is advised to change ",(0,n.kt)("inlineCode",{parentName:"p"},"komga.config-dir")," instead."),(0,n.kt)("p",null,"Defaults to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"/config/database.sqlite")," for ",(0,n.kt)("em",{parentName:"li"},"Docker"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"\\${komga.config-dir}/database.sqlite")," otherwise.")),(0,n.kt)("h4",{id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins"},"KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"A list of origins to allow for CORS."),(0,n.kt)("p",null,"Defaults to empty list."),(0,n.kt)("h4",{id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse"},"KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"A boolean indicating whether Komga should create new users when a login via OAuth2/OIDC succeeds, but there is no existing user with that email."),(0,n.kt)("p",null,"Such users will be created with a random password, which the user can subsequently change from the ",(0,n.kt)("em",{parentName:"p"},"Account Settings")," page later on, for example to be able to connect using OPDS or Tachiyomi."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"It is recommended to enable this only with OAuth2 providers you control")),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,n.kt)("h4",{id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse"},"KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"A boolean indicating whether Komga should check whether the ",(0,n.kt)("inlineCode",{parentName:"p"},"email_verified")," claim is present and true in the OpenID Connect request."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"It is recommended to disable this only with OIDC providers that do not verify emails (like Azure AD)")),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,n.kt)("h4",{id:"logging_file_name--loggingfilename-logfile-name"},"LOGGING_FILE_NAME / logging.file.name: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"Name of the log file."),(0,n.kt)("p",null,"If you want to change the directory, it is advised to change ",(0,n.kt)("inlineCode",{parentName:"p"},"komga.config-dir")," instead."),(0,n.kt)("p",null,"Defaults to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"~/Library/Logs/Komga/komga.log")," for the ",(0,n.kt)("em",{parentName:"li"},"macOS app"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"/config/logs/komga.log")," for ",(0,n.kt)("em",{parentName:"li"},"Docker"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"\\${komga.config-dir}/komga.log")," otherwise.")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"~")," is your home directory on Unix, and your User profile on Windows."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"When overriding this configuration, you need to use ",(0,n.kt)("inlineCode",{parentName:"em"},"${user.home}")," instead of ",(0,n.kt)("inlineCode",{parentName:"em"},"~")," (this is a specific Spring Boot variable).")),(0,n.kt)("h4",{id:"komga_taskconsumers--komgatask-consumers-int"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_TASKCONSUMERS / komga.task-consumers: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been removed."),(0,n.kt)("h4",{id:"komga_taskconsumersmax--komgatask-consumers-max-int"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been removed."),(0,n.kt)("h2",{id:"sample-configuration-file"},"Sample Configuration File"),(0,n.kt)("p",null,"Here is a sample ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file in case you need to customize it. Keep only the lines you need."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"# Only keep lines that are relevant to you!\n# Lines starting with # are comments\n# Make sure indentation is correct (2 spaces at every indentation level), yaml is very sensitive!\nkomga:\n database:\n file: ${user.home}/.komga/database.sqlite\n cors.allowed-origins:\n - http://localhost:8081\n - http://localhost:8082\n delete-empty-collections: true\n delete-empty-read-lists: true\nserver:\n port: 25600\n servlet:\n session.timeout: 7d # session timeout, here 7 days\n context-path: /komga\n")),(0,n.kt)("h2",{id:"database-performance"},"Database performance"),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Use at your own risk!")),(0,n.kt)("p",null,"Some specific configuration keys are available to tweak the database performance."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"komga:\n database:\n # sets the retry timeout when SQLITE_BUSY error happens\n busy-timeout: 30s\n \n # changes the journal mode\n # accepted values are: DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF\n # most likely to be set to wal if needed, check https://sqlite.org/wal.html for more details\n journal-mode: wal\n \n # pool size will determine the number of connections in the pool\n # this takes precedence over max-pool-size if set\n # defaults to undefined\n pool-size: 1\n \n # max-pool-size will determine the maximum number of connections in the pool\n # when set, the number of connections is set to the number of available processors capped at max-pool-size\n # defaults to 1\n max-pool-size: 8\n \n # pragmas accepts a list of key/value pairs where:\n # - key is the pragma name (see https://www.sqlite.org/pragma.html)\n # - value is the pragma value\n pragmas:\n # here are some example pragmas\n page_size: 1024\n synchronous: OFF\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[305],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function r(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),m=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=m(e.components);return o.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=m(a),u=n,k=p["".concat(s,".").concat(u)]||p[u]||c[u]||i;return a?o.createElement(k,r(r({ref:t},d),{},{components:a})):o.createElement(k,r({ref:t},d))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,r=new Array(i);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:n,r[1]=l;for(var m=2;m{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var o=a(7462),n=(a(7294),a(3905));const i={},r="Configuration options",l={unversionedId:"installation/configuration",id:"installation/configuration",title:"Configuration options",description:"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.",source:"@site/docs/installation/configuration.md",sourceDirName:"installation",slug:"/installation/configuration",permalink:"/docs/installation/configuration",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/configuration.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install via third-party integrations",permalink:"/docs/installation/thirdparty"},next:{title:"Expose your server",permalink:"/docs/installation/https"}},s={},m=[{value:"Optional configuration",id:"optional-configuration",level:2},{value:"KOMGA_CONFIGDIR / komga.config-dir: <directory>",id:"komga_configdir--komgaconfig-dir-directory",level:4},{value:"SERVER_PORT / server.port: <port>",id:"server_port--serverport-port",level:4},{value:"SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: <baseUrl>",id:"server_servlet_context_path--serverservletcontext-path-baseurl",level:4},{value:"SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: <duration>",id:"server_servlet_session_timeout--serverservletsessiontimeout-duration",level:4},{value:"KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: <cron>",id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron",level:4},{value:"KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: <true/false>",id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse",level:4},{value:"KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: <exclusions>",id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions",level:4},{value:"KOMGA_REMEMBERME_KEY / komga.remember-me.key: <key>",id:"komga_rememberme_key--komgaremember-mekey-key",level:4},{value:"KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: <duration>",id:"komga_rememberme_validity--komgaremember-mevalidity-duration",level:4},{value:"KOMGA_SESSIONTIMEOUT / komga.session-timeout: <duration>",id:"komga_sessiontimeout--komgasession-timeout-duration",level:4},{value:"KOMGA_DATABASE_FILE / komga.database.file: <file path>",id:"komga_database_file--komgadatabasefile-file-path",level:4},{value:"KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: <origins>",id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins",level:4},{value:"KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: <true/false>",id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse",level:4},{value:"KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: <true/false>",id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse",level:4},{value:"KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: <true/false>",id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse",level:4},{value:"KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: <true/false>",id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse",level:4},{value:"LOGGING_FILE_NAME / logging.file.name: <logfile name>",id:"logging_file_name--loggingfilename-logfile-name",level:4},{value:"KOMGA_TASKCONSUMERS / komga.task-consumers: <int>",id:"komga_taskconsumers--komgatask-consumers-int",level:4},{value:"KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: <int>",id:"komga_taskconsumersmax--komgatask-consumers-max-int",level:4},{value:"Sample Configuration File",id:"sample-configuration-file",level:2},{value:"Database performance",id:"database-performance",level:2}],d={toc:m},p="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"configuration-options"},"Configuration options"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour."),(0,n.kt)("p",{parentName:"admonition"},"The ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file does not exist by default, you need to create one if you want to customize the configuration.")),(0,n.kt)("p",null,"Komga relies heavily on ",(0,n.kt)("a",{parentName:"p",href:"https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html"},"Spring Boot's configuration"),", leveraging ",(0,n.kt)("inlineCode",{parentName:"p"},"profiles")," and configuration ",(0,n.kt)("inlineCode",{parentName:"p"},"properties"),"."),(0,n.kt)("p",null,"The easiest way to configure is either via environment variables (a good fit for ",(0,n.kt)("inlineCode",{parentName:"p"},"docker")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"docker-compose"),") or by using an ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file located in the configuration directory:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The Docker image will load any ",(0,n.kt)("inlineCode",{parentName:"li"},"application.yml")," file located in the ",(0,n.kt)("inlineCode",{parentName:"li"},"/config")," mounted folder."),(0,n.kt)("li",{parentName:"ul"},"The Jar will load any ",(0,n.kt)("inlineCode",{parentName:"li"},"application.yml")," file located in the ",(0,n.kt)("inlineCode",{parentName:"li"},"komga.config-dir")," directory (defaults to ",(0,n.kt)("inlineCode",{parentName:"li"},"~/.komga"),", ",(0,n.kt)("a",{parentName:"li",href:"#komga-configdir-komga-config-dir-directory"},"more details"),").")),(0,n.kt)("p",null,"Each configuration key can have a different format depending if it's from the environment variable, or from the ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file. In the following section I will provide both format in the form ",(0,n.kt)("inlineCode",{parentName:"p"},"ENVIRONMENT_VARIABLE")," / ",(0,n.kt)("inlineCode",{parentName:"p"},"application-property"),"."),(0,n.kt)("p",null,"You can also specify configuration via the command line, when launching the ",(0,n.kt)("inlineCode",{parentName:"p"},"jar"),". Use the ",(0,n.kt)("inlineCode",{parentName:"p"},"application-property")," form, and prefix with ",(0,n.kt)("inlineCode",{parentName:"p"},"--"),". For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'java -jar komga.jar --server.servlet.context-path="/komga" --server.port=8443\n')),(0,n.kt)("h2",{id:"optional-configuration"},"Optional configuration"),(0,n.kt)("p",null,"You can use some optional configuration keys:"),(0,n.kt)("h4",{id:"komga_configdir--komgaconfig-dir-directory"},"KOMGA_CONFIGDIR / komga.config-dir: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"The Komga configuration directory. Will be used to store the logs, database, and any other file Komga needs."),(0,n.kt)("p",null,"Defaults to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"%LOCALAPPDATA%/Komga")," on the ",(0,n.kt)("em",{parentName:"li"},"Windows app"),". That folder is virtualized by Windows. "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"~/Library/Application Support/Komga")," on the macOS app. "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"~/.komga")," otherwise.")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"~")," is your home directory on Unix, and your User profile on Windows."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"When overriding this configuration, you need to use ",(0,n.kt)("inlineCode",{parentName:"em"},"${user.home}")," instead of ",(0,n.kt)("inlineCode",{parentName:"em"},"~")," (this is a specific Spring Boot variable).")),(0,n.kt)("h4",{id:"server_port--serverport-port"},"SERVER_PORT / server.port: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"Port to listen to for the API and web interface."),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"25600"),"."),(0,n.kt)("h4",{id:"server_servlet_context_path--serverservletcontext-path-baseurl"},"SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"Base URL, useful if you need to reverse proxy with a subfolder."),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"/"),"."),(0,n.kt)("h4",{id:"server_servlet_session_timeout--serverservletsessiontimeout-duration"},"SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"The duration after which an inactive session will expire. You can specify the timeunit, for example ",(0,n.kt)("inlineCode",{parentName:"p"},"14d")," for 14 days, or ",(0,n.kt)("inlineCode",{parentName:"p"},"24h")," for 24 hours. If no unit is set, seconds will be used."),(0,n.kt)("p",null,"Defaults to 30 minutes."),(0,n.kt)("h4",{id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/libraries#scan-interval"},"Library options: scan interval"),"."),(0,n.kt)("h4",{id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/libraries#scan-on-startup"},"Library options: scan on startup"),"."),(0,n.kt)("h4",{id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to ",(0,n.kt)("a",{parentName:"p",href:"/docs/guides/libraries#directory-exclusions"},"Library options: directory exclusions"),"."),(0,n.kt)("h4",{id:"komga_rememberme_key--komgaremember-mekey-key"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_REMEMBERME_KEY / komga.remember-me.key: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_rememberme_validity--komgaremember-mevalidity-duration"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_sessiontimeout--komgasession-timeout-duration"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_SESSIONTIMEOUT / komga.session-timeout: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been replaced by ",(0,n.kt)("inlineCode",{parentName:"p"},"server.servlet.session.timeout"),"."),(0,n.kt)("h4",{id:"komga_database_file--komgadatabasefile-file-path"},"KOMGA_DATABASE_FILE / komga.database.file: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"File path for the SQLite database."),(0,n.kt)("p",null,"If you want to change the directory, it is advised to change ",(0,n.kt)("inlineCode",{parentName:"p"},"komga.config-dir")," instead."),(0,n.kt)("p",null,"Defaults to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"/config/database.sqlite")," for ",(0,n.kt)("em",{parentName:"li"},"Docker"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"\\${komga.config-dir}/database.sqlite")," otherwise.")),(0,n.kt)("h4",{id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins"},"KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"A list of origins to allow for CORS."),(0,n.kt)("p",null,"Defaults to empty list."),(0,n.kt)("h4",{id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been moved to Server Settings."),(0,n.kt)("h4",{id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse"},"KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"A boolean indicating whether Komga should create new users when a login via OAuth2/OIDC succeeds, but there is no existing user with that email."),(0,n.kt)("p",null,"Such users will be created with a random password, which the user can subsequently change from the ",(0,n.kt)("em",{parentName:"p"},"Account Settings")," page later on, for example to be able to connect using OPDS or Tachiyomi."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"It is recommended to enable this only with OAuth2 providers you control")),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,n.kt)("h4",{id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse"},"KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"A boolean indicating whether Komga should check whether the ",(0,n.kt)("inlineCode",{parentName:"p"},"email_verified")," claim is present and true in the OpenID Connect request."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"It is recommended to disable this only with OIDC providers that do not verify emails (like Azure AD)")),(0,n.kt)("p",null,"Defaults to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,n.kt)("h4",{id:"logging_file_name--loggingfilename-logfile-name"},"LOGGING_FILE_NAME / logging.file.name: ",(0,n.kt)("inlineCode",{parentName:"h4"},"")),(0,n.kt)("p",null,"Name of the log file."),(0,n.kt)("p",null,"If you want to change the directory, it is advised to change ",(0,n.kt)("inlineCode",{parentName:"p"},"komga.config-dir")," instead."),(0,n.kt)("p",null,"Defaults to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"~/Library/Logs/Komga/komga.log")," for the ",(0,n.kt)("em",{parentName:"li"},"macOS app"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"/config/logs/komga.log")," for ",(0,n.kt)("em",{parentName:"li"},"Docker"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"\\${komga.config-dir}/komga.log")," otherwise.")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"~")," is your home directory on Unix, and your User profile on Windows."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"When overriding this configuration, you need to use ",(0,n.kt)("inlineCode",{parentName:"em"},"${user.home}")," instead of ",(0,n.kt)("inlineCode",{parentName:"em"},"~")," (this is a specific Spring Boot variable).")),(0,n.kt)("h4",{id:"komga_taskconsumers--komgatask-consumers-int"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_TASKCONSUMERS / komga.task-consumers: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been removed."),(0,n.kt)("h4",{id:"komga_taskconsumersmax--komgatask-consumers-max-int"},(0,n.kt)("del",{parentName:"h4"},"KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: ",(0,n.kt)("inlineCode",{parentName:"del"},""))),(0,n.kt)("p",null,"This has been removed."),(0,n.kt)("h2",{id:"sample-configuration-file"},"Sample Configuration File"),(0,n.kt)("p",null,"Here is a sample ",(0,n.kt)("inlineCode",{parentName:"p"},"application.yml")," file in case you need to customize it. Keep only the lines you need."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"# Only keep lines that are relevant to you!\n# Lines starting with # are comments\n# Make sure indentation is correct (2 spaces at every indentation level), yaml is very sensitive!\nkomga:\n database:\n file: ${user.home}/.komga/database.sqlite\n cors.allowed-origins:\n - http://localhost:8081\n - http://localhost:8082\n delete-empty-collections: true\n delete-empty-read-lists: true\nserver:\n port: 25600\n servlet:\n session.timeout: 7d # session timeout, here 7 days\n context-path: /komga\n")),(0,n.kt)("h2",{id:"database-performance"},"Database performance"),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Use at your own risk!")),(0,n.kt)("p",null,"Some specific configuration keys are available to tweak the database performance."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"komga:\n database:\n # sets the retry timeout when SQLITE_BUSY error happens\n busy-timeout: 30s\n \n # changes the journal mode\n # accepted values are: DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF\n # most likely to be set to wal if needed, check https://sqlite.org/wal.html for more details\n journal-mode: wal\n \n # pool size will determine the number of connections in the pool\n # this takes precedence over max-pool-size if set\n # defaults to undefined\n pool-size: 1\n \n # max-pool-size will determine the maximum number of connections in the pool\n # when set, the number of connections is set to the number of available processors capped at max-pool-size\n # defaults to 1\n max-pool-size: 8\n \n # pragmas accepts a list of key/value pairs where:\n # - key is the pragma name (see https://www.sqlite.org/pragma.html)\n # - value is the pragma value\n pragmas:\n # here are some example pragmas\n page_size: 1024\n synchronous: OFF\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/98ce5054.079c67f0.js b/assets/js/98ce5054.1896c6d6.js similarity index 97% rename from assets/js/98ce5054.079c67f0.js rename to assets/js/98ce5054.1896c6d6.js index 374316b7..dacca248 100644 --- a/assets/js/98ce5054.079c67f0.js +++ b/assets/js/98ce5054.1896c6d6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[8209],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,k=c["".concat(i,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(k,l(l({ref:t},u),{},{components:r})):n.createElement(k,l({ref:t},u))}));function k(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:o,l[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={},l="Local Artwork Assets",s={unversionedId:"guides/local-artwork-assets",id:"guides/local-artwork-assets",title:"Local Artwork Assets",description:"Supported Artwork Image Formats",source:"@site/docs/guides/local-artwork-assets.md",sourceDirName:"guides",slug:"/guides/local-artwork-assets",permalink:"/docs/guides/local-artwork-assets",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/local-artwork-assets.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"},next:{title:"User accounts",permalink:"/docs/guides/user-accounts"}},i={},p=[{value:"Supported Artwork Image Formats",id:"supported-artwork-image-formats",level:2},{value:"Poster Artwork",id:"poster-artwork",level:2},{value:"Books",id:"books",level:4},{value:"Series",id:"series",level:4}],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"local-artwork-assets"},"Local Artwork Assets"),(0,o.kt)("h2",{id:"supported-artwork-image-formats"},"Supported Artwork Image Formats"),(0,o.kt)("p",null,"There are a number of supported custom media items that need to be named correctly to be detected. The supported image file formats are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"jpg"),(0,o.kt)("li",{parentName:"ul"},"jpeg"),(0,o.kt)("li",{parentName:"ul"},"png"),(0,o.kt)("li",{parentName:"ul"},"webp"),(0,o.kt)("li",{parentName:"ul"},"tbn")),(0,o.kt)("h2",{id:"poster-artwork"},"Poster Artwork"),(0,o.kt)("p",null,"Posters are typically displayed for books, series and collections on dashboards, library views, and when looking at details for the element. Poster art is typically of 21:29.7 aspect ratio. Custom Poster artwork will be detected and used if named and stored as follows."),(0,o.kt)("h4",{id:"books"},"Books"),(0,o.kt)("p",null,"Custom poster must have the same name as the book file:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Exact book name.ext"))),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ext")," is the file extension."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/Series\n Book 10.cbz\n Book 10.jpg\n")),(0,o.kt)("p",null,"More than one poster image can be included. For multiple items to be scanned, they should be named as follows:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Exact book name-X.ext"))),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"-X")," is a number."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/Series\n Book 12.cbz\n Book 12-1.jpg\n Book 12-2.png\n")),(0,o.kt)("h4",{id:"series"},"Series"),(0,o.kt)("p",null,"Custom poster must be located in the Series directory and named as follows:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"cover.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"default.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"folder.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"series.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"poster.ext"))),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ext")," is the file extension."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/Series\n poster.jpg\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[8209],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,k=c["".concat(i,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(k,l(l({ref:t},u),{},{components:r})):n.createElement(k,l({ref:t},u))}));function k(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:o,l[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={},l="Local Artwork Assets",s={unversionedId:"guides/local-artwork-assets",id:"guides/local-artwork-assets",title:"Local Artwork Assets",description:"Supported Artwork Image Formats",source:"@site/docs/guides/local-artwork-assets.md",sourceDirName:"guides",slug:"/guides/local-artwork-assets",permalink:"/docs/guides/local-artwork-assets",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/local-artwork-assets.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"},next:{title:"User accounts",permalink:"/docs/guides/user-accounts"}},i={},p=[{value:"Supported Artwork Image Formats",id:"supported-artwork-image-formats",level:2},{value:"Poster Artwork",id:"poster-artwork",level:2},{value:"Books",id:"books",level:4},{value:"Series",id:"series",level:4}],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"local-artwork-assets"},"Local Artwork Assets"),(0,o.kt)("h2",{id:"supported-artwork-image-formats"},"Supported Artwork Image Formats"),(0,o.kt)("p",null,"There are a number of supported custom media items that need to be named correctly to be detected. The supported image file formats are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"jpg"),(0,o.kt)("li",{parentName:"ul"},"jpeg"),(0,o.kt)("li",{parentName:"ul"},"png"),(0,o.kt)("li",{parentName:"ul"},"webp"),(0,o.kt)("li",{parentName:"ul"},"tbn")),(0,o.kt)("h2",{id:"poster-artwork"},"Poster Artwork"),(0,o.kt)("p",null,"Posters are typically displayed for books, series and collections on dashboards, library views, and when looking at details for the element. Poster art is typically of 21:29.7 aspect ratio. Custom Poster artwork will be detected and used if named and stored as follows."),(0,o.kt)("h4",{id:"books"},"Books"),(0,o.kt)("p",null,"Custom poster must have the same name as the book file:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Exact book name.ext"))),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ext")," is the file extension."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/Series\n Book 10.cbz\n Book 10.jpg\n")),(0,o.kt)("p",null,"More than one poster image can be included. For multiple items to be scanned, they should be named as follows:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Exact book name-X.ext"))),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"-X")," is a number."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/Series\n Book 12.cbz\n Book 12-1.jpg\n Book 12-2.png\n")),(0,o.kt)("h4",{id:"series"},"Series"),(0,o.kt)("p",null,"Custom poster must be located in the Series directory and named as follows:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"cover.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"default.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"folder.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"series.ext")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"poster.ext"))),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ext")," is the file extension."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/Series\n poster.jpg\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a09c2993.1d17d050.js b/assets/js/a09c2993.9499458c.js similarity index 97% rename from assets/js/a09c2993.1d17d050.js rename to assets/js/a09c2993.9499458c.js index aba677b6..4bdfdb5d 100644 --- a/assets/js/a09c2993.1d17d050.js +++ b/assets/js/a09c2993.9499458c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4128],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),m=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=m(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=m(n),d=a,k=p["".concat(s,".").concat(d)]||p[d]||u[d]||o;return n?r.createElement(k,i(i({ref:t},c),{},{components:n})):r.createElement(k,i({ref:t},c))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:a,i[1]=l;for(var m=2;m{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var r=n(7462),a=(n(7294),n(3905));const o={},i="Introduction",l={unversionedId:"introduction",id:"introduction",title:"Introduction",description:"What is Komga?",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/docs/introduction",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/introduction.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",next:{title:"Installation",permalink:"/docs/category/installation"}},s={},m=[{value:"What is Komga?",id:"what-is-komga",level:2},{value:"What media and devices work?",id:"what-media-and-devices-work",level:2},{value:"Komga supports these media file types",id:"komga-supports-these-media-file-types",level:3},{value:"Komga server compatibility",id:"komga-server-compatibility",level:3},{value:"Demo",id:"demo",level:2}],c={toc:m},p="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"introduction"},"Introduction"),(0,a.kt)("h2",{id:"what-is-komga"},"What is Komga?"),(0,a.kt)("p",null,"Komga is a media server for your comics, mangas, BDs and magazines."),(0,a.kt)("p",null,"How it works:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Install and run Komga on a computer or NAS."),(0,a.kt)("li",{parentName:"ol"},"Add libraries by type of content and let Komga do the rest."),(0,a.kt)("li",{parentName:"ol"},"Use the web interface or any compatible client."),(0,a.kt)("li",{parentName:"ol"},"Enjoy your books!")),(0,a.kt)("h2",{id:"what-media-and-devices-work"},"What media and devices work?"),(0,a.kt)("h3",{id:"komga-supports-these-media-file-types"},"Komga supports these media file types"),(0,a.kt)("p",null,"Komga supports the following file types:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Comic book archives: ",(0,a.kt)("em",{parentName:"li"},"CBZ")," and ",(0,a.kt)("em",{parentName:"li"},"CBR")," (except RAR5 and solid archives)"),(0,a.kt)("li",{parentName:"ul"},"Comic books in ",(0,a.kt)("em",{parentName:"li"},"EPUB")," format (only images)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"PDF")," files")),(0,a.kt)("h3",{id:"komga-server-compatibility"},"Komga server compatibility"),(0,a.kt)("p",null,"Komga can run on any system that can run Java or Docker:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Windows"),(0,a.kt)("li",{parentName:"ul"},"macOS"),(0,a.kt)("li",{parentName:"ul"},"Linux"),(0,a.kt)("li",{parentName:"ul"},"Many popular NAS devices such as QNAP, Synology and more")),(0,a.kt)("h2",{id:"demo"},"Demo"),(0,a.kt)("p",null,"A demonstration website is available at: ",(0,a.kt)("a",{parentName:"p",href:"https://demo.komga.org"},"https://demo.komga.org")),(0,a.kt)("p",null,"You can log in using the following credentials:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Login: ",(0,a.kt)("inlineCode",{parentName:"li"},"demo@komga.org")),(0,a.kt)("li",{parentName:"ul"},"Password: ",(0,a.kt)("inlineCode",{parentName:"li"},"komga-demo"))))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4128],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),m=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=m(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=m(n),d=a,k=p["".concat(s,".").concat(d)]||p[d]||u[d]||o;return n?r.createElement(k,i(i({ref:t},c),{},{components:n})):r.createElement(k,i({ref:t},c))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:a,i[1]=l;for(var m=2;m{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var r=n(7462),a=(n(7294),n(3905));const o={},i="Introduction",l={unversionedId:"introduction",id:"introduction",title:"Introduction",description:"What is Komga?",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/docs/introduction",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/introduction.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",next:{title:"Installation",permalink:"/docs/category/installation"}},s={},m=[{value:"What is Komga?",id:"what-is-komga",level:2},{value:"What media and devices work?",id:"what-media-and-devices-work",level:2},{value:"Komga supports these media file types",id:"komga-supports-these-media-file-types",level:3},{value:"Komga server compatibility",id:"komga-server-compatibility",level:3},{value:"Demo",id:"demo",level:2}],c={toc:m},p="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"introduction"},"Introduction"),(0,a.kt)("h2",{id:"what-is-komga"},"What is Komga?"),(0,a.kt)("p",null,"Komga is a media server for your comics, mangas, BDs and magazines."),(0,a.kt)("p",null,"How it works:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Install and run Komga on a computer or NAS."),(0,a.kt)("li",{parentName:"ol"},"Add libraries by type of content and let Komga do the rest."),(0,a.kt)("li",{parentName:"ol"},"Use the web interface or any compatible client."),(0,a.kt)("li",{parentName:"ol"},"Enjoy your books!")),(0,a.kt)("h2",{id:"what-media-and-devices-work"},"What media and devices work?"),(0,a.kt)("h3",{id:"komga-supports-these-media-file-types"},"Komga supports these media file types"),(0,a.kt)("p",null,"Komga supports the following file types:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Comic book archives: ",(0,a.kt)("em",{parentName:"li"},"CBZ")," and ",(0,a.kt)("em",{parentName:"li"},"CBR")," (except RAR5 and solid archives)"),(0,a.kt)("li",{parentName:"ul"},"Comic books in ",(0,a.kt)("em",{parentName:"li"},"EPUB")," format (only images)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"PDF")," files")),(0,a.kt)("h3",{id:"komga-server-compatibility"},"Komga server compatibility"),(0,a.kt)("p",null,"Komga can run on any system that can run Java or Docker:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Windows"),(0,a.kt)("li",{parentName:"ul"},"macOS"),(0,a.kt)("li",{parentName:"ul"},"Linux"),(0,a.kt)("li",{parentName:"ul"},"Many popular NAS devices such as QNAP, Synology and more")),(0,a.kt)("h2",{id:"demo"},"Demo"),(0,a.kt)("p",null,"A demonstration website is available at: ",(0,a.kt)("a",{parentName:"p",href:"https://demo.komga.org"},"https://demo.komga.org")),(0,a.kt)("p",null,"You can log in using the following credentials:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Login: ",(0,a.kt)("inlineCode",{parentName:"li"},"demo@komga.org")),(0,a.kt)("li",{parentName:"ul"},"Password: ",(0,a.kt)("inlineCode",{parentName:"li"},"komga-demo"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a22ccb60.04e98b36.js b/assets/js/a22ccb60.44571486.js similarity index 98% rename from assets/js/a22ccb60.04e98b36.js rename to assets/js/a22ccb60.44571486.js index b37a9ac6..f0ed02f9 100644 --- a/assets/js/a22ccb60.04e98b36.js +++ b/assets/js/a22ccb60.44571486.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9353],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),s=c(r),m=i,f=s["".concat(l,".").concat(m)]||s[m]||u[m]||a;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[s]="string"==typeof e?e:i,o[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),i=(r(7294),r(3905));const a={},o="Deprecation",p={unversionedId:"api/deprecation",id:"api/deprecation",title:"Deprecation",description:"To be removed in 2.0.0",source:"@site/docs/api/deprecation.md",sourceDirName:"api",slug:"/api/deprecation",permalink:"/docs/api/deprecation",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/deprecation.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"api",previous:{title:"REST API",permalink:"/docs/api/rest"}},l={},c=[{value:"To be removed in 2.0.0",id:"to-be-removed-in-200",level:2},{value:"PUT /api/v1/libraries/{libraryId}",id:"put-apiv1librarieslibraryid",level:3}],d={toc:c},s="wrapper";function u(e){let{components:t,...r}=e;return(0,i.kt)(s,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"deprecation"},"Deprecation"),(0,i.kt)("h2",{id:"to-be-removed-in-200"},"To be removed in 2.0.0"),(0,i.kt)("p",null,"The following API endpoints will be removed in version ",(0,i.kt)("inlineCode",{parentName:"p"},"2.0.0"),"."),(0,i.kt)("h3",{id:"put-apiv1librarieslibraryid"},"PUT /api/v1/libraries/{libraryId}"),(0,i.kt)("p",null,"Deprecated since version: ",(0,i.kt)("inlineCode",{parentName:"p"},"1.3.0")),(0,i.kt)("p",null,"Use ",(0,i.kt)("inlineCode",{parentName:"p"},"PATCH /api/v1/libraries/{libraryId}")," instead, without any change needed. The ",(0,i.kt)("inlineCode",{parentName:"p"},"PUT")," endpoint redirects to the ",(0,i.kt)("inlineCode",{parentName:"p"},"PATCH")," endpoint internally."),(0,i.kt)("p",null,"The endpoint now accepts a partial DTO, and will only update fields that are present."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[9353],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),s=c(r),m=i,f=s["".concat(l,".").concat(m)]||s[m]||u[m]||a;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[s]="string"==typeof e?e:i,o[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),i=(r(7294),r(3905));const a={},o="Deprecation",p={unversionedId:"api/deprecation",id:"api/deprecation",title:"Deprecation",description:"To be removed in 2.0.0",source:"@site/docs/api/deprecation.md",sourceDirName:"api",slug:"/api/deprecation",permalink:"/docs/api/deprecation",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/deprecation.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"api",previous:{title:"REST API",permalink:"/docs/api/rest"}},l={},c=[{value:"To be removed in 2.0.0",id:"to-be-removed-in-200",level:2},{value:"PUT /api/v1/libraries/{libraryId}",id:"put-apiv1librarieslibraryid",level:3}],d={toc:c},s="wrapper";function u(e){let{components:t,...r}=e;return(0,i.kt)(s,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"deprecation"},"Deprecation"),(0,i.kt)("h2",{id:"to-be-removed-in-200"},"To be removed in 2.0.0"),(0,i.kt)("p",null,"The following API endpoints will be removed in version ",(0,i.kt)("inlineCode",{parentName:"p"},"2.0.0"),"."),(0,i.kt)("h3",{id:"put-apiv1librarieslibraryid"},"PUT /api/v1/libraries/{libraryId}"),(0,i.kt)("p",null,"Deprecated since version: ",(0,i.kt)("inlineCode",{parentName:"p"},"1.3.0")),(0,i.kt)("p",null,"Use ",(0,i.kt)("inlineCode",{parentName:"p"},"PATCH /api/v1/libraries/{libraryId}")," instead, without any change needed. The ",(0,i.kt)("inlineCode",{parentName:"p"},"PUT")," endpoint redirects to the ",(0,i.kt)("inlineCode",{parentName:"p"},"PATCH")," endpoint internally."),(0,i.kt)("p",null,"The endpoint now accepts a partial DTO, and will only update fields that are present."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a624e12b.3f71bac2.js b/assets/js/a624e12b.882a638f.js similarity index 98% rename from assets/js/a624e12b.3f71bac2.js rename to assets/js/a624e12b.882a638f.js index 5ded2591..65a9e6dc 100644 --- a/assets/js/a624e12b.3f71bac2.js +++ b/assets/js/a624e12b.882a638f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3287],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),c=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},s=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,m=u["".concat(p,".").concat(h)]||u[h]||d[h]||i;return n?o.createElement(m,r(r({ref:t},s),{},{components:n})):o.createElement(m,r({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,r[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));const i={},r="Social login",l={unversionedId:"installation/oauth2",id:"installation/oauth2",title:"Social login",description:"Komga supports social login via OAuth2 and OpenID Connect. In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users.",source:"@site/docs/installation/oauth2.md",sourceDirName:"installation",slug:"/installation/oauth2",permalink:"/docs/installation/oauth2",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/oauth2.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Expose your server",permalink:"/docs/installation/https"},next:{title:"Google Drive and rclone",permalink:"/docs/installation/gdrive"}},p={},c=[{value:"Guide for common providers",id:"guide-for-common-providers",level:2},{value:"Google",id:"google",level:3},{value:"Facebook",id:"facebook",level:3},{value:"Github",id:"github",level:3},{value:"Advanced configuration",id:"advanced-configuration",level:2}],s={toc:c},u="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,o.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"social-login"},"Social login"),(0,a.kt)("p",null,"Komga supports social login via ",(0,a.kt)("strong",{parentName:"p"},"OAuth2")," and ",(0,a.kt)("strong",{parentName:"p"},"OpenID Connect"),". In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users."),(0,a.kt)("p",null,"In order to setup social login, you will need to create an application in the developer portal of the social login provider of your choice (Google, Facebook, Github\u2026), and retrieve a ",(0,a.kt)("em",{parentName:"p"},"Client ID")," and ",(0,a.kt)("em",{parentName:"p"},"Client Secret"),". You will also need to configure a ",(0,a.kt)("em",{parentName:"p"},"Redirect URI")," in the application you created."),(0,a.kt)("p",null,"You can enable automatic account creation upon successful social login, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/installation/configuration#komga-oauth2-account-creation-komga-oauth2-account-creation-true-false"},"here")," for more details."),(0,a.kt)("h2",{id:"guide-for-common-providers"},"Guide for common providers"),(0,a.kt)("p",null,"You can easily configure Google, Github, and Facebook without any complex configuration."),(0,a.kt)("h3",{id:"google"},"Google"),(0,a.kt)("p",null,"Follow the instructions on the ",(0,a.kt)("a",{parentName:"p",href:"https://developers.google.com/identity/protocols/OpenIDConnect"},"OpenID Connect page"),', starting in the section, "Setting up OAuth 2.0".'),(0,a.kt)("p",null,'When asked for a "Redirect URI", use ',(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/google"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address."),(0,a.kt)("p",null,'After completing the "Obtain OAuth 2.0 credentials" instructions, you should have a new OAuth Client with credentials consisting of a Client ID and a Client Secret.'),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with the OAuth 2.0 credentials you created earlier."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spring:\n security:\n oauth2:\n client:\n registration:\n google:\n client-id: 1044613984fsf335-mnsdvkjy3yf98294unfmnvd8.apps.googleusercontent.com\n client-secret: jwhfkjhwefkn44t8vcxml3m\n")),(0,a.kt)("h3",{id:"facebook"},"Facebook"),(0,a.kt)("p",null,"Follow the ",(0,a.kt)("a",{parentName:"p",href:"https://developers.facebook.com/docs/development/register"},"instructions")," to create an App, and add the Facebook Login product."),(0,a.kt)("p",null,"In the ",(0,a.kt)("inlineCode",{parentName:"p"},"Valid OAuth Redirect URIs"),", use ",(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/facebook"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address."),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with the App ID and App Secret."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spring:\n security:\n oauth2:\n client:\n registration:\n facebook:\n client-id: 227581266063919\n client-secret: 47f03915334f49cdueru810069321964929\n")),(0,a.kt)("h3",{id:"github"},"Github"),(0,a.kt)("p",null,"Register a ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/settings/applications/new"},"new application"),"."),(0,a.kt)("p",null,'For the "Authorization callback URL", use ',(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/github"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address."),(0,a.kt)("p",null,"Generate a new Client Secret, you should now have a Client ID and Client Secret."),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with the OAuth 2.0 credentials you created earlier."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spring:\n security:\n oauth2:\n client:\n registration:\n github:\n client-id: 62736jnfksui37384hnmsdnf\n client-secret: jhjgfy67363uhif762328938844940e3e8c8629c18f9\n scope: user:email\n")),(0,a.kt)("h2",{id:"advanced-configuration"},"Advanced configuration"),(0,a.kt)("p",null,"You can configure any OAuth2 provider, but you will need to provide a more extensive configuration. The below example shows how to configure a Keycloak instance, but any provider could be configured in a similar fashion."),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with your credentials You will also need to update the various URIs in the ",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," section."),(0,a.kt)("p",null,"You need to make sure that the users have an email setup, and that it has been marked as verified."),(0,a.kt)("p",null,"When configuring the client in your provider, you may need to input a redirect URI. Use the following: ",(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/{registrationId}"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address, and ",(0,a.kt)("inlineCode",{parentName:"p"},"registrationId")," is the name of the configuration key (",(0,a.kt)("inlineCode",{parentName:"p"},"keycloak")," in the below example)."),(0,a.kt)("p",null,"There are 2 options to configure a provider, either set ",(0,a.kt)("inlineCode",{parentName:"p"},"issuer-uri")," or all of the following: ",(0,a.kt)("inlineCode",{parentName:"p"},"authorization-uri"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"token-uri"),",\n",(0,a.kt)("inlineCode",{parentName:"p"},"jwk-set-uri"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"user-info-uri"),". If your authentication server provides ",(0,a.kt)("inlineCode",{parentName:"p"},"issuer-uri"),", this option is preferred."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"registration")," section contains a ",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," option, this must be the same name as specified in the\n",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," configuration. (In the example below, we've configured ",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," with name ",(0,a.kt)("inlineCode",{parentName:"p"},"keycloak"),", so in the\n",(0,a.kt)("inlineCode",{parentName:"p"},"registration")," section we set ",(0,a.kt)("inlineCode",{parentName:"p"},"provider: keycloak"),"). The name of the provider can be whatever you want, no need\nto use the service's name if you don't want to."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'spring:\n security:\n oauth2:\n client:\n registration:\n keycloak:\n provider: keycloak # this must match the provider below\n client-id: your-client-id\n client-secret: c830e452-a2a9-40a0-93c1-eb84ea688245\n client-name: Keycloak\n scope: openid,email\n authorization-grant-type: authorization_code\n # the placeholders in {} will be replaced automatically, you don\'t need to change this line\n redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"\n provider:\n keycloak: # this must match the provider above\n user-name-attribute: sub\n # either set the issuer-uri, in which case the app will lookup the configuration for you automatically\n issuer-uri: http://localhost:8085/auth/realms/komgatest\n # or set all of the following\n authorization-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/auth\n token-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/token\n jwk-set-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/certs\n user-info-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/userinfo\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3287],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),c=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},s=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,m=u["".concat(p,".").concat(h)]||u[h]||d[h]||i;return n?o.createElement(m,r(r({ref:t},s),{},{components:n})):o.createElement(m,r({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,r[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));const i={},r="Social login",l={unversionedId:"installation/oauth2",id:"installation/oauth2",title:"Social login",description:"Komga supports social login via OAuth2 and OpenID Connect. In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users.",source:"@site/docs/installation/oauth2.md",sourceDirName:"installation",slug:"/installation/oauth2",permalink:"/docs/installation/oauth2",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/oauth2.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Expose your server",permalink:"/docs/installation/https"},next:{title:"Google Drive and rclone",permalink:"/docs/installation/gdrive"}},p={},c=[{value:"Guide for common providers",id:"guide-for-common-providers",level:2},{value:"Google",id:"google",level:3},{value:"Facebook",id:"facebook",level:3},{value:"Github",id:"github",level:3},{value:"Advanced configuration",id:"advanced-configuration",level:2}],s={toc:c},u="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,o.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"social-login"},"Social login"),(0,a.kt)("p",null,"Komga supports social login via ",(0,a.kt)("strong",{parentName:"p"},"OAuth2")," and ",(0,a.kt)("strong",{parentName:"p"},"OpenID Connect"),". In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users."),(0,a.kt)("p",null,"In order to setup social login, you will need to create an application in the developer portal of the social login provider of your choice (Google, Facebook, Github\u2026), and retrieve a ",(0,a.kt)("em",{parentName:"p"},"Client ID")," and ",(0,a.kt)("em",{parentName:"p"},"Client Secret"),". You will also need to configure a ",(0,a.kt)("em",{parentName:"p"},"Redirect URI")," in the application you created."),(0,a.kt)("p",null,"You can enable automatic account creation upon successful social login, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/installation/configuration#komga-oauth2-account-creation-komga-oauth2-account-creation-true-false"},"here")," for more details."),(0,a.kt)("h2",{id:"guide-for-common-providers"},"Guide for common providers"),(0,a.kt)("p",null,"You can easily configure Google, Github, and Facebook without any complex configuration."),(0,a.kt)("h3",{id:"google"},"Google"),(0,a.kt)("p",null,"Follow the instructions on the ",(0,a.kt)("a",{parentName:"p",href:"https://developers.google.com/identity/protocols/OpenIDConnect"},"OpenID Connect page"),', starting in the section, "Setting up OAuth 2.0".'),(0,a.kt)("p",null,'When asked for a "Redirect URI", use ',(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/google"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address."),(0,a.kt)("p",null,'After completing the "Obtain OAuth 2.0 credentials" instructions, you should have a new OAuth Client with credentials consisting of a Client ID and a Client Secret.'),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with the OAuth 2.0 credentials you created earlier."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spring:\n security:\n oauth2:\n client:\n registration:\n google:\n client-id: 1044613984fsf335-mnsdvkjy3yf98294unfmnvd8.apps.googleusercontent.com\n client-secret: jwhfkjhwefkn44t8vcxml3m\n")),(0,a.kt)("h3",{id:"facebook"},"Facebook"),(0,a.kt)("p",null,"Follow the ",(0,a.kt)("a",{parentName:"p",href:"https://developers.facebook.com/docs/development/register"},"instructions")," to create an App, and add the Facebook Login product."),(0,a.kt)("p",null,"In the ",(0,a.kt)("inlineCode",{parentName:"p"},"Valid OAuth Redirect URIs"),", use ",(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/facebook"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address."),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with the App ID and App Secret."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spring:\n security:\n oauth2:\n client:\n registration:\n facebook:\n client-id: 227581266063919\n client-secret: 47f03915334f49cdueru810069321964929\n")),(0,a.kt)("h3",{id:"github"},"Github"),(0,a.kt)("p",null,"Register a ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/settings/applications/new"},"new application"),"."),(0,a.kt)("p",null,'For the "Authorization callback URL", use ',(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/github"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address."),(0,a.kt)("p",null,"Generate a new Client Secret, you should now have a Client ID and Client Secret."),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with the OAuth 2.0 credentials you created earlier."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spring:\n security:\n oauth2:\n client:\n registration:\n github:\n client-id: 62736jnfksui37384hnmsdnf\n client-secret: jhjgfy67363uhif762328938844940e3e8c8629c18f9\n scope: user:email\n")),(0,a.kt)("h2",{id:"advanced-configuration"},"Advanced configuration"),(0,a.kt)("p",null,"You can configure any OAuth2 provider, but you will need to provide a more extensive configuration. The below example shows how to configure a Keycloak instance, but any provider could be configured in a similar fashion."),(0,a.kt)("p",null,"Modify your ",(0,a.kt)("inlineCode",{parentName:"p"},"application.yml")," as below and replace the values in the ",(0,a.kt)("inlineCode",{parentName:"p"},"client-id")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"client-secret")," property with your credentials You will also need to update the various URIs in the ",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," section."),(0,a.kt)("p",null,"You need to make sure that the users have an email setup, and that it has been marked as verified."),(0,a.kt)("p",null,"When configuring the client in your provider, you may need to input a redirect URI. Use the following: ",(0,a.kt)("inlineCode",{parentName:"p"},"{baseUrl}/login/oauth2/code/{registrationId}"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"baseUrl")," is your server's address, and ",(0,a.kt)("inlineCode",{parentName:"p"},"registrationId")," is the name of the configuration key (",(0,a.kt)("inlineCode",{parentName:"p"},"keycloak")," in the below example)."),(0,a.kt)("p",null,"There are 2 options to configure a provider, either set ",(0,a.kt)("inlineCode",{parentName:"p"},"issuer-uri")," or all of the following: ",(0,a.kt)("inlineCode",{parentName:"p"},"authorization-uri"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"token-uri"),",\n",(0,a.kt)("inlineCode",{parentName:"p"},"jwk-set-uri"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"user-info-uri"),". If your authentication server provides ",(0,a.kt)("inlineCode",{parentName:"p"},"issuer-uri"),", this option is preferred."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"registration")," section contains a ",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," option, this must be the same name as specified in the\n",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," configuration. (In the example below, we've configured ",(0,a.kt)("inlineCode",{parentName:"p"},"provider")," with name ",(0,a.kt)("inlineCode",{parentName:"p"},"keycloak"),", so in the\n",(0,a.kt)("inlineCode",{parentName:"p"},"registration")," section we set ",(0,a.kt)("inlineCode",{parentName:"p"},"provider: keycloak"),"). The name of the provider can be whatever you want, no need\nto use the service's name if you don't want to."),(0,a.kt)("p",null,"Sample configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'spring:\n security:\n oauth2:\n client:\n registration:\n keycloak:\n provider: keycloak # this must match the provider below\n client-id: your-client-id\n client-secret: c830e452-a2a9-40a0-93c1-eb84ea688245\n client-name: Keycloak\n scope: openid,email\n authorization-grant-type: authorization_code\n # the placeholders in {} will be replaced automatically, you don\'t need to change this line\n redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"\n provider:\n keycloak: # this must match the provider above\n user-name-attribute: sub\n # either set the issuer-uri, in which case the app will lookup the configuration for you automatically\n issuer-uri: http://localhost:8085/auth/realms/komgatest\n # or set all of the following\n authorization-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/auth\n token-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/token\n jwk-set-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/certs\n user-info-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/userinfo\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a981d65e.d8f0c173.js b/assets/js/a981d65e.ab29e782.js similarity index 99% rename from assets/js/a981d65e.d8f0c173.js rename to assets/js/a981d65e.ab29e782.js index 6af93311..e1ed19fd 100644 --- a/assets/js/a981d65e.d8f0c173.js +++ b/assets/js/a981d65e.ab29e782.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5674],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>y});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),m=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=m(e.components);return r.createElement(s.Provider,{value:t},e.children)},h="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),h=m(a),p=n,y=h["".concat(s,".").concat(p)]||h[p]||u[p]||i;return a?r.createElement(y,o(o({ref:t},c),{},{components:a})):r.createElement(y,o({ref:t},c))}));function y(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[h]="string"==typeof e?e:n,o[1]=l;for(var m=2;m{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var r=a(7462),n=(a(7294),a(3905));const i={},o="Emptying Library Trash",l={unversionedId:"guides/trash",id:"guides/trash",title:"Emptying Library Trash",description:"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server.",source:"@site/docs/guides/trash.md",sourceDirName:"guides",slug:"/guides/trash",permalink:"/docs/guides/trash",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/trash.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Libraries",permalink:"/docs/guides/libraries"},next:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"}},s={},m=[{value:"File Hashes",id:"file-hashes",level:2},{value:"Automatically Empty Trash",id:"automatically-empty-trash",level:2},{value:"Manually Empty Trash",id:"manually-empty-trash",level:2}],c={toc:m},h="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(h,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"emptying-library-trash"},"Emptying Library Trash"),(0,n.kt)("p",null,"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server."),(0,n.kt)("p",null,"If an item is currently in the trash, it can be restored back to the Library by making the file for the library item available again at the expected location. Conversely, if you perform an \u201cEmpty Trash\u201d on your Server, then the item is discarded from the trash and can no longer be automatically restored."),(0,n.kt)("p",null,'Items currently in the trash will be displayed with an "Unavailable" indicator.'),(0,n.kt)("img",{src:"/assets/media/guides/trash/unavailable-card.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on card"}),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("img",{src:"/assets/media/guides/trash/unavailable-details.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on details view"}),(0,n.kt)("h2",{id:"file-hashes"},"File Hashes"),(0,n.kt)("p",null,"With the trash bin, you can move or rename files and folders without losing your metadata, read progress, or read lists and collections."),(0,n.kt)("p",null,"To track your files when they are renamed or restored, Komga generates a file hash for each file. If Komga doesn't have a file hash for a file, it won't be able to restore data after a file move or rename. Hashing files requires some computing power, so you may want to disable this entirely on low-end devices (see ",(0,n.kt)("a",{parentName:"p",href:"/docs/installation/configuration"},"Configuration"),")."),(0,n.kt)("h2",{id:"automatically-empty-trash"},"Automatically Empty Trash"),(0,n.kt)("p",null,"By default, items found removed from a Library are placed in the trash until the trash is emptied. You can choose to have your Server automatically empty the trash after every scan occurs if you wish. To do so:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Open Komga web interface"),(0,n.kt)("li",{parentName:"ol"},"Edit the library for which you want to change the setting"),(0,n.kt)("li",{parentName:"ol"},"Enable the ",(0,n.kt)("em",{parentName:"li"},"Empty trash automatically after every scan")," option"),(0,n.kt)("li",{parentName:"ol"},"Save Changes")),(0,n.kt)("img",{src:"/assets/media/guides/trash/empty-trash-after-scan.png",style:{maxHeight:"300px"},alt:"Empty trash automatically after every scan option"}),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"Enabling this option means that content will be removed from your Library immediately with no chance to simply restore it if there was a mistake."),(0,n.kt)("p",{parentName:"admonition"},"It will also prevent folder and file moves between libraries.")),(0,n.kt)("h2",{id:"manually-empty-trash"},"Manually Empty Trash"),(0,n.kt)("p",null,"If you have items in the trash that you\u2019re ready to remove, you can empty the trash. When you choose to empty the trash, you\u2019ll need to confirm your choice."),(0,n.kt)("p",null,"Look for the action menu icon ",(0,n.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,n.kt)("em",{parentName:"p"},"Empty Trash"),"."),(0,n.kt)("img",{src:"/assets/media/guides/trash/empty-trash-confirmation-dialog.png",style:{maxHeight:"250px"},alt:"Empty trash confirmation dialog"}))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5674],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>y});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),m=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=m(e.components);return r.createElement(s.Provider,{value:t},e.children)},h="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),h=m(a),p=n,y=h["".concat(s,".").concat(p)]||h[p]||u[p]||i;return a?r.createElement(y,o(o({ref:t},c),{},{components:a})):r.createElement(y,o({ref:t},c))}));function y(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[h]="string"==typeof e?e:n,o[1]=l;for(var m=2;m{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var r=a(7462),n=(a(7294),a(3905));const i={},o="Emptying Library Trash",l={unversionedId:"guides/trash",id:"guides/trash",title:"Emptying Library Trash",description:"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server.",source:"@site/docs/guides/trash.md",sourceDirName:"guides",slug:"/guides/trash",permalink:"/docs/guides/trash",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/trash.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Libraries",permalink:"/docs/guides/libraries"},next:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"}},s={},m=[{value:"File Hashes",id:"file-hashes",level:2},{value:"Automatically Empty Trash",id:"automatically-empty-trash",level:2},{value:"Manually Empty Trash",id:"manually-empty-trash",level:2}],c={toc:m},h="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(h,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"emptying-library-trash"},"Emptying Library Trash"),(0,n.kt)("p",null,"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server."),(0,n.kt)("p",null,"If an item is currently in the trash, it can be restored back to the Library by making the file for the library item available again at the expected location. Conversely, if you perform an \u201cEmpty Trash\u201d on your Server, then the item is discarded from the trash and can no longer be automatically restored."),(0,n.kt)("p",null,'Items currently in the trash will be displayed with an "Unavailable" indicator.'),(0,n.kt)("img",{src:"/assets/media/guides/trash/unavailable-card.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on card"}),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("img",{src:"/assets/media/guides/trash/unavailable-details.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on details view"}),(0,n.kt)("h2",{id:"file-hashes"},"File Hashes"),(0,n.kt)("p",null,"With the trash bin, you can move or rename files and folders without losing your metadata, read progress, or read lists and collections."),(0,n.kt)("p",null,"To track your files when they are renamed or restored, Komga generates a file hash for each file. If Komga doesn't have a file hash for a file, it won't be able to restore data after a file move or rename. Hashing files requires some computing power, so you may want to disable this entirely on low-end devices (see ",(0,n.kt)("a",{parentName:"p",href:"/docs/installation/configuration"},"Configuration"),")."),(0,n.kt)("h2",{id:"automatically-empty-trash"},"Automatically Empty Trash"),(0,n.kt)("p",null,"By default, items found removed from a Library are placed in the trash until the trash is emptied. You can choose to have your Server automatically empty the trash after every scan occurs if you wish. To do so:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Open Komga web interface"),(0,n.kt)("li",{parentName:"ol"},"Edit the library for which you want to change the setting"),(0,n.kt)("li",{parentName:"ol"},"Enable the ",(0,n.kt)("em",{parentName:"li"},"Empty trash automatically after every scan")," option"),(0,n.kt)("li",{parentName:"ol"},"Save Changes")),(0,n.kt)("img",{src:"/assets/media/guides/trash/empty-trash-after-scan.png",style:{maxHeight:"300px"},alt:"Empty trash automatically after every scan option"}),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"Enabling this option means that content will be removed from your Library immediately with no chance to simply restore it if there was a mistake."),(0,n.kt)("p",{parentName:"admonition"},"It will also prevent folder and file moves between libraries.")),(0,n.kt)("h2",{id:"manually-empty-trash"},"Manually Empty Trash"),(0,n.kt)("p",null,"If you have items in the trash that you\u2019re ready to remove, you can empty the trash. When you choose to empty the trash, you\u2019ll need to confirm your choice."),(0,n.kt)("p",null,"Look for the action menu icon ",(0,n.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,n.kt)("em",{parentName:"p"},"Empty Trash"),"."),(0,n.kt)("img",{src:"/assets/media/guides/trash/empty-trash-confirmation-dialog.png",style:{maxHeight:"250px"},alt:"Empty trash confirmation dialog"}))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ac07380c.ce23a3d5.js b/assets/js/ac07380c.7fcfd89d.js similarity index 99% rename from assets/js/ac07380c.ce23a3d5.js rename to assets/js/ac07380c.7fcfd89d.js index 39803dc7..403c8b37 100644 --- a/assets/js/ac07380c.ce23a3d5.js +++ b/assets/js/ac07380c.7fcfd89d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4434],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=s(n),c=r,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||o;return n?a.createElement(k,i(i({ref:t},m),{},{components:n})):a.createElement(k,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={},i="Run with Docker",l={unversionedId:"installation/docker",id:"installation/docker",title:"Run with Docker",description:"Registries",source:"@site/docs/installation/docker.md",sourceDirName:"installation",slug:"/installation/docker",permalink:"/docs/installation/docker",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/docker.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"},next:{title:"Run with the Jar file",permalink:"/docs/installation/jar"}},p={},s=[{value:"Registries",id:"registries",level:2},{value:"Version tags",id:"version-tags",level:2},{value:"Usage",id:"usage",level:2},{value:"docker",id:"docker",level:3},{value:"docker-compose",id:"docker-compose",level:3},{value:"Parameters",id:"parameters",level:2},{value:"User / Group Identifiers",id:"user--group-identifiers",level:2},{value:"Increase memory limit",id:"increase-memory-limit",level:2},{value:"Support info",id:"support-info",level:2},{value:"Updating",id:"updating",level:2},{value:"Via Docker Run/Create",id:"via-docker-runcreate",level:3},{value:"Via Docker Compose",id:"via-docker-compose",level:3},{value:"Automatic updates",id:"automatic-updates",level:3}],m={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-with-docker"},"Run with Docker"),(0,r.kt)("h2",{id:"registries"},"Registries"),(0,r.kt)("p",null,"The Docker images are published on:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://hub.docker.com/r/gotson/komga"},"DockerHub")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/gotson/komga/pkgs/container/komga"},"ghcr.io"))),(0,r.kt)("h2",{id:"version-tags"},"Version tags"),(0,r.kt)("p",null,"This image provides various versions that are available via tags."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},(0,r.kt)("strong",{parentName:"th"},"Tag")),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"latest")),(0,r.kt)("td",{parentName:"tr",align:null},"latest commit")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"MAJOR.x")),(0,r.kt)("td",{parentName:"tr",align:null},"latest ",(0,r.kt)("inlineCode",{parentName:"td"},"MAJOR")," version, for example ",(0,r.kt)("inlineCode",{parentName:"td"},"0.x"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"x.y.z")),(0,r.kt)("td",{parentName:"tr",align:null},"version ",(0,r.kt)("inlineCode",{parentName:"td"},"x.y.z"))))),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Here are some example snippets to help you get started creating a container."),(0,r.kt)("h3",{id:"docker"},"docker"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"docker create \\\n --name=komga \\\n --user 1000:1000 \\\n -p 25600:25600 \\\n --mount type=bind,source=/path/to/config,target=/config \\\n --mount type=bind,source=/path/to/data,target=/data \\\n --restart unless-stopped \\\n gotson/komga\n")),(0,r.kt)("p",null,"Then start the container:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"docker start komga\n")),(0,r.kt)("h3",{id:"docker-compose"},"docker-compose"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"---\nversion: '3.3'\nservices:\n komga:\n image: gotson/komga\n container_name: komga\n volumes:\n - type: bind\n source: /path/to/config\n target: /config\n - type: bind\n source: /path/to/data\n target: /data\n - type: bind\n source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London\n target: /etc/timezone\n read_only: true\n ports:\n - 25600:25600\n user: \"1000:1000\"\n # remove the whole environment section if you don't need it\n environment:\n - =\n restart: unless-stopped\n")),(0,r.kt)("h2",{id:"parameters"},"Parameters"),(0,r.kt)("p",null,"Container images are configured using parameters passed at runtime (such as those above).\nThese parameters are separated by a colon and indicate ",(0,r.kt)("inlineCode",{parentName:"p"},"external:internal")," respectively.\nFor example, ",(0,r.kt)("inlineCode",{parentName:"p"},"-p 8080:80")," would expose port ",(0,r.kt)("inlineCode",{parentName:"p"},"80")," from inside the container to be accessible from the host's IP on port ",(0,r.kt)("inlineCode",{parentName:"p"},"8080")," outside the container."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Function"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-p 25600")),(0,r.kt)("td",{parentName:"tr",align:null},"The port for the Komga APIs and web interface")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"--user: 1000:1000")),(0,r.kt)("td",{parentName:"tr",align:null},"User:Group identifier - see below for explanation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"--mount type=bind,source=/path/to/config,target=/config")),(0,r.kt)("td",{parentName:"tr",align:null},"Database and Komga configurations")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"--mount type=bind,source=/path/to/data,target=/data")),(0,r.kt)("td",{parentName:"tr",align:null},"Location of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-e ENV_VAR=value")),(0,r.kt)("td",{parentName:"tr",align:null},"Any ",(0,r.kt)("a",{parentName:"td",href:"/docs/installation/configuration"},"configuration")," environment variable")))),(0,r.kt)("h2",{id:"user--group-identifiers"},"User / Group Identifiers"),(0,r.kt)("p",null,"When using volumes (",(0,r.kt)("inlineCode",{parentName:"p"},"-v")," flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user ID and group ID."),(0,r.kt)("p",null,"Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic."),(0,r.kt)("p",null,"In this instance ",(0,r.kt)("inlineCode",{parentName:"p"},"UID=1000")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"GID=1000"),", to find yours use ",(0,r.kt)("inlineCode",{parentName:"p"},"id ")," as below:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ id \n uid=1000(jdoe) gid=1000(jdgroup) groups=1000(jdgroup)\n")),(0,r.kt)("h2",{id:"increase-memory-limit"},"Increase memory limit"),(0,r.kt)("p",null,"By default the ",(0,r.kt)("inlineCode",{parentName:"p"},"java")," process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some ",(0,r.kt)("inlineCode",{parentName:"p"},"OutOfMemoryException")," in the logs you probably need to increase the maximum memory Komga can use."),(0,r.kt)("p",null,"To do so, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"JAVA_TOOL_OPTIONS=-Xmx")," environment variable, where ",(0,r.kt)("inlineCode",{parentName:"p"},"")," can be any amount like ",(0,r.kt)("inlineCode",{parentName:"p"},"2048m"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"4g")," etc. For example to run Komga with a maximum of 4gb of memory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"JAVA_TOOL_OPTIONS=-Xmx4g\n")),(0,r.kt)("h2",{id:"support-info"},"Support info"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Shell access whilst the container is running: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker exec -it komga /bin/bash")),(0,r.kt)("li",{parentName:"ul"},"To monitor the logs of the container in realtime: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker logs -f komga"))),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"Below are the instructions for updating containers:"),(0,r.kt)("h3",{id:"via-docker-runcreate"},"Via Docker Run/Create"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Update the image: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker pull gotson/komga")),(0,r.kt)("li",{parentName:"ul"},"Stop the running container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker stop komga")),(0,r.kt)("li",{parentName:"ul"},"Delete the container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker rm komga")),(0,r.kt)("li",{parentName:"ul"},"Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your ",(0,r.kt)("inlineCode",{parentName:"li"},"/config")," folder and settings will be preserved)"),(0,r.kt)("li",{parentName:"ul"},"Start the new container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker start komga")),(0,r.kt)("li",{parentName:"ul"},"You can also remove the old dangling images: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker image prune"))),(0,r.kt)("h3",{id:"via-docker-compose"},"Via Docker Compose"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Update all images: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose pull"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"or update a single image: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose pull komga")))),(0,r.kt)("li",{parentName:"ul"},"Let compose update all containers as necessary: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose up -d"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"or update a single container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose up -d komga")))),(0,r.kt)("li",{parentName:"ul"},"You can also remove the old dangling images: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker image prune"))),(0,r.kt)("h3",{id:"automatic-updates"},"Automatic updates"),(0,r.kt)("p",null,"You can use ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/containrrr/watchtower"},"Watchtower")," to automatically update your containers."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4434],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=s(n),c=r,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||o;return n?a.createElement(k,i(i({ref:t},m),{},{components:n})):a.createElement(k,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={},i="Run with Docker",l={unversionedId:"installation/docker",id:"installation/docker",title:"Run with Docker",description:"Registries",source:"@site/docs/installation/docker.md",sourceDirName:"installation",slug:"/installation/docker",permalink:"/docs/installation/docker",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/docker.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"},next:{title:"Run with the Jar file",permalink:"/docs/installation/jar"}},p={},s=[{value:"Registries",id:"registries",level:2},{value:"Version tags",id:"version-tags",level:2},{value:"Usage",id:"usage",level:2},{value:"docker",id:"docker",level:3},{value:"docker-compose",id:"docker-compose",level:3},{value:"Parameters",id:"parameters",level:2},{value:"User / Group Identifiers",id:"user--group-identifiers",level:2},{value:"Increase memory limit",id:"increase-memory-limit",level:2},{value:"Support info",id:"support-info",level:2},{value:"Updating",id:"updating",level:2},{value:"Via Docker Run/Create",id:"via-docker-runcreate",level:3},{value:"Via Docker Compose",id:"via-docker-compose",level:3},{value:"Automatic updates",id:"automatic-updates",level:3}],m={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-with-docker"},"Run with Docker"),(0,r.kt)("h2",{id:"registries"},"Registries"),(0,r.kt)("p",null,"The Docker images are published on:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://hub.docker.com/r/gotson/komga"},"DockerHub")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/gotson/komga/pkgs/container/komga"},"ghcr.io"))),(0,r.kt)("h2",{id:"version-tags"},"Version tags"),(0,r.kt)("p",null,"This image provides various versions that are available via tags."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},(0,r.kt)("strong",{parentName:"th"},"Tag")),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"latest")),(0,r.kt)("td",{parentName:"tr",align:null},"latest commit")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"MAJOR.x")),(0,r.kt)("td",{parentName:"tr",align:null},"latest ",(0,r.kt)("inlineCode",{parentName:"td"},"MAJOR")," version, for example ",(0,r.kt)("inlineCode",{parentName:"td"},"0.x"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"x.y.z")),(0,r.kt)("td",{parentName:"tr",align:null},"version ",(0,r.kt)("inlineCode",{parentName:"td"},"x.y.z"))))),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Here are some example snippets to help you get started creating a container."),(0,r.kt)("h3",{id:"docker"},"docker"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"docker create \\\n --name=komga \\\n --user 1000:1000 \\\n -p 25600:25600 \\\n --mount type=bind,source=/path/to/config,target=/config \\\n --mount type=bind,source=/path/to/data,target=/data \\\n --restart unless-stopped \\\n gotson/komga\n")),(0,r.kt)("p",null,"Then start the container:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"docker start komga\n")),(0,r.kt)("h3",{id:"docker-compose"},"docker-compose"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"---\nversion: '3.3'\nservices:\n komga:\n image: gotson/komga\n container_name: komga\n volumes:\n - type: bind\n source: /path/to/config\n target: /config\n - type: bind\n source: /path/to/data\n target: /data\n - type: bind\n source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London\n target: /etc/timezone\n read_only: true\n ports:\n - 25600:25600\n user: \"1000:1000\"\n # remove the whole environment section if you don't need it\n environment:\n - =\n restart: unless-stopped\n")),(0,r.kt)("h2",{id:"parameters"},"Parameters"),(0,r.kt)("p",null,"Container images are configured using parameters passed at runtime (such as those above).\nThese parameters are separated by a colon and indicate ",(0,r.kt)("inlineCode",{parentName:"p"},"external:internal")," respectively.\nFor example, ",(0,r.kt)("inlineCode",{parentName:"p"},"-p 8080:80")," would expose port ",(0,r.kt)("inlineCode",{parentName:"p"},"80")," from inside the container to be accessible from the host's IP on port ",(0,r.kt)("inlineCode",{parentName:"p"},"8080")," outside the container."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Function"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-p 25600")),(0,r.kt)("td",{parentName:"tr",align:null},"The port for the Komga APIs and web interface")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"--user: 1000:1000")),(0,r.kt)("td",{parentName:"tr",align:null},"User:Group identifier - see below for explanation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"--mount type=bind,source=/path/to/config,target=/config")),(0,r.kt)("td",{parentName:"tr",align:null},"Database and Komga configurations")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"--mount type=bind,source=/path/to/data,target=/data")),(0,r.kt)("td",{parentName:"tr",align:null},"Location of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-e ENV_VAR=value")),(0,r.kt)("td",{parentName:"tr",align:null},"Any ",(0,r.kt)("a",{parentName:"td",href:"/docs/installation/configuration"},"configuration")," environment variable")))),(0,r.kt)("h2",{id:"user--group-identifiers"},"User / Group Identifiers"),(0,r.kt)("p",null,"When using volumes (",(0,r.kt)("inlineCode",{parentName:"p"},"-v")," flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user ID and group ID."),(0,r.kt)("p",null,"Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic."),(0,r.kt)("p",null,"In this instance ",(0,r.kt)("inlineCode",{parentName:"p"},"UID=1000")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"GID=1000"),", to find yours use ",(0,r.kt)("inlineCode",{parentName:"p"},"id ")," as below:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ id \n uid=1000(jdoe) gid=1000(jdgroup) groups=1000(jdgroup)\n")),(0,r.kt)("h2",{id:"increase-memory-limit"},"Increase memory limit"),(0,r.kt)("p",null,"By default the ",(0,r.kt)("inlineCode",{parentName:"p"},"java")," process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some ",(0,r.kt)("inlineCode",{parentName:"p"},"OutOfMemoryException")," in the logs you probably need to increase the maximum memory Komga can use."),(0,r.kt)("p",null,"To do so, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"JAVA_TOOL_OPTIONS=-Xmx")," environment variable, where ",(0,r.kt)("inlineCode",{parentName:"p"},"")," can be any amount like ",(0,r.kt)("inlineCode",{parentName:"p"},"2048m"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"4g")," etc. For example to run Komga with a maximum of 4gb of memory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"JAVA_TOOL_OPTIONS=-Xmx4g\n")),(0,r.kt)("h2",{id:"support-info"},"Support info"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Shell access whilst the container is running: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker exec -it komga /bin/bash")),(0,r.kt)("li",{parentName:"ul"},"To monitor the logs of the container in realtime: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker logs -f komga"))),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"Below are the instructions for updating containers:"),(0,r.kt)("h3",{id:"via-docker-runcreate"},"Via Docker Run/Create"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Update the image: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker pull gotson/komga")),(0,r.kt)("li",{parentName:"ul"},"Stop the running container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker stop komga")),(0,r.kt)("li",{parentName:"ul"},"Delete the container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker rm komga")),(0,r.kt)("li",{parentName:"ul"},"Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your ",(0,r.kt)("inlineCode",{parentName:"li"},"/config")," folder and settings will be preserved)"),(0,r.kt)("li",{parentName:"ul"},"Start the new container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker start komga")),(0,r.kt)("li",{parentName:"ul"},"You can also remove the old dangling images: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker image prune"))),(0,r.kt)("h3",{id:"via-docker-compose"},"Via Docker Compose"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Update all images: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose pull"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"or update a single image: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose pull komga")))),(0,r.kt)("li",{parentName:"ul"},"Let compose update all containers as necessary: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose up -d"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"or update a single container: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose up -d komga")))),(0,r.kt)("li",{parentName:"ul"},"You can also remove the old dangling images: ",(0,r.kt)("inlineCode",{parentName:"li"},"docker image prune"))),(0,r.kt)("h3",{id:"automatic-updates"},"Automatic updates"),(0,r.kt)("p",null,"You can use ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/containrrr/watchtower"},"Watchtower")," to automatically update your containers."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b242fde9.6c82f9e9.js b/assets/js/b242fde9.053bc3eb.js similarity index 96% rename from assets/js/b242fde9.6c82f9e9.js rename to assets/js/b242fde9.053bc3eb.js index 7091db15..ca9fc95f 100644 --- a/assets/js/b242fde9.6c82f9e9.js +++ b/assets/js/b242fde9.053bc3eb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5647],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,c=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=s(r),f=i,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,l(l({ref:t},p),{},{components:r})):n.createElement(m,l({ref:t},p))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,l=new Array(a);l[0]=f;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[u]="string"==typeof e?e:i,l[1]=o;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const a={},l="Duplicate Files",o={unversionedId:"guides/duplicate-files",id:"guides/duplicate-files",title:"Duplicate Files",description:"Komga can detect duplicate files among your books.",source:"@site/docs/guides/duplicate-files.md",sourceDirName:"guides",slug:"/guides/duplicate-files",permalink:"/docs/guides/duplicate-files",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-files.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Import Books",permalink:"/docs/guides/import-books"},next:{title:"Duplicate Pages",permalink:"/docs/guides/duplicate-pages"}},c={},s=[{value:"Browsing Duplicate Files",id:"browsing-duplicate-files",level:2}],p={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"duplicate-files"},"Duplicate Files"),(0,i.kt)("p",null,"Komga can detect duplicate files among your books."),(0,i.kt)("p",null,"You need to enable ",(0,i.kt)("a",{parentName:"p",href:"libraries#compute-hash-for-files"},"file hashing")," for your libraries."),(0,i.kt)("p",null,"You can manage duplicate pages from ",(0,i.kt)("em",{parentName:"p"},"Server Settings > Duplicate Files"),"."),(0,i.kt)("h2",{id:"browsing-duplicate-files"},"Browsing Duplicate Files"),(0,i.kt)("p",null,"This screen will show all the duplicate files."),(0,i.kt)("img",{src:"/assets/media/guides/duplicate-files/duplicate-files.png",style:{maxHeight:" 400px"},alt:"Browse Duplicate Files"}),(0,i.kt)("p",null,"You can direcly delete a duplicate file by clicking on the trashcan icon."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5647],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,c=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=s(r),f=i,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,l(l({ref:t},p),{},{components:r})):n.createElement(m,l({ref:t},p))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,l=new Array(a);l[0]=f;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[u]="string"==typeof e?e:i,l[1]=o;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const a={},l="Duplicate Files",o={unversionedId:"guides/duplicate-files",id:"guides/duplicate-files",title:"Duplicate Files",description:"Komga can detect duplicate files among your books.",source:"@site/docs/guides/duplicate-files.md",sourceDirName:"guides",slug:"/guides/duplicate-files",permalink:"/docs/guides/duplicate-files",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-files.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Import Books",permalink:"/docs/guides/import-books"},next:{title:"Duplicate Pages",permalink:"/docs/guides/duplicate-pages"}},c={},s=[{value:"Browsing Duplicate Files",id:"browsing-duplicate-files",level:2}],p={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"duplicate-files"},"Duplicate Files"),(0,i.kt)("p",null,"Komga can detect duplicate files among your books."),(0,i.kt)("p",null,"You need to enable ",(0,i.kt)("a",{parentName:"p",href:"libraries#compute-hash-for-files"},"file hashing")," for your libraries."),(0,i.kt)("p",null,"You can manage duplicate pages from ",(0,i.kt)("em",{parentName:"p"},"Server Settings > Duplicate Files"),"."),(0,i.kt)("h2",{id:"browsing-duplicate-files"},"Browsing Duplicate Files"),(0,i.kt)("p",null,"This screen will show all the duplicate files."),(0,i.kt)("img",{src:"/assets/media/guides/duplicate-files/duplicate-files.png",style:{maxHeight:" 400px"},alt:"Browse Duplicate Files"}),(0,i.kt)("p",null,"You can direcly delete a duplicate file by clicking on the trashcan icon."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b94207ad.1cf04193.js b/assets/js/b94207ad.dc752376.js similarity index 96% rename from assets/js/b94207ad.1cf04193.js rename to assets/js/b94207ad.dc752376.js index c13eef70..c5a2ce83 100644 --- a/assets/js/b94207ad.1cf04193.js +++ b/assets/js/b94207ad.dc752376.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4443],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},f="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),f=c(r),m=o,d=f["".concat(s,".").concat(m)]||f[m]||u[m]||a;return r?n.createElement(d,i(i({ref:t},p),{},{components:r})):n.createElement(d,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[f]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={},i="Install from the Microsoft Store",l={unversionedId:"installation/ms-store",id:"installation/ms-store",title:"Install from the Microsoft Store",description:"You can install Komga from the Microsoft Store.",source:"@site/docs/installation/ms-store.md",sourceDirName:"installation",slug:"/installation/ms-store",permalink:"/docs/installation/ms-store",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/ms-store.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Official methods",permalink:"/docs/category/official-methods"},next:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"}},s={},c=[{value:"Updating",id:"updating",level:2},{value:"Read next",id:"read-next",level:2}],p={toc:c},f="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(f,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"install-from-the-microsoft-store"},"Install from the Microsoft Store"),(0,o.kt)("p",null,"You can install Komga from the ",(0,o.kt)("a",{parentName:"p",href:"https://www.microsoft.com/store/apps/9N924KC4S4HG"},"Microsoft Store"),"."),(0,o.kt)("h2",{id:"updating"},"Updating"),(0,o.kt)("p",null,"The application will automatically update itself when a new version is available from the Microsoft Store."),(0,o.kt)("p",null,"Note that it takes up to a day or two for new releases to show in the Microsoft Store, as Microsoft needs to validate every new version."),(0,o.kt)("h2",{id:"read-next"},"Read next"),(0,o.kt)("p",null,"Check the ",(0,o.kt)("a",{parentName:"p",href:"../guides/desktop"},"Desktop Application")," page."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4443],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},f="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),f=c(r),m=o,d=f["".concat(s,".").concat(m)]||f[m]||u[m]||a;return r?n.createElement(d,i(i({ref:t},p),{},{components:r})):n.createElement(d,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[f]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={},i="Install from the Microsoft Store",l={unversionedId:"installation/ms-store",id:"installation/ms-store",title:"Install from the Microsoft Store",description:"You can install Komga from the Microsoft Store.",source:"@site/docs/installation/ms-store.md",sourceDirName:"installation",slug:"/installation/ms-store",permalink:"/docs/installation/ms-store",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/ms-store.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Official methods",permalink:"/docs/category/official-methods"},next:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"}},s={},c=[{value:"Updating",id:"updating",level:2},{value:"Read next",id:"read-next",level:2}],p={toc:c},f="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(f,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"install-from-the-microsoft-store"},"Install from the Microsoft Store"),(0,o.kt)("p",null,"You can install Komga from the ",(0,o.kt)("a",{parentName:"p",href:"https://www.microsoft.com/store/apps/9N924KC4S4HG"},"Microsoft Store"),"."),(0,o.kt)("h2",{id:"updating"},"Updating"),(0,o.kt)("p",null,"The application will automatically update itself when a new version is available from the Microsoft Store."),(0,o.kt)("p",null,"Note that it takes up to a day or two for new releases to show in the Microsoft Store, as Microsoft needs to validate every new version."),(0,o.kt)("h2",{id:"read-next"},"Read next"),(0,o.kt)("p",null,"Check the ",(0,o.kt)("a",{parentName:"p",href:"../guides/desktop"},"Desktop Application")," page."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b94d24b4.4d252087.js b/assets/js/b94d24b4.5dc6db6e.js similarity index 96% rename from assets/js/b94d24b4.4d252087.js rename to assets/js/b94d24b4.5dc6db6e.js index dc13258c..4d17734a 100644 --- a/assets/js/b94d24b4.4d252087.js +++ b/assets/js/b94d24b4.5dc6db6e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6826],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),m=u(t),d=o,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||a;return t?r.createElement(f,i(i({ref:n},l),{},{components:t})):r.createElement(f,i({ref:n},l))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=d;var c={};for(var s in n)hasOwnProperty.call(n,s)&&(c[s]=n[s]);c.originalType=e,c[m]="string"==typeof e?e:o,i[1]=c;for(var u=2;u{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var r=t(7462),o=(t(7294),t(3905));const a={},i="Announcements",c={unversionedId:"guides/announcements",id:"guides/announcements",title:"Announcements",description:"Announcements from the Komga website will be shown inside the application.",source:"@site/docs/guides/announcements.md",sourceDirName:"guides",slug:"/guides/announcements",permalink:"/docs/guides/announcements",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/announcements.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Theme",permalink:"/docs/guides/theme"},next:{title:"Command Line Interface",permalink:"/docs/guides/cli"}},s={},u=[],l={toc:u},m="wrapper";function p(e){let{components:n,...t}=e;return(0,o.kt)(m,(0,r.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"announcements"},"Announcements"),(0,o.kt)("p",null,"Announcements from the ",(0,o.kt)("a",{parentName:"p",href:"/blog"},"Komga website")," will be shown inside the application."),(0,o.kt)("p",null,"An orange dot will indicate that some announcements are unread. From the ",(0,o.kt)("em",{parentName:"p"},"Announcements")," view, a user can mark announcements as read, which will clear the orange dot indicator."),(0,o.kt)("img",{src:"/assets/media/guides/announcements/announcements.png"}))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6826],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),m=u(t),d=o,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||a;return t?r.createElement(f,i(i({ref:n},l),{},{components:t})):r.createElement(f,i({ref:n},l))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=d;var c={};for(var s in n)hasOwnProperty.call(n,s)&&(c[s]=n[s]);c.originalType=e,c[m]="string"==typeof e?e:o,i[1]=c;for(var u=2;u{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var r=t(7462),o=(t(7294),t(3905));const a={},i="Announcements",c={unversionedId:"guides/announcements",id:"guides/announcements",title:"Announcements",description:"Announcements from the Komga website will be shown inside the application.",source:"@site/docs/guides/announcements.md",sourceDirName:"guides",slug:"/guides/announcements",permalink:"/docs/guides/announcements",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/announcements.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Theme",permalink:"/docs/guides/theme"},next:{title:"Command Line Interface",permalink:"/docs/guides/cli"}},s={},u=[],l={toc:u},m="wrapper";function p(e){let{components:n,...t}=e;return(0,o.kt)(m,(0,r.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"announcements"},"Announcements"),(0,o.kt)("p",null,"Announcements from the ",(0,o.kt)("a",{parentName:"p",href:"/blog"},"Komga website")," will be shown inside the application."),(0,o.kt)("p",null,"An orange dot will indicate that some announcements are unread. From the ",(0,o.kt)("em",{parentName:"p"},"Announcements")," view, a user can mark announcements as read, which will clear the orange dot indicator."),(0,o.kt)("img",{src:"/assets/media/guides/announcements/announcements.png"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c2d7cd96.1dcda5d9.js b/assets/js/c2d7cd96.3711407a.js similarity index 99% rename from assets/js/c2d7cd96.1dcda5d9.js rename to assets/js/c2d7cd96.3711407a.js index 5013417c..3657a31b 100644 --- a/assets/js/c2d7cd96.1dcda5d9.js +++ b/assets/js/c2d7cd96.3711407a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7972],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>N});var i=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=i.createContext({}),m=function(e){var t=i.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=m(e.components);return i.createElement(p.Provider,{value:t},e.children)},s="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),s=m(a),u=n,N=s["".concat(p,".").concat(u)]||s[u]||k[u]||l;return a?i.createElement(N,r(r({ref:t},d),{},{components:a})):i.createElement(N,r({ref:t},d))}));function N(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,r=new Array(l);r[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[s]="string"==typeof e?e:n,r[1]=o;for(var m=2;m{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>k,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var i=a(7462),n=(a(7294),a(3905));const l={},r="Full Text Search",o={unversionedId:"guides/search",id:"guides/search",title:"Full Text Search",description:"Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.",source:"@site/docs/guides/search.md",sourceDirName:"guides",slug:"/guides/search",permalink:"/docs/guides/search",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/search.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read lists",permalink:"/docs/guides/readlists"},next:{title:"Import Books",permalink:"/docs/guides/import-books"}},p={},m=[{value:"Series additional fields",id:"series-additional-fields",level:3},{value:"Book additional fields",id:"book-additional-fields",level:3}],d={toc:m},s="wrapper";function k(e){let{components:t,...a}=e;return(0,n.kt)(s,(0,i.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"full-text-search"},"Full Text Search"),(0,n.kt)("p",null,"Komga leverages ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Full-text_search"},"Full Text Search")," (FTS hereafter) to provide relevant results from your libraries."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"FTS will order results by relevance"),(0,n.kt)("li",{parentName:"ul"},"FTS is case-insensitive"),(0,n.kt)("li",{parentName:"ul"},"When searching with CJK characters (Chinese, Japanese, Korean), a minimum of 2 characters is required."),(0,n.kt)("li",{parentName:"ul"},"The order of words is not important: ",(0,n.kt)("inlineCode",{parentName:"li"},"batman robin")," will match ",(0,n.kt)("inlineCode",{parentName:"li"},"Robin & Batman")),(0,n.kt)("li",{parentName:"ul"},"To search by words in order, enclose your search in ",(0,n.kt)("inlineCode",{parentName:"li"},'"'),": ",(0,n.kt)("inlineCode",{parentName:"li"},'"white knight"')," will not match ",(0,n.kt)("inlineCode",{parentName:"li"},"knight white")," nor ",(0,n.kt)("inlineCode",{parentName:"li"},"white and knight")),(0,n.kt)("li",{parentName:"ul"},"By default, the search will match the item title. For Books, the ISBN will also be matched by default."),(0,n.kt)("li",{parentName:"ul"},"You can use the ",(0,n.kt)("inlineCode",{parentName:"li"},"AND"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"OR")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"NOT")," operators (UPPERCASE) to build complex queries:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"batman NOT publisher:dc")," will match all ",(0,n.kt)("inlineCode",{parentName:"li"},"Batman")," series not published by ",(0,n.kt)("em",{parentName:"li"},"DC Comics")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"batman OR robin")," will match ",(0,n.kt)("inlineCode",{parentName:"li"},"Batman")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"Robin")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"batman AND (robin OR superman)")," will match ",(0,n.kt)("inlineCode",{parentName:"li"},"Superman & Batman")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"Batman & Robin")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"writer:remender penciller:murphy")))),(0,n.kt)("li",{parentName:"ul"},"You can perform range queries using the ",(0,n.kt)("inlineCode",{parentName:"li"},"[a TO b]")," syntax. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:[1990 TO 2000]"),". Note that the matching is lexicographic, not numerical. You can also use wildcards: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:[2010 TO *]"),".")),(0,n.kt)("p",null,"Some extra fields are available for search using the ",(0,n.kt)("inlineCode",{parentName:"p"},"field:search")," syntax, see after."),(0,n.kt)("h3",{id:"series-additional-fields"},"Series additional fields"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"publisher"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"publisher:vertigo")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Possible values: ",(0,n.kt)("inlineCode",{parentName:"li"},"ongoing"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"ended"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"hiatus"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"abandoned")),(0,n.kt)("li",{parentName:"ul"},"Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"status:hiatus")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"reading_direction"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Possible values: ",(0,n.kt)("inlineCode",{parentName:"li"},"left_to_right"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"right_to_left"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"vertical"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"webtoon")),(0,n.kt)("li",{parentName:"ul"},"Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"reading_direction:right_to_left")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"age_rating"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"age_rating:12")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"language"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"language:fr")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"tag")," will search any tag, whether it is set at Series or Book level. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"tag:action")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"series_tag")," will search series tags only"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"book_tag")," will search book tags only"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"genre"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"genre:action")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"author")," will search authors with any role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"author:(sean murphy)"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"You can also search by specific role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer:remender")),(0,n.kt)("li",{parentName:"ul"},"Possible role values are: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"penciller"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"letterer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"inker"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"editor"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"cover"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"colorist")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"book_count"),", which is the number of books present in that Series. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"book_count:1")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"total_book_count"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"total_book_count:100")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"release_date")," will search by year released. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:1999")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"deleted")," will search soft-deleted series. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:false")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"complete")," will search complete series, ie series where the ",(0,n.kt)("em",{parentName:"li"},"total book counts")," (from metadata) is equals to the actual book counts (number of files). Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"complete:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"complete:false")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"sharing_label"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"sharing_label:kids"))),(0,n.kt)("h3",{id:"book-additional-fields"},"Book additional fields"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"tag")," will search any tag. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},'tag:"double pages"')),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"author")," will search authors with any role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"author:(sean murphy)"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"You can also search by specific role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer:remender")),(0,n.kt)("li",{parentName:"ul"},"Possible role values are: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"penciller"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"letterer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"inker"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"editor"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"cover"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"colorist")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"release_date")," will search by year released. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:1999")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Possible values: ",(0,n.kt)("inlineCode",{parentName:"li"},"ready"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"unknown"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"error"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"unsupported"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"outdated")),(0,n.kt)("li",{parentName:"ul"},"Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"status:(error OR unsupported)")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"deleted")," will search soft-deleted books. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:false")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"oneshot")," will search for One-Shots only. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"oneshot:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"oneshot:false"))),(0,n.kt)("p",null,"Some additional Series fields will be available if the book is a One-Shot:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"publisher")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status"),", which should always be ",(0,n.kt)("inlineCode",{parentName:"li"},"ended")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"reading_direction")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"age_rating")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"language")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"genre")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"sharing_label")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"complete"),", which will always be ",(0,n.kt)("inlineCode",{parentName:"li"},"true"))))}k.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[7972],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>N});var i=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=i.createContext({}),m=function(e){var t=i.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=m(e.components);return i.createElement(p.Provider,{value:t},e.children)},s="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),s=m(a),u=n,N=s["".concat(p,".").concat(u)]||s[u]||k[u]||l;return a?i.createElement(N,r(r({ref:t},d),{},{components:a})):i.createElement(N,r({ref:t},d))}));function N(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,r=new Array(l);r[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[s]="string"==typeof e?e:n,r[1]=o;for(var m=2;m{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>k,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var i=a(7462),n=(a(7294),a(3905));const l={},r="Full Text Search",o={unversionedId:"guides/search",id:"guides/search",title:"Full Text Search",description:"Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.",source:"@site/docs/guides/search.md",sourceDirName:"guides",slug:"/guides/search",permalink:"/docs/guides/search",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/search.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read lists",permalink:"/docs/guides/readlists"},next:{title:"Import Books",permalink:"/docs/guides/import-books"}},p={},m=[{value:"Series additional fields",id:"series-additional-fields",level:3},{value:"Book additional fields",id:"book-additional-fields",level:3}],d={toc:m},s="wrapper";function k(e){let{components:t,...a}=e;return(0,n.kt)(s,(0,i.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"full-text-search"},"Full Text Search"),(0,n.kt)("p",null,"Komga leverages ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Full-text_search"},"Full Text Search")," (FTS hereafter) to provide relevant results from your libraries."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"FTS will order results by relevance"),(0,n.kt)("li",{parentName:"ul"},"FTS is case-insensitive"),(0,n.kt)("li",{parentName:"ul"},"When searching with CJK characters (Chinese, Japanese, Korean), a minimum of 2 characters is required."),(0,n.kt)("li",{parentName:"ul"},"The order of words is not important: ",(0,n.kt)("inlineCode",{parentName:"li"},"batman robin")," will match ",(0,n.kt)("inlineCode",{parentName:"li"},"Robin & Batman")),(0,n.kt)("li",{parentName:"ul"},"To search by words in order, enclose your search in ",(0,n.kt)("inlineCode",{parentName:"li"},'"'),": ",(0,n.kt)("inlineCode",{parentName:"li"},'"white knight"')," will not match ",(0,n.kt)("inlineCode",{parentName:"li"},"knight white")," nor ",(0,n.kt)("inlineCode",{parentName:"li"},"white and knight")),(0,n.kt)("li",{parentName:"ul"},"By default, the search will match the item title. For Books, the ISBN will also be matched by default."),(0,n.kt)("li",{parentName:"ul"},"You can use the ",(0,n.kt)("inlineCode",{parentName:"li"},"AND"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"OR")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"NOT")," operators (UPPERCASE) to build complex queries:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"batman NOT publisher:dc")," will match all ",(0,n.kt)("inlineCode",{parentName:"li"},"Batman")," series not published by ",(0,n.kt)("em",{parentName:"li"},"DC Comics")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"batman OR robin")," will match ",(0,n.kt)("inlineCode",{parentName:"li"},"Batman")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"Robin")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"batman AND (robin OR superman)")," will match ",(0,n.kt)("inlineCode",{parentName:"li"},"Superman & Batman")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"Batman & Robin")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"writer:remender penciller:murphy")))),(0,n.kt)("li",{parentName:"ul"},"You can perform range queries using the ",(0,n.kt)("inlineCode",{parentName:"li"},"[a TO b]")," syntax. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:[1990 TO 2000]"),". Note that the matching is lexicographic, not numerical. You can also use wildcards: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:[2010 TO *]"),".")),(0,n.kt)("p",null,"Some extra fields are available for search using the ",(0,n.kt)("inlineCode",{parentName:"p"},"field:search")," syntax, see after."),(0,n.kt)("h3",{id:"series-additional-fields"},"Series additional fields"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"publisher"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"publisher:vertigo")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Possible values: ",(0,n.kt)("inlineCode",{parentName:"li"},"ongoing"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"ended"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"hiatus"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"abandoned")),(0,n.kt)("li",{parentName:"ul"},"Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"status:hiatus")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"reading_direction"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Possible values: ",(0,n.kt)("inlineCode",{parentName:"li"},"left_to_right"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"right_to_left"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"vertical"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"webtoon")),(0,n.kt)("li",{parentName:"ul"},"Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"reading_direction:right_to_left")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"age_rating"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"age_rating:12")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"language"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"language:fr")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"tag")," will search any tag, whether it is set at Series or Book level. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"tag:action")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"series_tag")," will search series tags only"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"book_tag")," will search book tags only"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"genre"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"genre:action")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"author")," will search authors with any role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"author:(sean murphy)"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"You can also search by specific role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer:remender")),(0,n.kt)("li",{parentName:"ul"},"Possible role values are: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"penciller"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"letterer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"inker"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"editor"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"cover"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"colorist")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"book_count"),", which is the number of books present in that Series. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"book_count:1")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"total_book_count"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"total_book_count:100")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"release_date")," will search by year released. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:1999")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"deleted")," will search soft-deleted series. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:false")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"complete")," will search complete series, ie series where the ",(0,n.kt)("em",{parentName:"li"},"total book counts")," (from metadata) is equals to the actual book counts (number of files). Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"complete:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"complete:false")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"sharing_label"),". Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"sharing_label:kids"))),(0,n.kt)("h3",{id:"book-additional-fields"},"Book additional fields"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"tag")," will search any tag. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},'tag:"double pages"')),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"author")," will search authors with any role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"author:(sean murphy)"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"You can also search by specific role. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer:remender")),(0,n.kt)("li",{parentName:"ul"},"Possible role values are: ",(0,n.kt)("inlineCode",{parentName:"li"},"writer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"penciller"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"letterer"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"inker"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"editor"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"cover"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"colorist")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"release_date")," will search by year released. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"release_date:1999")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Possible values: ",(0,n.kt)("inlineCode",{parentName:"li"},"ready"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"unknown"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"error"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"unsupported"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"outdated")),(0,n.kt)("li",{parentName:"ul"},"Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"status:(error OR unsupported)")))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"deleted")," will search soft-deleted books. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"deleted:false")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"oneshot")," will search for One-Shots only. Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"oneshot:true")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"oneshot:false"))),(0,n.kt)("p",null,"Some additional Series fields will be available if the book is a One-Shot:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"publisher")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"status"),", which should always be ",(0,n.kt)("inlineCode",{parentName:"li"},"ended")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"reading_direction")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"age_rating")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"language")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"genre")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"sharing_label")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"complete"),", which will always be ",(0,n.kt)("inlineCode",{parentName:"li"},"true"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ca683365.496481b9.js b/assets/js/ca683365.7c2a9351.js similarity index 98% rename from assets/js/ca683365.496481b9.js rename to assets/js/ca683365.7c2a9351.js index 22bd2743..9085f11b 100644 --- a/assets/js/ca683365.496481b9.js +++ b/assets/js/ca683365.7c2a9351.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3438],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(r),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[m]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={},i="Theme",s={unversionedId:"guides/theme",id:"guides/theme",title:"Theme",description:"You can customize the application theme from the sidebar.",source:"@site/docs/guides/theme.md",sourceDirName:"guides",slug:"/guides/theme",permalink:"/docs/guides/theme",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/theme.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"},next:{title:"Announcements",permalink:"/docs/guides/announcements"}},c={},l=[],u={toc:l},m="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(m,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"theme"},"Theme"),(0,o.kt)("p",null,"You can customize the application theme from the sidebar."),(0,o.kt)("img",{src:"/assets/media/guides/theme/theme.png",style:{maxHeight:"50px"}}),(0,o.kt)("p",null,"Three themes are available:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Light"),(0,o.kt)("li",{parentName:"ul"},"Dark"),(0,o.kt)("li",{parentName:"ul"},"System: this will follow the theme of your OS.")),(0,o.kt)("img",{src:"/assets/media/guides/theme/theme-list.png",style:{maxHeight:"150px"}}))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[3438],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(r),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[m]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={},i="Theme",s={unversionedId:"guides/theme",id:"guides/theme",title:"Theme",description:"You can customize the application theme from the sidebar.",source:"@site/docs/guides/theme.md",sourceDirName:"guides",slug:"/guides/theme",permalink:"/docs/guides/theme",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/theme.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"},next:{title:"Announcements",permalink:"/docs/guides/announcements"}},c={},l=[],u={toc:l},m="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(m,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"theme"},"Theme"),(0,o.kt)("p",null,"You can customize the application theme from the sidebar."),(0,o.kt)("img",{src:"/assets/media/guides/theme/theme.png",style:{maxHeight:"50px"}}),(0,o.kt)("p",null,"Three themes are available:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Light"),(0,o.kt)("li",{parentName:"ul"},"Dark"),(0,o.kt)("li",{parentName:"ul"},"System: this will follow the theme of your OS.")),(0,o.kt)("img",{src:"/assets/media/guides/theme/theme-list.png",style:{maxHeight:"150px"}}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d135d818.000585f6.js b/assets/js/d135d818.65acd907.js similarity index 99% rename from assets/js/d135d818.000585f6.js rename to assets/js/d135d818.65acd907.js index d81c1b11..e3d728b5 100644 --- a/assets/js/d135d818.000585f6.js +++ b/assets/js/d135d818.65acd907.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4119],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(a),d=r,g=u["".concat(p,".").concat(d)]||u[d]||m[d]||o;return a?n.createElement(g,i(i({ref:t},c),{},{components:a})):n.createElement(g,i({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={},i="Duplicate Pages",l={unversionedId:"guides/duplicate-pages",id:"guides/duplicate-pages",title:"Duplicate Pages",description:"Komga can detect duplicate pages among your books, and delete them manually or automatically.",source:"@site/docs/guides/duplicate-pages.md",sourceDirName:"guides",slug:"/guides/duplicate-pages",permalink:"/docs/guides/duplicate-pages",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-pages.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"},next:{title:"Readers",permalink:"/docs/category/readers"}},p={},s=[{value:"Browsing New Duplicates",id:"browsing-new-duplicates",level:2},{value:"Browsing Known Duplicates",id:"browsing-known-duplicates",level:2}],c={toc:s},u="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"duplicate-pages"},"Duplicate Pages"),(0,r.kt)("p",null,"Komga can detect duplicate pages among your books, and delete them manually or automatically."),(0,r.kt)("p",null,"You need to enable ",(0,r.kt)("a",{parentName:"p",href:"libraries#compute-hash-for-pages"},"page hashing")," for your libraries."),(0,r.kt)("p",null,"You can manage duplicate pages from ",(0,r.kt)("em",{parentName:"p"},"Server Settings > Duplicate Pages"),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"Duplicate page removal will modify your files.")),(0,r.kt)("p",{parentName:"admonition"},"It is recommended to perform a backup, and to try using manual deletion before using automatic deletion.")),(0,r.kt)("h2",{id:"browsing-new-duplicates"},"Browsing New Duplicates"),(0,r.kt)("p",null,"This screen will show all the newly detected duplicate pages. You can sort them by ",(0,r.kt)("em",{parentName:"p"},"Count")," of duplicates, ",(0,r.kt)("em",{parentName:"p"},"Size")," of the image, or the ",(0,r.kt)("em",{parentName:"p"},"Total Size")," you could save by deleting it."),(0,r.kt)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-new.png",style:{maxHeight:" 400px"},alt:"Browse New Duplicates"}),(0,r.kt)("p",null,"For each duplicate page, you can:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Ignore"),": It won't show anymore on this page, and Komga won't do anything about it."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Manual Delete"),": You will be able to trigger manual deletion from the ",(0,r.kt)("em",{parentName:"li"},"Known")," view."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Auto Delete"),": Komga will automatically remove those pages after a library scan.")),(0,r.kt)("p",null,"You can also see the detailed list of matches by clicking on the ",(0,r.kt)("em",{parentName:"p"},"Matches")," button. It will show all the books containing the duplicate page, as well as the image for each, so you can perform a visual check. You can also delete matches individually."),(0,r.kt)("h2",{id:"browsing-known-duplicates"},"Browsing Known Duplicates"),(0,r.kt)("p",null,"This screen will show all the duplicate pages for which you chose an action. You can sort them by ",(0,r.kt)("em",{parentName:"p"},"Deletion Count")," , ",(0,r.kt)("em",{parentName:"p"},"Size")," of the image, or the ",(0,r.kt)("em",{parentName:"p"},"Space Saved")," so far."),(0,r.kt)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-known.png",style:{maxHeight:" 400px"},alt:"Browse Known Duplicates"}),(0,r.kt)("p",null,"For each page, you can change the action. You can ",(0,r.kt)("em",{parentName:"p"},"Ignore")," a page that was set for deletion, or mark an ignored one for deletion, if you changed your mind."),(0,r.kt)("p",null,"For pages set for ",(0,r.kt)("em",{parentName:"p"},"Manual Delete"),", you can trigger the deletion using the ",(0,r.kt)("em",{parentName:"p"},"Delete Matches")," button."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[4119],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(a),d=r,g=u["".concat(p,".").concat(d)]||u[d]||m[d]||o;return a?n.createElement(g,i(i({ref:t},c),{},{components:a})):n.createElement(g,i({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={},i="Duplicate Pages",l={unversionedId:"guides/duplicate-pages",id:"guides/duplicate-pages",title:"Duplicate Pages",description:"Komga can detect duplicate pages among your books, and delete them manually or automatically.",source:"@site/docs/guides/duplicate-pages.md",sourceDirName:"guides",slug:"/guides/duplicate-pages",permalink:"/docs/guides/duplicate-pages",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-pages.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"},next:{title:"Readers",permalink:"/docs/category/readers"}},p={},s=[{value:"Browsing New Duplicates",id:"browsing-new-duplicates",level:2},{value:"Browsing Known Duplicates",id:"browsing-known-duplicates",level:2}],c={toc:s},u="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"duplicate-pages"},"Duplicate Pages"),(0,r.kt)("p",null,"Komga can detect duplicate pages among your books, and delete them manually or automatically."),(0,r.kt)("p",null,"You need to enable ",(0,r.kt)("a",{parentName:"p",href:"libraries#compute-hash-for-pages"},"page hashing")," for your libraries."),(0,r.kt)("p",null,"You can manage duplicate pages from ",(0,r.kt)("em",{parentName:"p"},"Server Settings > Duplicate Pages"),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"Duplicate page removal will modify your files.")),(0,r.kt)("p",{parentName:"admonition"},"It is recommended to perform a backup, and to try using manual deletion before using automatic deletion.")),(0,r.kt)("h2",{id:"browsing-new-duplicates"},"Browsing New Duplicates"),(0,r.kt)("p",null,"This screen will show all the newly detected duplicate pages. You can sort them by ",(0,r.kt)("em",{parentName:"p"},"Count")," of duplicates, ",(0,r.kt)("em",{parentName:"p"},"Size")," of the image, or the ",(0,r.kt)("em",{parentName:"p"},"Total Size")," you could save by deleting it."),(0,r.kt)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-new.png",style:{maxHeight:" 400px"},alt:"Browse New Duplicates"}),(0,r.kt)("p",null,"For each duplicate page, you can:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Ignore"),": It won't show anymore on this page, and Komga won't do anything about it."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Manual Delete"),": You will be able to trigger manual deletion from the ",(0,r.kt)("em",{parentName:"li"},"Known")," view."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Auto Delete"),": Komga will automatically remove those pages after a library scan.")),(0,r.kt)("p",null,"You can also see the detailed list of matches by clicking on the ",(0,r.kt)("em",{parentName:"p"},"Matches")," button. It will show all the books containing the duplicate page, as well as the image for each, so you can perform a visual check. You can also delete matches individually."),(0,r.kt)("h2",{id:"browsing-known-duplicates"},"Browsing Known Duplicates"),(0,r.kt)("p",null,"This screen will show all the duplicate pages for which you chose an action. You can sort them by ",(0,r.kt)("em",{parentName:"p"},"Deletion Count")," , ",(0,r.kt)("em",{parentName:"p"},"Size")," of the image, or the ",(0,r.kt)("em",{parentName:"p"},"Space Saved")," so far."),(0,r.kt)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-known.png",style:{maxHeight:" 400px"},alt:"Browse Known Duplicates"}),(0,r.kt)("p",null,"For each page, you can change the action. You can ",(0,r.kt)("em",{parentName:"p"},"Ignore")," a page that was set for deletion, or mark an ignored one for deletion, if you changed your mind."),(0,r.kt)("p",null,"For pages set for ",(0,r.kt)("em",{parentName:"p"},"Manual Delete"),", you can trigger the deletion using the ",(0,r.kt)("em",{parentName:"p"},"Delete Matches")," button."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d6e0cd3c.7bac8c80.js b/assets/js/d6e0cd3c.b6a488b4.js similarity index 98% rename from assets/js/d6e0cd3c.7bac8c80.js rename to assets/js/d6e0cd3c.b6a488b4.js index e5f74ad3..aba87b54 100644 --- a/assets/js/d6e0cd3c.7bac8c80.js +++ b/assets/js/d6e0cd3c.b6a488b4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[278],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),l=p(r),m=a,f=l["".concat(s,".").concat(m)]||l[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[l]="string"==typeof e?e:a,i[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={},i="Accessing the web interface",c={unversionedId:"guides/webui",id:"guides/webui",title:"Accessing the web interface",description:"Once Komga is started, you can access the web interface at//:(/baseUrl).",source:"@site/docs/guides/webui.md",sourceDirName:"guides",slug:"/guides/webui",permalink:"/docs/guides/webui",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webui.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Guides",permalink:"/docs/category/guides"},next:{title:"Desktop Application",permalink:"/docs/guides/desktop"}},s={},p=[{value:"Create user account",id:"create-user-account",level:2}],u={toc:p},l="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(l,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"accessing-the-web-interface"},"Accessing the web interface"),(0,a.kt)("p",null,"Once Komga is started, you can access the web interface at: ",(0,a.kt)("inlineCode",{parentName:"p"},"http://:(/baseUrl)"),"."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"If you are running Komga locally, ",(0,a.kt)("em",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"em"},""))," will be ",(0,a.kt)("inlineCode",{parentName:"p"},"localhost"),"."),(0,a.kt)("p",{parentName:"admonition"},"The default ",(0,a.kt)("em",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"em"},""))," is ",(0,a.kt)("inlineCode",{parentName:"p"},"25600"),".")),(0,a.kt)("h2",{id:"create-user-account"},"Create user account"),(0,a.kt)("p",null,"You will be asked to create a user account. Choose an ",(0,a.kt)("em",{parentName:"p"},"email")," and ",(0,a.kt)("em",{parentName:"p"},"password"),", then click on ",(0,a.kt)("strong",{parentName:"p"},"Create User Account"),"."),(0,a.kt)("div",{class:"text--center"},(0,a.kt)("img",{src:"/assets/media/installation/create-initial-account.png",style:{maxHeight:"500px"},alt:"Create initial account"})))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[278],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),l=p(r),m=a,f=l["".concat(s,".").concat(m)]||l[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[l]="string"==typeof e?e:a,i[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={},i="Accessing the web interface",c={unversionedId:"guides/webui",id:"guides/webui",title:"Accessing the web interface",description:"Once Komga is started, you can access the web interface at//:(/baseUrl).",source:"@site/docs/guides/webui.md",sourceDirName:"guides",slug:"/guides/webui",permalink:"/docs/guides/webui",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webui.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Guides",permalink:"/docs/category/guides"},next:{title:"Desktop Application",permalink:"/docs/guides/desktop"}},s={},p=[{value:"Create user account",id:"create-user-account",level:2}],u={toc:p},l="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(l,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"accessing-the-web-interface"},"Accessing the web interface"),(0,a.kt)("p",null,"Once Komga is started, you can access the web interface at: ",(0,a.kt)("inlineCode",{parentName:"p"},"http://:(/baseUrl)"),"."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"If you are running Komga locally, ",(0,a.kt)("em",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"em"},""))," will be ",(0,a.kt)("inlineCode",{parentName:"p"},"localhost"),"."),(0,a.kt)("p",{parentName:"admonition"},"The default ",(0,a.kt)("em",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"em"},""))," is ",(0,a.kt)("inlineCode",{parentName:"p"},"25600"),".")),(0,a.kt)("h2",{id:"create-user-account"},"Create user account"),(0,a.kt)("p",null,"You will be asked to create a user account. Choose an ",(0,a.kt)("em",{parentName:"p"},"email")," and ",(0,a.kt)("em",{parentName:"p"},"password"),", then click on ",(0,a.kt)("strong",{parentName:"p"},"Create User Account"),"."),(0,a.kt)("div",{class:"text--center"},(0,a.kt)("img",{src:"/assets/media/installation/create-initial-account.png",style:{maxHeight:"500px"},alt:"Create initial account"})))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d86518ca.e1445cf3.js b/assets/js/d86518ca.395b04a1.js similarity index 99% rename from assets/js/d86518ca.e1445cf3.js rename to assets/js/d86518ca.395b04a1.js index b34b3222..26c96469 100644 --- a/assets/js/d86518ca.e1445cf3.js +++ b/assets/js/d86518ca.395b04a1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5416],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),s=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},k=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(r),k=n,m=d["".concat(l,".").concat(k)]||d[k]||u[k]||o;return r?a.createElement(m,i(i({ref:t},c),{},{components:r})):a.createElement(m,i({ref:t},c))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=k;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[d]="string"==typeof e?e:n,i[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var a=r(7462),n=(r(7294),r(3905));const o={},i="Read with Paperback",p={unversionedId:"guides/paperback",id:"guides/paperback",title:"Read with Paperback",description:"Komga has an extension for Paperback, a free iOS and iPadOS reader.",source:"@site/docs/guides/paperback.md",sourceDirName:"guides",slug:"/guides/paperback",permalink:"/docs/guides/paperback",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/paperback.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"},next:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"}},l={},s=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Add the source repository",id:"add-the-source-repository",level:3},{value:"Install the source",id:"install-the-source",level:3},{value:"Configure the source",id:"configure-the-source",level:3},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Add the tracker repository",id:"add-the-tracker-repository",level:3},{value:"Install the tracker",id:"install-the-tracker",level:3},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}],c={toc:s},d="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-with-paperback"},"Read with Paperback"),(0,n.kt)("p",null,"Komga has an extension for ",(0,n.kt)("a",{parentName:"p",href:"https://paperback.moe/"},"Paperback"),", a free iOS and iPadOS reader."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Paperback requires iOS 13.4+ or iPadOS 13.4+.")),(0,n.kt)("h2",{id:"install-and-configure"},"Install and configure"),(0,n.kt)("h3",{id:"add-the-source-repository"},"Add the source repository"),(0,n.kt)("p",null,"Support for Komga comes pre-installed with Paperback under the ",(0,n.kt)("inlineCode",{parentName:"p"},"Paperback")," source name. If deleted the extension and repository simply open ",(0,n.kt)("a",{parentName:"p",href:"https://paperback-ios.github.io/extensions-main-promises/"},"the repository page")," on your device and tap ",(0,n.kt)("strong",{parentName:"p"},"Add to Paperback"),"."),(0,n.kt)("p",null,'Once Paperback opens choose "Add as Source Repo" on the popup.'),(0,n.kt)("details",null,(0,n.kt)("summary",null,"Add the source repository manually"),"If you prefer, it is also possible to add the repository manually:",(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app, go to ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Sources")," then press ",(0,n.kt)("strong",{parentName:"li"},"Edit")," on the top right-hand corner."),(0,n.kt)("li",{parentName:"ol"},"Press the top left-hand corner ",(0,n.kt)("strong",{parentName:"li"},"+")," button to add a repository."),(0,n.kt)("li",{parentName:"ol"},"Use the base url:",(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"https://paperback-ios.github.io/extensions-main-promises/\n"))))),(0,n.kt)("h3",{id:"install-the-source"},"Install the source"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"In the app ",(0,n.kt)("strong",{parentName:"p"},"Settings"),", ",(0,n.kt)("strong",{parentName:"p"},"External Sources")," windows, choose ",(0,n.kt)("inlineCode",{parentName:"p"},"Browse Official Repo"),", or ",(0,n.kt)("inlineCode",{parentName:"p"},"Browse ...")," followed by the repository name you chose previously")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Install the source ",(0,n.kt)("strong",{parentName:"p"},"Paperback")))),(0,n.kt)("h3",{id:"configure-the-source"},"Configure the source"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Sources"),", press the ",(0,n.kt)("inlineCode",{parentName:"li"},"Paperback")," source"),(0,n.kt)("li",{parentName:"ol"},"Select ",(0,n.kt)("strong",{parentName:"li"},"Server Settings")," and set your:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"server url"),(0,n.kt)("li",{parentName:"ul"},"username"),(0,n.kt)("li",{parentName:"ul"},"password"))),(0,n.kt)("li",{parentName:"ol"},"Press ",(0,n.kt)("strong",{parentName:"li"},"Save")," to exit")),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"You can test your settings by opening ",(0,n.kt)("strong",{parentName:"p"},"Try Settings")," below the Server Settings section")),(0,n.kt)("h2",{id:"track-read-progress"},"Track read progress"),(0,n.kt)("p",null,"It is possible to sync read chapters from the app to the Komga server using an implicit tracker."),(0,n.kt)("h3",{id:"add-the-tracker-repository"},"Add the tracker repository"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app, go to ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Trackers")," then press ",(0,n.kt)("strong",{parentName:"li"},"Edit")," on the top right-hand corner"),(0,n.kt)("li",{parentName:"ol"},"Press the top left-hand corner ",(0,n.kt)("strong",{parentName:"li"},"+")," button to add a repository."),(0,n.kt)("li",{parentName:"ol"},"Use the base url (",(0,n.kt)("strong",{parentName:"li"},"do not")," open this url):",(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"https://paperback-ios.github.io/trackers-main/main/\n")))),(0,n.kt)("h3",{id:"install-the-tracker"},"Install the tracker"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Trackers")," windows, choose ",(0,n.kt)("inlineCode",{parentName:"li"},"Browse ...")," for the repository you just added"),(0,n.kt)("li",{parentName:"ol"},"Install the tracker ",(0,n.kt)("strong",{parentName:"li"},"Paperback"))),(0,n.kt)("p",null,"When you read or mark as read a chapter in the app, it will now be marked as such on your Komga server."),(0,n.kt)("h2",{id:"changelog-and-compatibility"},"Changelog and Compatibility"),(0,n.kt)("p",null,"Each version of the Komga extension need a specific version of the Komga server to work properly."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5416],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),s=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},k=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(r),k=n,m=d["".concat(l,".").concat(k)]||d[k]||u[k]||o;return r?a.createElement(m,i(i({ref:t},c),{},{components:r})):a.createElement(m,i({ref:t},c))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=k;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[d]="string"==typeof e?e:n,i[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var a=r(7462),n=(r(7294),r(3905));const o={},i="Read with Paperback",p={unversionedId:"guides/paperback",id:"guides/paperback",title:"Read with Paperback",description:"Komga has an extension for Paperback, a free iOS and iPadOS reader.",source:"@site/docs/guides/paperback.md",sourceDirName:"guides",slug:"/guides/paperback",permalink:"/docs/guides/paperback",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/paperback.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"},next:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"}},l={},s=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Add the source repository",id:"add-the-source-repository",level:3},{value:"Install the source",id:"install-the-source",level:3},{value:"Configure the source",id:"configure-the-source",level:3},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Add the tracker repository",id:"add-the-tracker-repository",level:3},{value:"Install the tracker",id:"install-the-tracker",level:3},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}],c={toc:s},d="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-with-paperback"},"Read with Paperback"),(0,n.kt)("p",null,"Komga has an extension for ",(0,n.kt)("a",{parentName:"p",href:"https://paperback.moe/"},"Paperback"),", a free iOS and iPadOS reader."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Paperback requires iOS 13.4+ or iPadOS 13.4+.")),(0,n.kt)("h2",{id:"install-and-configure"},"Install and configure"),(0,n.kt)("h3",{id:"add-the-source-repository"},"Add the source repository"),(0,n.kt)("p",null,"Support for Komga comes pre-installed with Paperback under the ",(0,n.kt)("inlineCode",{parentName:"p"},"Paperback")," source name. If deleted the extension and repository simply open ",(0,n.kt)("a",{parentName:"p",href:"https://paperback-ios.github.io/extensions-main-promises/"},"the repository page")," on your device and tap ",(0,n.kt)("strong",{parentName:"p"},"Add to Paperback"),"."),(0,n.kt)("p",null,'Once Paperback opens choose "Add as Source Repo" on the popup.'),(0,n.kt)("details",null,(0,n.kt)("summary",null,"Add the source repository manually"),"If you prefer, it is also possible to add the repository manually:",(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app, go to ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Sources")," then press ",(0,n.kt)("strong",{parentName:"li"},"Edit")," on the top right-hand corner."),(0,n.kt)("li",{parentName:"ol"},"Press the top left-hand corner ",(0,n.kt)("strong",{parentName:"li"},"+")," button to add a repository."),(0,n.kt)("li",{parentName:"ol"},"Use the base url:",(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"https://paperback-ios.github.io/extensions-main-promises/\n"))))),(0,n.kt)("h3",{id:"install-the-source"},"Install the source"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"In the app ",(0,n.kt)("strong",{parentName:"p"},"Settings"),", ",(0,n.kt)("strong",{parentName:"p"},"External Sources")," windows, choose ",(0,n.kt)("inlineCode",{parentName:"p"},"Browse Official Repo"),", or ",(0,n.kt)("inlineCode",{parentName:"p"},"Browse ...")," followed by the repository name you chose previously")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Install the source ",(0,n.kt)("strong",{parentName:"p"},"Paperback")))),(0,n.kt)("h3",{id:"configure-the-source"},"Configure the source"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Sources"),", press the ",(0,n.kt)("inlineCode",{parentName:"li"},"Paperback")," source"),(0,n.kt)("li",{parentName:"ol"},"Select ",(0,n.kt)("strong",{parentName:"li"},"Server Settings")," and set your:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"server url"),(0,n.kt)("li",{parentName:"ul"},"username"),(0,n.kt)("li",{parentName:"ul"},"password"))),(0,n.kt)("li",{parentName:"ol"},"Press ",(0,n.kt)("strong",{parentName:"li"},"Save")," to exit")),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"You can test your settings by opening ",(0,n.kt)("strong",{parentName:"p"},"Try Settings")," below the Server Settings section")),(0,n.kt)("h2",{id:"track-read-progress"},"Track read progress"),(0,n.kt)("p",null,"It is possible to sync read chapters from the app to the Komga server using an implicit tracker."),(0,n.kt)("h3",{id:"add-the-tracker-repository"},"Add the tracker repository"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app, go to ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Trackers")," then press ",(0,n.kt)("strong",{parentName:"li"},"Edit")," on the top right-hand corner"),(0,n.kt)("li",{parentName:"ol"},"Press the top left-hand corner ",(0,n.kt)("strong",{parentName:"li"},"+")," button to add a repository."),(0,n.kt)("li",{parentName:"ol"},"Use the base url (",(0,n.kt)("strong",{parentName:"li"},"do not")," open this url):",(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"https://paperback-ios.github.io/trackers-main/main/\n")))),(0,n.kt)("h3",{id:"install-the-tracker"},"Install the tracker"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"In the app ",(0,n.kt)("strong",{parentName:"li"},"Settings"),", ",(0,n.kt)("strong",{parentName:"li"},"External Trackers")," windows, choose ",(0,n.kt)("inlineCode",{parentName:"li"},"Browse ...")," for the repository you just added"),(0,n.kt)("li",{parentName:"ol"},"Install the tracker ",(0,n.kt)("strong",{parentName:"li"},"Paperback"))),(0,n.kt)("p",null,"When you read or mark as read a chapter in the app, it will now be marked as such on your Komga server."),(0,n.kt)("h2",{id:"changelog-and-compatibility"},"Changelog and Compatibility"),(0,n.kt)("p",null,"Each version of the Komga extension need a specific version of the Komga server to work properly."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/df8142cd.2d2894e7.js b/assets/js/df8142cd.66f0d45d.js similarity index 97% rename from assets/js/df8142cd.2d2894e7.js rename to assets/js/df8142cd.66f0d45d.js index 32c7d31d..01f127a9 100644 --- a/assets/js/df8142cd.2d2894e7.js +++ b/assets/js/df8142cd.66f0d45d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5035],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=a,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={},o="REST API",s={unversionedId:"api/rest",id:"api/rest",title:"REST API",description:"Komga offers a REST API, which you can browse using Swagger. It's available at /swagger-ui.html.",source:"@site/docs/api/rest.md",sourceDirName:"api",slug:"/api/rest",permalink:"/docs/api/rest",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/rest.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"api",next:{title:"Deprecation",permalink:"/docs/api/deprecation"}},l={},p=[{value:"Authenticating",id:"authenticating",level:2},{value:"Sessions",id:"sessions",level:2},{value:"Remember Me",id:"remember-me",level:2},{value:"Logout",id:"logout",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"rest-api"},"REST API"),(0,a.kt)("p",null,"Komga offers a REST API, which you can browse using Swagger. It's available at ",(0,a.kt)("inlineCode",{parentName:"p"},"/swagger-ui.html"),"."),(0,a.kt)("p",null,"The OpenAPI specification is also available ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga/blob/master/komga/docs/openapi.json"},"here"),"."),(0,a.kt)("h2",{id:"authenticating"},"Authenticating"),(0,a.kt)("p",null,"Most endpoints require authentication. Authentication is done using ",(0,a.kt)("strong",{parentName:"p"},"Basic Authentication")," and can be set on any endpoint."),(0,a.kt)("h2",{id:"sessions"},"Sessions"),(0,a.kt)("p",null,"Upon successful authentication, a session is created, and can be reused."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"By default, a ",(0,a.kt)("inlineCode",{parentName:"li"},"SESSION")," cookie is set via ",(0,a.kt)("inlineCode",{parentName:"li"},"Set-Cookie")," response header. This works well for browsers and clients that can handle cookies."),(0,a.kt)("li",{parentName:"ul"},"If you specify a header ",(0,a.kt)("inlineCode",{parentName:"li"},"X-Auth-Token")," during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.")),(0,a.kt)("p",null,"If you need to set the session cookie later on, you can call ",(0,a.kt)("inlineCode",{parentName:"p"},"/api/v1/login/set-cookie")," with ",(0,a.kt)("inlineCode",{parentName:"p"},"X-Auth-Token"),". The response will contain the ",(0,a.kt)("inlineCode",{parentName:"p"},"Set-Cookie")," header."),(0,a.kt)("h2",{id:"remember-me"},"Remember Me"),(0,a.kt)("p",null,"During authentication, if a request parameter ",(0,a.kt)("inlineCode",{parentName:"p"},"remember-me")," is passed and set to ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),", the server will also return a ",(0,a.kt)("inlineCode",{parentName:"p"},"remember-me")," cookie. This cookie will be used to login automatically even if the session has expired."),(0,a.kt)("h2",{id:"logout"},"Logout"),(0,a.kt)("p",null,"You can explicitely logout an existing session by calling ",(0,a.kt)("inlineCode",{parentName:"p"},"/api/logout"),". This would return a ",(0,a.kt)("inlineCode",{parentName:"p"},"204"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[5035],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=a,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={},o="REST API",s={unversionedId:"api/rest",id:"api/rest",title:"REST API",description:"Komga offers a REST API, which you can browse using Swagger. It's available at /swagger-ui.html.",source:"@site/docs/api/rest.md",sourceDirName:"api",slug:"/api/rest",permalink:"/docs/api/rest",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/rest.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"api",next:{title:"Deprecation",permalink:"/docs/api/deprecation"}},l={},p=[{value:"Authenticating",id:"authenticating",level:2},{value:"Sessions",id:"sessions",level:2},{value:"Remember Me",id:"remember-me",level:2},{value:"Logout",id:"logout",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"rest-api"},"REST API"),(0,a.kt)("p",null,"Komga offers a REST API, which you can browse using Swagger. It's available at ",(0,a.kt)("inlineCode",{parentName:"p"},"/swagger-ui.html"),"."),(0,a.kt)("p",null,"The OpenAPI specification is also available ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/gotson/komga/blob/master/komga/docs/openapi.json"},"here"),"."),(0,a.kt)("h2",{id:"authenticating"},"Authenticating"),(0,a.kt)("p",null,"Most endpoints require authentication. Authentication is done using ",(0,a.kt)("strong",{parentName:"p"},"Basic Authentication")," and can be set on any endpoint."),(0,a.kt)("h2",{id:"sessions"},"Sessions"),(0,a.kt)("p",null,"Upon successful authentication, a session is created, and can be reused."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"By default, a ",(0,a.kt)("inlineCode",{parentName:"li"},"SESSION")," cookie is set via ",(0,a.kt)("inlineCode",{parentName:"li"},"Set-Cookie")," response header. This works well for browsers and clients that can handle cookies."),(0,a.kt)("li",{parentName:"ul"},"If you specify a header ",(0,a.kt)("inlineCode",{parentName:"li"},"X-Auth-Token")," during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.")),(0,a.kt)("p",null,"If you need to set the session cookie later on, you can call ",(0,a.kt)("inlineCode",{parentName:"p"},"/api/v1/login/set-cookie")," with ",(0,a.kt)("inlineCode",{parentName:"p"},"X-Auth-Token"),". The response will contain the ",(0,a.kt)("inlineCode",{parentName:"p"},"Set-Cookie")," header."),(0,a.kt)("h2",{id:"remember-me"},"Remember Me"),(0,a.kt)("p",null,"During authentication, if a request parameter ",(0,a.kt)("inlineCode",{parentName:"p"},"remember-me")," is passed and set to ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),", the server will also return a ",(0,a.kt)("inlineCode",{parentName:"p"},"remember-me")," cookie. This cookie will be used to login automatically even if the session has expired."),(0,a.kt)("h2",{id:"logout"},"Logout"),(0,a.kt)("p",null,"You can explicitely logout an existing session by calling ",(0,a.kt)("inlineCode",{parentName:"p"},"/api/logout"),". This would return a ",(0,a.kt)("inlineCode",{parentName:"p"},"204"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e41126ef.159e42f5.js b/assets/js/e41126ef.b05f3ff0.js similarity index 98% rename from assets/js/e41126ef.159e42f5.js rename to assets/js/e41126ef.b05f3ff0.js index 697831c1..c8111aff 100644 --- a/assets/js/e41126ef.159e42f5.js +++ b/assets/js/e41126ef.b05f3ff0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6383],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var a=i(7294);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function s(e){for(var t=1;t=0||(l[i]=e[i]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(l[i]=e[i])}return l}var o=a.createContext({}),d=function(e){var t=a.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):s(s({},t),e)),i},c=function(e){var t=d(e.components);return a.createElement(o.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var i=e.components,l=e.mdxType,r=e.originalType,o=e.parentName,c=n(e,["components","mdxType","originalType","parentName"]),m=d(i),p=l,h=m["".concat(o,".").concat(p)]||m[p]||u[p]||r;return i?a.createElement(h,s(s({ref:t},c),{},{components:i})):a.createElement(h,s({ref:t},c))}));function h(e,t){var i=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=i.length,s=new Array(r);s[0]=p;var n={};for(var o in t)hasOwnProperty.call(t,o)&&(n[o]=t[o]);n.originalType=e,n[m]="string"==typeof e?e:l,s[1]=n;for(var d=2;d{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>n,toc:()=>d});var a=i(7462),l=(i(7294),i(3905));const r={},s="Read lists",n={unversionedId:"guides/readlists",id:"guides/readlists",title:"Read lists",description:'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.',source:"@site/docs/guides/readlists.md",sourceDirName:"guides",slug:"/guides/readlists",permalink:"/docs/guides/readlists",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/readlists.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Collections",permalink:"/docs/guides/collections"},next:{title:"Full Text Search",permalink:"/docs/guides/search"}},o={},d=[{value:"Adding books to a read list",id:"adding-books-to-a-read-list",level:2},{value:"Finding the Read Lists",id:"finding-the-read-lists",level:2},{value:"Book details screen",id:"book-details-screen",level:3},{value:"Viewing the libraries "By Read List"",id:"viewing-the-libraries-by-read-list",level:3},{value:"Read List details",id:"read-list-details",level:2},{value:"Read List ordering",id:"read-list-ordering",level:3},{value:"Edit read list elements",id:"edit-read-list-elements",level:3},{value:"Deleting a read list",id:"deleting-a-read-list",level:2},{value:"Import read lists from ComicRack",id:"import-read-lists-from-comicrack",level:2}],c={toc:d},m="wrapper";function u(e){let{components:t,...i}=e;return(0,l.kt)(m,(0,a.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"read-lists"},"Read lists"),(0,l.kt)("p",null,'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.'),(0,l.kt)("h2",{id:"adding-books-to-a-read-list"},"Adding books to a read list"),(0,l.kt)("p",null,"You can add a Book to a read list from the action menu icon ",(0,l.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,l.kt)("em",{parentName:"p"},"Add to read list"),"."),(0,l.kt)("p",null,"You can also select multiple books, and click on ",(0,l.kt)("em",{parentName:"p"},"Add to read list"),"."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/multiselect-add-readlist.png",style:{maxHeight:" 80px"}}),(0,l.kt)("p",null,"A dialog will show up, where you can either add books to an existing read list, or create a new read list."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/add-readlist-dialog.png",style:{maxHeight:" 300px"}}),(0,l.kt)("h2",{id:"finding-the-read-lists"},"Finding the Read Lists"),(0,l.kt)("p",null,"Read lists can be discovered or viewed in three ways:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Book details screen"),(0,l.kt)("li",{parentName:"ol"},'Viewing the libraries "By Read List"'),(0,l.kt)("li",{parentName:"ol"},"Searching in the search bar")),(0,l.kt)("h3",{id:"book-details-screen"},"Book details screen"),(0,l.kt)("p",null,"When viewing the details screen for a specific book that belongs to a read list, the read list will be displayed in a collapsible panel."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/book-readlist-collapsed.png",style:{maxHeight:"300px"}}),(0,l.kt)("p",null,"Click on the panel to expand it and see the content of the read list."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/book-readlist-expanded.png",style:{maxHeight:"300px"}}),(0,l.kt)("h3",{id:"viewing-the-libraries-by-read-list"},'Viewing the libraries "By Read List"'),(0,l.kt)("p",null,'Only show read lists that exist in the library. Opening a read list goes to the "read list details" screen (see below).'),(0,l.kt)("img",{src:"/assets/media/guides/readlists/browse-readlists.png",style:{maxHeight:"100px"}}),(0,l.kt)("h2",{id:"read-list-details"},"Read List details"),(0,l.kt)("p",null,"The read list details screen contains all the books that belong to the read list. It can include books from any library and any series. By adding items in different libraries or series to read lists, you can relate them to each other."),(0,l.kt)("h3",{id:"read-list-ordering"},"Read List ordering"),(0,l.kt)("p",null,"By default books in a read list are ordered manually. However, you can edit a read list and choose to disable the manual ordering, in which case books will be ordered by release date."),(0,l.kt)("p",null,"Either click on the edit button on the read list card."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-card.png",style:{maxHeight:"300px"}}),(0,l.kt)("p",null,"Or click on the edit button from the read list details screen."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-button.png",style:{maxHeight:"60px"}}),(0,l.kt)("p",null,"A dialog will show up, where you can edit the read list's ordering."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-dialog.png",style:{maxHeight:"300px"}}),(0,l.kt)("p",null,"A manually ordered read list will be showing as such in the read list details screen."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-manual-ordering.png",style:{maxHeight:"50px"}}),(0,l.kt)("h3",{id:"edit-read-list-elements"},"Edit read list elements"),(0,l.kt)("p",null,"From the read list details screen you can edit the elements composing a read list. To do so, click on the corresponding button in the toolbar."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements-button.png",style:{maxHeight:"80px"}}),(0,l.kt)("p",null,"The book cards will show two extra elements:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"a delete button, to remove the book from the read list"),(0,l.kt)("li",{parentName:"ul"},"a grip handle, which let you drag and drop books to reorder them (only available when the read list is manually ordered)")),(0,l.kt)("p",null,"Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements.png",style:{maxHeight:"400px"}}),(0,l.kt)("h2",{id:"deleting-a-read-list"},"Deleting a read list"),(0,l.kt)("p",null,"To delete a read list, look for the action menu icon ",(0,l.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,l.kt)("em",{parentName:"p"},"Delete"),"."),(0,l.kt)("p",null,"This will not delete the items in the read list, nor your media files."),(0,l.kt)("h2",{id:"import-read-lists-from-comicrack"},"Import read lists from ComicRack"),(0,l.kt)("p",null,"You can import ComicRack reading lists in ",(0,l.kt)("inlineCode",{parentName:"p"},".cbl")," format from the ",(0,l.kt)("em",{parentName:"p"},"Import > Read List")," screen."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/import.png",style:{maxHeight:"400px"}}),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},".cbl")," files contain the following information:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"read list name"),(0,l.kt)("li",{parentName:"ul"},"books contained in the list, in order"),(0,l.kt)("li",{parentName:"ul"},"for each book:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"name of the series it is part of"),(0,l.kt)("li",{parentName:"ul"},"volume of the series"),(0,l.kt)("li",{parentName:"ul"},"year of the series"),(0,l.kt)("li",{parentName:"ul"},"number of that book in the series")))),(0,l.kt)("p",null,"Komga will try to match each book in the list in the following way:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"part of a series named ",(0,l.kt)("inlineCode",{parentName:"li"},"Series")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"Series (Volume)")),(0,l.kt)("li",{parentName:"ul"},"where the number matches")),(0,l.kt)("p",null,"The result will be shown after you click the ",(0,l.kt)("em",{parentName:"p"},"Match")," button."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/import-results.png",style:{maxHeight:"500px"}}),(0,l.kt)("p",null,"If some books are not matched, you can manually choose a series and a book. Duplicates and missing books will be shown with an error indicator on the right side."),(0,l.kt)("p",null,"Click ",(0,l.kt)("em",{parentName:"p"},"Create")," to create the read list. If some books are unmatched, you can still create the read list (a confirmation dialog will pop-up)."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[6383],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var a=i(7294);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function s(e){for(var t=1;t=0||(l[i]=e[i]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(l[i]=e[i])}return l}var o=a.createContext({}),d=function(e){var t=a.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):s(s({},t),e)),i},c=function(e){var t=d(e.components);return a.createElement(o.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var i=e.components,l=e.mdxType,r=e.originalType,o=e.parentName,c=n(e,["components","mdxType","originalType","parentName"]),m=d(i),p=l,h=m["".concat(o,".").concat(p)]||m[p]||u[p]||r;return i?a.createElement(h,s(s({ref:t},c),{},{components:i})):a.createElement(h,s({ref:t},c))}));function h(e,t){var i=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=i.length,s=new Array(r);s[0]=p;var n={};for(var o in t)hasOwnProperty.call(t,o)&&(n[o]=t[o]);n.originalType=e,n[m]="string"==typeof e?e:l,s[1]=n;for(var d=2;d{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>n,toc:()=>d});var a=i(7462),l=(i(7294),i(3905));const r={},s="Read lists",n={unversionedId:"guides/readlists",id:"guides/readlists",title:"Read lists",description:'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.',source:"@site/docs/guides/readlists.md",sourceDirName:"guides",slug:"/guides/readlists",permalink:"/docs/guides/readlists",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/readlists.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Collections",permalink:"/docs/guides/collections"},next:{title:"Full Text Search",permalink:"/docs/guides/search"}},o={},d=[{value:"Adding books to a read list",id:"adding-books-to-a-read-list",level:2},{value:"Finding the Read Lists",id:"finding-the-read-lists",level:2},{value:"Book details screen",id:"book-details-screen",level:3},{value:"Viewing the libraries "By Read List"",id:"viewing-the-libraries-by-read-list",level:3},{value:"Read List details",id:"read-list-details",level:2},{value:"Read List ordering",id:"read-list-ordering",level:3},{value:"Edit read list elements",id:"edit-read-list-elements",level:3},{value:"Deleting a read list",id:"deleting-a-read-list",level:2},{value:"Import read lists from ComicRack",id:"import-read-lists-from-comicrack",level:2}],c={toc:d},m="wrapper";function u(e){let{components:t,...i}=e;return(0,l.kt)(m,(0,a.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"read-lists"},"Read lists"),(0,l.kt)("p",null,'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.'),(0,l.kt)("h2",{id:"adding-books-to-a-read-list"},"Adding books to a read list"),(0,l.kt)("p",null,"You can add a Book to a read list from the action menu icon ",(0,l.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,l.kt)("em",{parentName:"p"},"Add to read list"),"."),(0,l.kt)("p",null,"You can also select multiple books, and click on ",(0,l.kt)("em",{parentName:"p"},"Add to read list"),"."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/multiselect-add-readlist.png",style:{maxHeight:" 80px"}}),(0,l.kt)("p",null,"A dialog will show up, where you can either add books to an existing read list, or create a new read list."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/add-readlist-dialog.png",style:{maxHeight:" 300px"}}),(0,l.kt)("h2",{id:"finding-the-read-lists"},"Finding the Read Lists"),(0,l.kt)("p",null,"Read lists can be discovered or viewed in three ways:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Book details screen"),(0,l.kt)("li",{parentName:"ol"},'Viewing the libraries "By Read List"'),(0,l.kt)("li",{parentName:"ol"},"Searching in the search bar")),(0,l.kt)("h3",{id:"book-details-screen"},"Book details screen"),(0,l.kt)("p",null,"When viewing the details screen for a specific book that belongs to a read list, the read list will be displayed in a collapsible panel."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/book-readlist-collapsed.png",style:{maxHeight:"300px"}}),(0,l.kt)("p",null,"Click on the panel to expand it and see the content of the read list."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/book-readlist-expanded.png",style:{maxHeight:"300px"}}),(0,l.kt)("h3",{id:"viewing-the-libraries-by-read-list"},'Viewing the libraries "By Read List"'),(0,l.kt)("p",null,'Only show read lists that exist in the library. Opening a read list goes to the "read list details" screen (see below).'),(0,l.kt)("img",{src:"/assets/media/guides/readlists/browse-readlists.png",style:{maxHeight:"100px"}}),(0,l.kt)("h2",{id:"read-list-details"},"Read List details"),(0,l.kt)("p",null,"The read list details screen contains all the books that belong to the read list. It can include books from any library and any series. By adding items in different libraries or series to read lists, you can relate them to each other."),(0,l.kt)("h3",{id:"read-list-ordering"},"Read List ordering"),(0,l.kt)("p",null,"By default books in a read list are ordered manually. However, you can edit a read list and choose to disable the manual ordering, in which case books will be ordered by release date."),(0,l.kt)("p",null,"Either click on the edit button on the read list card."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-card.png",style:{maxHeight:"300px"}}),(0,l.kt)("p",null,"Or click on the edit button from the read list details screen."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-button.png",style:{maxHeight:"60px"}}),(0,l.kt)("p",null,"A dialog will show up, where you can edit the read list's ordering."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-dialog.png",style:{maxHeight:"300px"}}),(0,l.kt)("p",null,"A manually ordered read list will be showing as such in the read list details screen."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-manual-ordering.png",style:{maxHeight:"50px"}}),(0,l.kt)("h3",{id:"edit-read-list-elements"},"Edit read list elements"),(0,l.kt)("p",null,"From the read list details screen you can edit the elements composing a read list. To do so, click on the corresponding button in the toolbar."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements-button.png",style:{maxHeight:"80px"}}),(0,l.kt)("p",null,"The book cards will show two extra elements:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"a delete button, to remove the book from the read list"),(0,l.kt)("li",{parentName:"ul"},"a grip handle, which let you drag and drop books to reorder them (only available when the read list is manually ordered)")),(0,l.kt)("p",null,"Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements.png",style:{maxHeight:"400px"}}),(0,l.kt)("h2",{id:"deleting-a-read-list"},"Deleting a read list"),(0,l.kt)("p",null,"To delete a read list, look for the action menu icon ",(0,l.kt)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,l.kt)("em",{parentName:"p"},"Delete"),"."),(0,l.kt)("p",null,"This will not delete the items in the read list, nor your media files."),(0,l.kt)("h2",{id:"import-read-lists-from-comicrack"},"Import read lists from ComicRack"),(0,l.kt)("p",null,"You can import ComicRack reading lists in ",(0,l.kt)("inlineCode",{parentName:"p"},".cbl")," format from the ",(0,l.kt)("em",{parentName:"p"},"Import > Read List")," screen."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/import.png",style:{maxHeight:"400px"}}),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},".cbl")," files contain the following information:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"read list name"),(0,l.kt)("li",{parentName:"ul"},"books contained in the list, in order"),(0,l.kt)("li",{parentName:"ul"},"for each book:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"name of the series it is part of"),(0,l.kt)("li",{parentName:"ul"},"volume of the series"),(0,l.kt)("li",{parentName:"ul"},"year of the series"),(0,l.kt)("li",{parentName:"ul"},"number of that book in the series")))),(0,l.kt)("p",null,"Komga will try to match each book in the list in the following way:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"part of a series named ",(0,l.kt)("inlineCode",{parentName:"li"},"Series")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"Series (Volume)")),(0,l.kt)("li",{parentName:"ul"},"where the number matches")),(0,l.kt)("p",null,"The result will be shown after you click the ",(0,l.kt)("em",{parentName:"p"},"Match")," button."),(0,l.kt)("img",{src:"/assets/media/guides/readlists/import-results.png",style:{maxHeight:"500px"}}),(0,l.kt)("p",null,"If some books are not matched, you can manually choose a series and a book. Duplicates and missing books will be shown with an error indicator on the right side."),(0,l.kt)("p",null,"Click ",(0,l.kt)("em",{parentName:"p"},"Create")," to create the read list. If some books are unmatched, you can still create the read list (a confirmation dialog will pop-up)."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ebc1cc14.22160dfb.js b/assets/js/ebc1cc14.01d4e62c.js similarity index 99% rename from assets/js/ebc1cc14.22160dfb.js rename to assets/js/ebc1cc14.01d4e62c.js index f81ae6e0..f5e72fa9 100644 --- a/assets/js/ebc1cc14.22160dfb.js +++ b/assets/js/ebc1cc14.01d4e62c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[8284],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>y});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),p=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=n,y=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return r?a.createElement(y,s(s({ref:t},d),{},{components:r})):a.createElement(y,s({ref:t},d))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,s=new Array(o);s[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:n,s[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const o={},s="Read with Panels on iOS",i={unversionedId:"guides/panels",id:"guides/panels",title:"Read with Panels on iOS",description:"Background",source:"@site/docs/guides/panels.md",sourceDirName:"guides",slug:"/guides/panels",permalink:"/docs/guides/panels",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/panels.md",tags:[],version:"current",lastUpdatedAt:1697713534,formattedLastUpdatedAt:"Oct 19, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"},next:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"}},l={},p=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Panels",id:"adding-your-komga-server-to-panels",level:2},{value:"Komga as Import Service",id:"komga-as-import-service",level:2},{value:"Komga as a Library",id:"komga-as-a-library",level:2}],d={toc:p},u="wrapper";function c(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-with-panels-on-ios"},"Read with Panels on iOS"),(0,n.kt)("h2",{id:"background"},"Background"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://apps.apple.com/us/app/panels-comic-reader/id1236567663"},"Panels app")," allows you to connect with any OPDS compatible server. With Panels you will be able to to remotely download or stream your comics using your iPhone or iPad. With Panels, users can conveniently navigate through their entire Komga library and keep track of their reading progress."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Please note that Panels OPDS support requires either a Panels+ subscription or Panels in-app purchase.")),(0,n.kt)("h2",{id:"adding-your-komga-server-to-panels"},"Adding your Komga server to Panels"),(0,n.kt)("p",null,"An OPDS feed is added to Panels as an importing service. From that point, it can be used either as a new library or just to download titles to your own device library."),(0,n.kt)("p",null,"To add a new OPDS feed, open Panels and go to Library -> Connect Service -> OPDS."),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/01.png",style:{maxHeight:"800px"}}),(0,n.kt)("p",null,"You'll be taken to the OPDS configuration screen. Give any name to your server, then enter your ",(0,n.kt)("em",{parentName:"p"},"server address"),", ",(0,n.kt)("em",{parentName:"p"},"username"),", and ",(0,n.kt)("em",{parentName:"p"},"password"),". Tap on ",(0,n.kt)("em",{parentName:"p"},"Apply"),". "),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/02.png",style:{maxHeight:"800px"}}),(0,n.kt)("p",null,"Your Komga server should now appear both as a new library and as a new Import Service. Let's explore both options."),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/03.png",style:{maxHeight:"800px"}}),(0,n.kt)("h2",{id:"komga-as-import-service"},"Komga as Import Service"),(0,n.kt)("p",null,"You can use this method if you plan to use your Komga server mainly to import (download) comics into your device. "),(0,n.kt)("p",null,"To add content to your library, you can follow either of these 2 flows:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"From he content screen, tap your server, navigate and select the files you want to import, and last select where yo place them in your device library.")),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/04.png"}),(0,n.kt)("ol",{start:2},(0,n.kt)("li",{parentName:"ol"},'Navigate first to the location in your device library where you want your files to be imported. Then tap the 3 dot symbol and select "Import Files". Choose your server and find the files you want to download to your phone.')),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/05.png"}),(0,n.kt)("p",null,'From either of the above flows above, your download should start and be visible from the "Downloads" tab.'),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/06.png",style:{maxHeight:"800px"}}),(0,n.kt)("h2",{id:"komga-as-a-library"},"Komga as a Library"),(0,n.kt)("p",null,"Panels treats OPDS feeds as libraries. That means you can navigate your server library as if it was on your own device, with the benefit of keeping all files stored somewhere else.\nOnce you find a title you want to read, you can tap to open and start reading it (stream) or you can choose to download it for offline use. Long press a title (or select many) to show all options."),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/07.png"}))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkkomga_website=self.webpackChunkkomga_website||[]).push([[8284],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>y});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),p=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=n,y=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return r?a.createElement(y,s(s({ref:t},d),{},{components:r})):a.createElement(y,s({ref:t},d))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,s=new Array(o);s[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:n,s[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const o={},s="Read with Panels on iOS",i={unversionedId:"guides/panels",id:"guides/panels",title:"Read with Panels on iOS",description:"Background",source:"@site/docs/guides/panels.md",sourceDirName:"guides",slug:"/guides/panels",permalink:"/docs/guides/panels",draft:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/panels.md",tags:[],version:"current",lastUpdatedAt:1697792985,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"},next:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"}},l={},p=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Panels",id:"adding-your-komga-server-to-panels",level:2},{value:"Komga as Import Service",id:"komga-as-import-service",level:2},{value:"Komga as a Library",id:"komga-as-a-library",level:2}],d={toc:p},u="wrapper";function c(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"read-with-panels-on-ios"},"Read with Panels on iOS"),(0,n.kt)("h2",{id:"background"},"Background"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://apps.apple.com/us/app/panels-comic-reader/id1236567663"},"Panels app")," allows you to connect with any OPDS compatible server. With Panels you will be able to to remotely download or stream your comics using your iPhone or iPad. With Panels, users can conveniently navigate through their entire Komga library and keep track of their reading progress."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Please note that Panels OPDS support requires either a Panels+ subscription or Panels in-app purchase.")),(0,n.kt)("h2",{id:"adding-your-komga-server-to-panels"},"Adding your Komga server to Panels"),(0,n.kt)("p",null,"An OPDS feed is added to Panels as an importing service. From that point, it can be used either as a new library or just to download titles to your own device library."),(0,n.kt)("p",null,"To add a new OPDS feed, open Panels and go to Library -> Connect Service -> OPDS."),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/01.png",style:{maxHeight:"800px"}}),(0,n.kt)("p",null,"You'll be taken to the OPDS configuration screen. Give any name to your server, then enter your ",(0,n.kt)("em",{parentName:"p"},"server address"),", ",(0,n.kt)("em",{parentName:"p"},"username"),", and ",(0,n.kt)("em",{parentName:"p"},"password"),". Tap on ",(0,n.kt)("em",{parentName:"p"},"Apply"),". "),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/02.png",style:{maxHeight:"800px"}}),(0,n.kt)("p",null,"Your Komga server should now appear both as a new library and as a new Import Service. Let's explore both options."),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/03.png",style:{maxHeight:"800px"}}),(0,n.kt)("h2",{id:"komga-as-import-service"},"Komga as Import Service"),(0,n.kt)("p",null,"You can use this method if you plan to use your Komga server mainly to import (download) comics into your device. "),(0,n.kt)("p",null,"To add content to your library, you can follow either of these 2 flows:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"From he content screen, tap your server, navigate and select the files you want to import, and last select where yo place them in your device library.")),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/04.png"}),(0,n.kt)("ol",{start:2},(0,n.kt)("li",{parentName:"ol"},'Navigate first to the location in your device library where you want your files to be imported. Then tap the 3 dot symbol and select "Import Files". Choose your server and find the files you want to download to your phone.')),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/05.png"}),(0,n.kt)("p",null,'From either of the above flows above, your download should start and be visible from the "Downloads" tab.'),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/06.png",style:{maxHeight:"800px"}}),(0,n.kt)("h2",{id:"komga-as-a-library"},"Komga as a Library"),(0,n.kt)("p",null,"Panels treats OPDS feeds as libraries. That means you can navigate your server library as if it was on your own device, with the benefit of keeping all files stored somewhere else.\nOnce you find a title you want to read, you can tap to open and start reading it (stream) or you can choose to download it for offline use. Long press a title (or select many) to show all options."),(0,n.kt)("img",{src:"/assets/media/guides/panels-setup/07.png"}))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.bc398371.js b/assets/js/runtime~main.bc398371.js new file mode 100644 index 00000000..3ec6f784 --- /dev/null +++ b/assets/js/runtime~main.bc398371.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,c,f,b,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=d,r.c=t,e=[],r.O=(a,c,f,b)=>{if(!c){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[c,f,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,r.d(b,d),b},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",278:"d6e0cd3c",305:"97c4f258",473:"49136dfa",533:"b2b675dd",563:"1c21263c",632:"78978b71",836:"0480b142",855:"2c957fd7",1169:"4cc4731f",1477:"b2f554cd",1698:"41a2af15",1713:"a7023ddc",1778:"206b31bb",2239:"0920ba86",2535:"814f3328",2727:"4c25ac78",2854:"24227623",2865:"08fb5848",3089:"a6aa9e1f",3237:"1df93b7f",3287:"a624e12b",3438:"ca683365",3526:"767395cb",3608:"9e4087bc",3620:"7d6e8713",3817:"b9a7991f",3861:"04262cfc",4013:"01a85c17",4114:"55519d27",4119:"d135d818",4128:"a09c2993",4434:"ac07380c",4443:"b94207ad",4578:"cfba0797",5035:"df8142cd",5037:"03c48fcb",5203:"674e178f",5370:"5e80a3fb",5416:"d86518ca",5647:"b242fde9",5671:"7da97648",5674:"a981d65e",5880:"e1862fee",6103:"ccc49370",6236:"0c5c2428",6383:"e41126ef",6399:"58903ab2",6826:"b94d24b4",7021:"1ec3b236",7214:"416fe654",7426:"896f20ab",7547:"3fda2baf",7583:"59c4a0ab",7694:"01dfd4e6",7918:"17896441",7972:"c2d7cd96",8209:"98ce5054",8284:"ebc1cc14",8315:"25088eef",8336:"5592dbb1",8610:"6875c492",9112:"607df45e",9353:"a22ccb60",9514:"1be78505",9817:"14eb3368",9835:"4e7428db",9844:"1bb85636",9847:"0bf9748d",9880:"5ef0e9d6",9925:"2b8f2de1"}[e]||e)+"."+{53:"264aa445",278:"b6a488b4",305:"cc3805d9",473:"f49687bb",533:"0c7375a6",563:"855fb1c8",632:"e3dffc65",836:"880df7c1",855:"c70f02aa",1169:"6334e60d",1426:"0f2f2beb",1477:"2a4bfae1",1698:"a602136a",1713:"cac3ed1a",1778:"2c1772e6",2239:"bf4fe39e",2535:"44afc25f",2727:"e4b87ef1",2854:"e0b8ae91",2865:"f9024997",3089:"47842bf7",3237:"88907514",3287:"882a638f",3438:"7c2a9351",3526:"04527083",3608:"b3aa4c69",3620:"ea0c0d1e",3817:"50f4628f",3861:"26f2cc6d",4013:"02a09f97",4114:"0c6c2589",4119:"65acd907",4128:"9499458c",4434:"7fcfd89d",4443:"dc752376",4578:"2e1b9065",4972:"834f449c",5035:"66f0d45d",5037:"8347baa5",5203:"017e3942",5370:"1415f59d",5416:"395b04a1",5647:"053bc3eb",5671:"980f5b75",5674:"ab29e782",5880:"b97b22f7",6048:"fe274dbc",6103:"235cf018",6236:"8e402252",6383:"b05f3ff0",6399:"6d61701d",6826:"5dc6db6e",6945:"02a1c70e",7021:"979563b6",7214:"c0076a1f",7426:"c6345c0d",7547:"e85a2ebd",7583:"1670924b",7694:"86ccaac4",7918:"f2f12dfa",7972:"3711407a",8105:"d24e7527",8209:"1896c6d6",8284:"01d4e62c",8315:"49422631",8336:"9ca87331",8610:"df1d3737",8894:"452a55da",9112:"558bb10a",9353:"44571486",9514:"4c74fa8e",9817:"2475c578",9835:"1027eee5",9844:"8dabb926",9847:"55bafa49",9880:"4ad716ad",9925:"3d315027"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},b="komga-website:",r.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",24227623:"2854","935f2afb":"53",d6e0cd3c:"278","97c4f258":"305","49136dfa":"473",b2b675dd:"533","1c21263c":"563","78978b71":"632","0480b142":"836","2c957fd7":"855","4cc4731f":"1169",b2f554cd:"1477","41a2af15":"1698",a7023ddc:"1713","206b31bb":"1778","0920ba86":"2239","814f3328":"2535","4c25ac78":"2727","08fb5848":"2865",a6aa9e1f:"3089","1df93b7f":"3237",a624e12b:"3287",ca683365:"3438","767395cb":"3526","9e4087bc":"3608","7d6e8713":"3620",b9a7991f:"3817","04262cfc":"3861","01a85c17":"4013","55519d27":"4114",d135d818:"4119",a09c2993:"4128",ac07380c:"4434",b94207ad:"4443",cfba0797:"4578",df8142cd:"5035","03c48fcb":"5037","674e178f":"5203","5e80a3fb":"5370",d86518ca:"5416",b242fde9:"5647","7da97648":"5671",a981d65e:"5674",e1862fee:"5880",ccc49370:"6103","0c5c2428":"6236",e41126ef:"6383","58903ab2":"6399",b94d24b4:"6826","1ec3b236":"7021","416fe654":"7214","896f20ab":"7426","3fda2baf":"7547","59c4a0ab":"7583","01dfd4e6":"7694",c2d7cd96:"7972","98ce5054":"8209",ebc1cc14:"8284","25088eef":"8315","5592dbb1":"8336","6875c492":"8610","607df45e":"9112",a22ccb60:"9353","1be78505":"9514","14eb3368":"9817","4e7428db":"9835","1bb85636":"9844","0bf9748d":"9847","5ef0e9d6":"9880","2b8f2de1":"9925"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((c,b)=>f=e[a]=[c,b]));c.push(f[2]=b);var d=r.p+r.u(a),t=new Error;r.l(d,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,b,d=c[0],t=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,f,b]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(b,d),b},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",278:"d6e0cd3c",305:"97c4f258",473:"49136dfa",533:"b2b675dd",563:"1c21263c",632:"78978b71",836:"0480b142",855:"2c957fd7",1169:"4cc4731f",1477:"b2f554cd",1698:"41a2af15",1713:"a7023ddc",1778:"206b31bb",2239:"0920ba86",2535:"814f3328",2727:"4c25ac78",2854:"24227623",2865:"08fb5848",3089:"a6aa9e1f",3237:"1df93b7f",3287:"a624e12b",3438:"ca683365",3526:"767395cb",3608:"9e4087bc",3620:"7d6e8713",3817:"b9a7991f",3861:"04262cfc",4013:"01a85c17",4114:"55519d27",4119:"d135d818",4128:"a09c2993",4434:"ac07380c",4443:"b94207ad",4578:"cfba0797",5035:"df8142cd",5037:"03c48fcb",5203:"674e178f",5370:"5e80a3fb",5416:"d86518ca",5647:"b242fde9",5671:"7da97648",5674:"a981d65e",5880:"e1862fee",6103:"ccc49370",6236:"0c5c2428",6383:"e41126ef",6399:"58903ab2",6826:"b94d24b4",7021:"1ec3b236",7214:"416fe654",7426:"896f20ab",7547:"3fda2baf",7583:"59c4a0ab",7694:"01dfd4e6",7918:"17896441",7972:"c2d7cd96",8209:"98ce5054",8284:"ebc1cc14",8315:"25088eef",8336:"5592dbb1",8610:"6875c492",9112:"607df45e",9353:"a22ccb60",9514:"1be78505",9817:"14eb3368",9835:"4e7428db",9844:"1bb85636",9847:"0bf9748d",9880:"5ef0e9d6",9925:"2b8f2de1"}[e]||e)+"."+{53:"264aa445",278:"7bac8c80",305:"ed2d9f8d",473:"ac336df7",533:"0c7375a6",563:"855fb1c8",632:"e3dffc65",836:"7da62e68",855:"c70f02aa",1169:"34d0eb1f",1426:"0f2f2beb",1477:"2a4bfae1",1698:"a602136a",1713:"cac3ed1a",1778:"b5d45f60",2239:"224e779c",2535:"44afc25f",2727:"dbeef1d4",2854:"a3541fd8",2865:"f9024997",3089:"47842bf7",3237:"88907514",3287:"3f71bac2",3438:"496481b9",3526:"cf1475a1",3608:"b3aa4c69",3620:"da059be4",3817:"50f4628f",3861:"26f2cc6d",4013:"02a09f97",4114:"723d3ba6",4119:"000585f6",4128:"1d17d050",4434:"ce23a3d5",4443:"1cf04193",4578:"2e1b9065",4972:"834f449c",5035:"2d2894e7",5037:"ca106779",5203:"276682dd",5370:"1415f59d",5416:"e1445cf3",5647:"6c82f9e9",5671:"7621a791",5674:"d8f0c173",5880:"b97b22f7",6048:"fe274dbc",6103:"235cf018",6236:"f4aba4c7",6383:"159e42f5",6399:"016468f7",6826:"4d252087",6945:"02a1c70e",7021:"410f639a",7214:"62e3f434",7426:"c6345c0d",7547:"e85a2ebd",7583:"1670924b",7694:"55ea8c19",7918:"f2f12dfa",7972:"1dcda5d9",8105:"d24e7527",8209:"079c67f0",8284:"22160dfb",8315:"49422631",8336:"882478c2",8610:"df1d3737",8894:"452a55da",9112:"6c4f2561",9353:"04e98b36",9514:"4c74fa8e",9817:"2475c578",9835:"1027eee5",9844:"8a5fe3ac",9847:"b0c54f69",9880:"683b49a9",9925:"8e04d80b"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},b="komga-website:",r.l=(e,c,a,d)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",24227623:"2854","935f2afb":"53",d6e0cd3c:"278","97c4f258":"305","49136dfa":"473",b2b675dd:"533","1c21263c":"563","78978b71":"632","0480b142":"836","2c957fd7":"855","4cc4731f":"1169",b2f554cd:"1477","41a2af15":"1698",a7023ddc:"1713","206b31bb":"1778","0920ba86":"2239","814f3328":"2535","4c25ac78":"2727","08fb5848":"2865",a6aa9e1f:"3089","1df93b7f":"3237",a624e12b:"3287",ca683365:"3438","767395cb":"3526","9e4087bc":"3608","7d6e8713":"3620",b9a7991f:"3817","04262cfc":"3861","01a85c17":"4013","55519d27":"4114",d135d818:"4119",a09c2993:"4128",ac07380c:"4434",b94207ad:"4443",cfba0797:"4578",df8142cd:"5035","03c48fcb":"5037","674e178f":"5203","5e80a3fb":"5370",d86518ca:"5416",b242fde9:"5647","7da97648":"5671",a981d65e:"5674",e1862fee:"5880",ccc49370:"6103","0c5c2428":"6236",e41126ef:"6383","58903ab2":"6399",b94d24b4:"6826","1ec3b236":"7021","416fe654":"7214","896f20ab":"7426","3fda2baf":"7547","59c4a0ab":"7583","01dfd4e6":"7694",c2d7cd96:"7972","98ce5054":"8209",ebc1cc14:"8284","25088eef":"8315","5592dbb1":"8336","6875c492":"8610","607df45e":"9112",a22ccb60:"9353","1be78505":"9514","14eb3368":"9817","4e7428db":"9835","1bb85636":"9844","0bf9748d":"9847","5ef0e9d6":"9880","2b8f2de1":"9925"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var b=new Promise(((a,b)=>f=e[c]=[a,b]));a.push(f[2]=b);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);nArchive | Komga - + - + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index ed17991e..855450c5 100644 --- a/blog/index.html +++ b/blog/index.html @@ -6,13 +6,13 @@ Announcements | Komga - +

· 2 min read
gotson

The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.

Before upgrading

  • If you run Docker, it is advisable to use the 0.x tag instead of latest. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.
  • Backup your database.sqlite. You can find it in the configuration directory, by default:
    • on Windows: %USERPROFILE%/.komga/database.sqlite
    • on Unix: ~/.komga/database.sqlite
    • on Docker: in the directory you mounted as /config

Breaking changes

  • The minimum Java version required will be Java 17:
    • If you run Komga using the jar, you will need to make sure your Java version is sufficient by running java -version.
    • If you run Komga using Docker, you don't need to do anything.
  • The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.
  • The default port will be changed from 8080 to 25600:
    • If you use Docker, you will need to update your container or compose configuration to expose the new port.
    • You may need to adjust your reverse proxy settings.
    • You can still change the port through configuration.
- + \ No newline at end of file diff --git a/blog/prepare-v1/index.html b/blog/prepare-v1/index.html index 24d8afc8..3af86763 100644 --- a/blog/prepare-v1/index.html +++ b/blog/prepare-v1/index.html @@ -6,13 +6,13 @@ Prepare for v1.0.0 | Komga - +

Prepare for v1.0.0

· 2 min read
gotson

The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.

Before upgrading

  • If you run Docker, it is advisable to use the 0.x tag instead of latest. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.
  • Backup your database.sqlite. You can find it in the configuration directory, by default:
    • on Windows: %USERPROFILE%/.komga/database.sqlite
    • on Unix: ~/.komga/database.sqlite
    • on Docker: in the directory you mounted as /config

Breaking changes

  • The minimum Java version required will be Java 17:
    • If you run Komga using the jar, you will need to make sure your Java version is sufficient by running java -version.
    • If you run Komga using Docker, you don't need to do anything.
  • The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.
  • The default port will be changed from 8080 to 25600:
    • If you use Docker, you will need to update your container or compose configuration to expose the new port.
    • You may need to adjust your reverse proxy settings.
    • You can still change the port through configuration.
- + \ No newline at end of file diff --git a/blog/tags/breaking-change/index.html b/blog/tags/breaking-change/index.html index 18ae90e1..65e406c9 100644 --- a/blog/tags/breaking-change/index.html +++ b/blog/tags/breaking-change/index.html @@ -6,13 +6,13 @@ One post tagged with "breaking change" | Komga - +

One post tagged with "breaking change"

View All Tags

· 2 min read
gotson

The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.

Before upgrading

  • If you run Docker, it is advisable to use the 0.x tag instead of latest. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.
  • Backup your database.sqlite. You can find it in the configuration directory, by default:
    • on Windows: %USERPROFILE%/.komga/database.sqlite
    • on Unix: ~/.komga/database.sqlite
    • on Docker: in the directory you mounted as /config

Breaking changes

  • The minimum Java version required will be Java 17:
    • If you run Komga using the jar, you will need to make sure your Java version is sufficient by running java -version.
    • If you run Komga using Docker, you don't need to do anything.
  • The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.
  • The default port will be changed from 8080 to 25600:
    • If you use Docker, you will need to update your container or compose configuration to expose the new port.
    • You may need to adjust your reverse proxy settings.
    • You can still change the port through configuration.
- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index 4e45d951..605a7af5 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -6,13 +6,13 @@ Tags | Komga - + - + \ No newline at end of file diff --git a/blog/tags/komga/index.html b/blog/tags/komga/index.html index c4bec6d8..92cea7e7 100644 --- a/blog/tags/komga/index.html +++ b/blog/tags/komga/index.html @@ -6,13 +6,13 @@ One post tagged with "komga" | Komga - +

One post tagged with "komga"

View All Tags

· 2 min read
gotson

The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.

Before upgrading

  • If you run Docker, it is advisable to use the 0.x tag instead of latest. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.
  • Backup your database.sqlite. You can find it in the configuration directory, by default:
    • on Windows: %USERPROFILE%/.komga/database.sqlite
    • on Unix: ~/.komga/database.sqlite
    • on Docker: in the directory you mounted as /config

Breaking changes

  • The minimum Java version required will be Java 17:
    • If you run Komga using the jar, you will need to make sure your Java version is sufficient by running java -version.
    • If you run Komga using Docker, you don't need to do anything.
  • The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.
  • The default port will be changed from 8080 to 25600:
    • If you use Docker, you will need to update your container or compose configuration to expose the new port.
    • You may need to adjust your reverse proxy settings.
    • You can still change the port through configuration.
- + \ No newline at end of file diff --git a/blog/tags/upgrade/index.html b/blog/tags/upgrade/index.html index b7585644..2c80fb04 100644 --- a/blog/tags/upgrade/index.html +++ b/blog/tags/upgrade/index.html @@ -6,13 +6,13 @@ One post tagged with "upgrade" | Komga - +

One post tagged with "upgrade"

View All Tags

· 2 min read
gotson

The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.

Before upgrading

  • If you run Docker, it is advisable to use the 0.x tag instead of latest. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.
  • Backup your database.sqlite. You can find it in the configuration directory, by default:
    • on Windows: %USERPROFILE%/.komga/database.sqlite
    • on Unix: ~/.komga/database.sqlite
    • on Docker: in the directory you mounted as /config

Breaking changes

  • The minimum Java version required will be Java 17:
    • If you run Komga using the jar, you will need to make sure your Java version is sufficient by running java -version.
    • If you run Komga using Docker, you don't need to do anything.
  • The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.
  • The default port will be changed from 8080 to 25600:
    • If you use Docker, you will need to update your container or compose configuration to expose the new port.
    • You may need to adjust your reverse proxy settings.
    • You can still change the port through configuration.
- + \ No newline at end of file diff --git a/docs/api/deprecation/index.html b/docs/api/deprecation/index.html index 3a639f63..c4755cc0 100644 --- a/docs/api/deprecation/index.html +++ b/docs/api/deprecation/index.html @@ -6,13 +6,13 @@ Deprecation | Komga - +
-

Deprecation

To be removed in 2.0.0

The following API endpoints will be removed in version 2.0.0.

PUT /api/v1/libraries/{libraryId}

Deprecated since version: 1.3.0

Use PATCH /api/v1/libraries/{libraryId} instead, without any change needed. The PUT endpoint redirects to the PATCH endpoint internally.

The endpoint now accepts a partial DTO, and will only update fields that are present.

- +

Deprecation

To be removed in 2.0.0

The following API endpoints will be removed in version 2.0.0.

PUT /api/v1/libraries/{libraryId}

Deprecated since version: 1.3.0

Use PATCH /api/v1/libraries/{libraryId} instead, without any change needed. The PUT endpoint redirects to the PATCH endpoint internally.

The endpoint now accepts a partial DTO, and will only update fields that are present.

+ \ No newline at end of file diff --git a/docs/api/rest/index.html b/docs/api/rest/index.html index 650c1f34..43c04c96 100644 --- a/docs/api/rest/index.html +++ b/docs/api/rest/index.html @@ -6,13 +6,13 @@ REST API | Komga - +
-

REST API

Komga offers a REST API, which you can browse using Swagger. It's available at /swagger-ui.html.

The OpenAPI specification is also available here.

Authenticating

Most endpoints require authentication. Authentication is done using Basic Authentication and can be set on any endpoint.

Sessions

Upon successful authentication, a session is created, and can be reused.

  • By default, a SESSION cookie is set via Set-Cookie response header. This works well for browsers and clients that can handle cookies.
  • If you specify a header X-Auth-Token during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.

If you need to set the session cookie later on, you can call /api/v1/login/set-cookie with X-Auth-Token. The response will contain the Set-Cookie header.

Remember Me

During authentication, if a request parameter remember-me is passed and set to true, the server will also return a remember-me cookie. This cookie will be used to login automatically even if the session has expired.

Logout

You can explicitely logout an existing session by calling /api/logout. This would return a 204.

- +

REST API

Komga offers a REST API, which you can browse using Swagger. It's available at /swagger-ui.html.

The OpenAPI specification is also available here.

Authenticating

Most endpoints require authentication. Authentication is done using Basic Authentication and can be set on any endpoint.

Sessions

Upon successful authentication, a session is created, and can be reused.

  • By default, a SESSION cookie is set via Set-Cookie response header. This works well for browsers and clients that can handle cookies.
  • If you specify a header X-Auth-Token during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.

If you need to set the session cookie later on, you can call /api/v1/login/set-cookie with X-Auth-Token. The response will contain the Set-Cookie header.

Remember Me

During authentication, if a request parameter remember-me is passed and set to true, the server will also return a remember-me cookie. This cookie will be used to login automatically even if the session has expired.

Logout

You can explicitely logout an existing session by calling /api/logout. This would return a 204.

+ \ No newline at end of file diff --git a/docs/category/guides/index.html b/docs/category/guides/index.html index 5a94ef5e..dd7958fd 100644 --- a/docs/category/guides/index.html +++ b/docs/category/guides/index.html @@ -6,13 +6,13 @@ Guides | Komga - +

Guides

📄️ Emptying Library Trash

Like modern operating systems, Komga uses a concept of placing items in the “trash” before they’re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the “trash”. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn’t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an “Empty Trash” on your Server.

- + \ No newline at end of file diff --git a/docs/category/installation/index.html b/docs/category/installation/index.html index 8fd3f26a..9c32d519 100644 --- a/docs/category/installation/index.html +++ b/docs/category/installation/index.html @@ -6,13 +6,13 @@ Installation | Komga - + - + \ No newline at end of file diff --git a/docs/category/official-methods/index.html b/docs/category/official-methods/index.html index 1782ed90..e8cb0bd0 100644 --- a/docs/category/official-methods/index.html +++ b/docs/category/official-methods/index.html @@ -6,13 +6,13 @@ Official methods | Komga - + - + \ No newline at end of file diff --git a/docs/category/readers/index.html b/docs/category/readers/index.html index 757bd042..8cfc952d 100644 --- a/docs/category/readers/index.html +++ b/docs/category/readers/index.html @@ -6,13 +6,13 @@ Readers | Komga - + - + \ No newline at end of file diff --git a/docs/community/index.html b/docs/community/index.html index 57723e02..2522109b 100644 --- a/docs/community/index.html +++ b/docs/community/index.html @@ -6,13 +6,13 @@ Community | Komga - +
-

Community

This page lists community applications or tools that can be used alongside Komga.

Komf

Komga and Kavita Metadata Fetcher is a tool that fetches metadata and thumbnails for your digital comic book library. It can automatically pick up added series and update their metadata and thumbnail.

Kurp

Komga and Kavita upscaling reverse proxy. Reverse proxy that intercepts image requests and applies upscaling. Other requests are transparently proxied without noticable delay

Manga Manager

Manga Manager is an all-in-one tool to make managing your manga library easy. Has a built-in metadata editor as well as cover and back cover editor.

KoMI

KoMI is a user script that adds buttons in the series page to perform metadata matching with online sources.

Mylar League

Mylar League is a collection of various tools to aid in the integration of mylar and komga with leagueofcomicgeeks.com.

- +

Community

This page lists community applications or tools that can be used alongside Komga.

Komf

Komga and Kavita Metadata Fetcher is a tool that fetches metadata and thumbnails for your digital comic book library. It can automatically pick up added series and update their metadata and thumbnail.

Kurp

Komga and Kavita upscaling reverse proxy. Reverse proxy that intercepts image requests and applies upscaling. Other requests are transparently proxied without noticable delay

Manga Manager

Manga Manager is an all-in-one tool to make managing your manga library easy. Has a built-in metadata editor as well as cover and back cover editor.

KoMI

KoMI is a user script that adds buttons in the series page to perform metadata matching with online sources.

Mylar League

Mylar League is a collection of various tools to aid in the integration of mylar and komga with leagueofcomicgeeks.com.

+ \ No newline at end of file diff --git a/docs/contribution/index.html b/docs/contribution/index.html index dc91e2e9..523cb70f 100644 --- a/docs/contribution/index.html +++ b/docs/contribution/index.html @@ -6,13 +6,13 @@ Contribution | Komga - +
-

Contribution

Code

Skilled at code? Know how to improve something or you generally want to support the creation of the app?

Application

The main application: gotson/komga GitHub issues

Tachiyomi Extension

The official Komga extension for Tachiyomi: tachiyomiorg/tachiyomi-extensions

Website

The repository that hosts this very website you're reading on now: gotson/komga-website

Translation

Translation status

Want to help translate the app to your language? You can easily help by utilizing a service we use called Weblate.

Visit our translation project here.

Project status

Translation status

Donation

If you can't contribute code, but you still wish to help, then you can choose to contribute financially by using the buttons below, or going directly to any of those platforms:

Sponsors


- +

Contribution

Code

Skilled at code? Know how to improve something or you generally want to support the creation of the app?

Application

The main application: gotson/komga GitHub issues

Tachiyomi Extension

The official Komga extension for Tachiyomi: tachiyomiorg/tachiyomi-extensions

Website

The repository that hosts this very website you're reading on now: gotson/komga-website

Translation

Translation status

Want to help translate the app to your language? You can easily help by utilizing a service we use called Weblate.

Visit our translation project here.

Project status

Translation status

Donation

If you can't contribute code, but you still wish to help, then you can choose to contribute financially by using the buttons below, or going directly to any of those platforms:

Sponsors


+ \ No newline at end of file diff --git a/docs/faq/index.html b/docs/faq/index.html index 773d0367..edc5cb11 100644 --- a/docs/faq/index.html +++ b/docs/faq/index.html @@ -6,14 +6,14 @@ Frequently Asked Questions | Komga - +

Frequently Asked Questions

I forgot my password

Either ask an admin to reset your password, or use the Command Line Interface to reset it by yourself.

Where can I find the log files?

By default (if you haven't changed the configuration), log files are located:

  • on the Windows app: %LOCALAPPDATA%/Komga/logs/komga.log
  • on the macOS app: ~/Library/Logs/Komga/komga.log
  • on Windows: %USERPROFILE%/.komga/komga.log
  • on macOS or Unix: ~/.komga/komga.log
  • on Docker: in the directory you mounted as /config, in a subdirectory called logs

How to enable DEBUG or TRACE logs?

Via an application.yml

Add the following key in your application.yml:

logging.level.org.gotson.komga: DEBUG

or

logging.level.org.gotson.komga: TRACE

Using the jar via the command line

Start the jar with the following option:

java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=DEBUG

or

java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=TRACE

Using Docker

Add the following environment variable:

LOGGING_LEVEL_ORG_GOTSON_KOMGA=DEBUG

or

LOGGING_LEVEL_ORG_GOTSON_KOMGA=TRACE

Komga seems slow, how can I check what's going on?

If any activity is going on, an animated yellow bar will appear below the top-left logo. Hover your cursor over the bar to see the details of all pending tasks.

The memory consumption is huge

TL;DR: The operating system does not report the real memory usage of the application, so don't look at those figures.

Komga runs on the Java Virtual Machine (JVM). The JVM works differently than other native programs in regard to memory consumption. -On startup, the JVM will reserve some memory from the OS, but that doesn't mean this memory is used by the application. If the OS needs to reclaim that memory, the JVM will try to release it.

By default, the JVM would reserve 1/4th of the physical memory (depends on the total memory and JVM version), for instance if you have 32 Gb of memory, the JVM would reserve 8 Gb.

To increase or limit the maximum memory, see here (jar) and here (Docker).

How can I sync reading progress with tracker websites?

Komga does not support this outside the box.

You can try MAL-Sync which integrates with Komga and works with MyAnimeList, Kitsu, Anilist and others.

Webreader double pages are not showing as single page

The double pages feature of the webreader requires image sizes to be available. This feature was added in v0.51.0. If your books have been analyzed before that version, you will need to re-analyze them in order for the double pages feature to work properly.

Media type application/x-7z-compressed is not supported

Your files are compressed using 7zip, which is not supported. Extract your archives and compress them again using the zip format.

My books/series show a different name than the files/folders

Komga automatically import metadata from EPUB files and from ComicInfo.xml for cbz/cbr. The imported metadata will override the file/folder name.

This server has already been claimed

The server cannot be claimed if a user already exists in the database. It can happen when you start Komga for the first time without the claim profile as Komga will generate a default user.

You can solve the issue by deleting the database. By default it is located in ~/.komga/database.sqlite. ~ is your home directory on Unix, and your User profile on Windows.

How can I move a library to a different folder?

You can follow those steps:

  1. Make sure File Hashing is enabled on the library.
  2. Disable automatically emptying the trash for the library.
  3. Perform a scan on the library and let all tasks finish. This will ensure all files are hashed.
  4. Stop Komga.
  5. Move/copy the files to the new folder.
  6. Start Komga.
  7. Edit the library and choose the new folder as the library root directory.
  8. A scan will be triggered automatically after saving the library. The scan could take some time depending on the size of the library.
  9. Once the scan is finished, the series and books should have been matched with the files in the new folder.

Scan doesn't pick up new files under mergerfs

Add func.getattr=newest to the options in your /etc/fstab entry for the mergerfs volume. By default, mergerfs doesn't update the modified times for everything for performance reasons. This forces it to. In most cases the performance impact is negligible.

Example:

/media/user/disk* /media/user/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,minfreespace=50G,category.create=mfs,func.getattr=newest,fsname=mergerfs 0 0

How to enable support for Jpeg XL?

Jpeg XL is supported by default in the official Docker image for linux/amd64 only.

In order for Komga to handle Jpeg XL files (.jxl), you will need to:

  • install libjxl (see here for some known installation methods)
  • follow the requirements to launch java with the correct arguments and environment variable

Docker on Raspberry PI arm32: No monotonic clock was available

If you encounter the following message when starting the container:

OpenJDK Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes

Your host system needs to have installed:

  • Docker version 19.03.9 or newer
  • libseccomp version 2.4.2 or newer
- +On startup, the JVM will reserve some memory from the OS, but that doesn't mean this memory is used by the application. If the OS needs to reclaim that memory, the JVM will try to release it.

By default, the JVM would reserve 1/4th of the physical memory (depends on the total memory and JVM version), for instance if you have 32 Gb of memory, the JVM would reserve 8 Gb.

To increase or limit the maximum memory, see here (jar) and here (Docker).

How can I sync reading progress with tracker websites?

Komga does not support this outside the box.

You can try MAL-Sync which integrates with Komga and works with MyAnimeList, Kitsu, Anilist and others.

Webreader double pages are not showing as single page

The double pages feature of the webreader requires image sizes to be available. This feature was added in v0.51.0. If your books have been analyzed before that version, you will need to re-analyze them in order for the double pages feature to work properly.

Media type application/x-7z-compressed is not supported

Your files are compressed using 7zip, which is not supported. Extract your archives and compress them again using the zip format.

My books/series show a different name than the files/folders

Komga automatically import metadata from EPUB files and from ComicInfo.xml for cbz/cbr. The imported metadata will override the file/folder name.

This server has already been claimed

The server cannot be claimed if a user already exists in the database. It can happen when you start Komga for the first time without the claim profile as Komga will generate a default user.

You can solve the issue by deleting the database. By default it is located in ~/.komga/database.sqlite. ~ is your home directory on Unix, and your User profile on Windows.

How can I move a library to a different folder?

You can follow those steps:

  1. Make sure File Hashing is enabled on the library.
  2. Disable automatically emptying the trash for the library.
  3. Perform a scan on the library and let all tasks finish. This will ensure all files are hashed.
  4. Stop Komga.
  5. Move/copy the files to the new folder.
  6. Start Komga.
  7. Edit the library and choose the new folder as the library root directory.
  8. A scan will be triggered automatically after saving the library. The scan could take some time depending on the size of the library.
  9. Once the scan is finished, the series and books should have been matched with the files in the new folder.

Scan doesn't pick up new files under mergerfs

Add func.getattr=newest to the options in your /etc/fstab entry for the mergerfs volume. By default, mergerfs doesn't update the modified times for everything for performance reasons. This forces it to. In most cases the performance impact is negligible.

Example:

/media/user/disk* /media/user/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,minfreespace=50G,category.create=mfs,func.getattr=newest,fsname=mergerfs 0 0

How to enable support for Jpeg XL?

Jpeg XL is supported by default in the official Docker image for linux/amd64 only.

In order for Komga to handle Jpeg XL files (.jxl), you will need to:

  • install libjxl (see here for some known installation methods)
  • follow the requirements to launch java with the correct arguments and environment variable

Docker on Raspberry PI arm32: No monotonic clock was available

If you encounter the following message when starting the container:

OpenJDK Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes

Your host system needs to have installed:

  • Docker version 19.03.9 or newer
  • libseccomp version 2.4.2 or newer
+ \ No newline at end of file diff --git a/docs/guides/announcements/index.html b/docs/guides/announcements/index.html index 1fb75eea..c768925e 100644 --- a/docs/guides/announcements/index.html +++ b/docs/guides/announcements/index.html @@ -6,13 +6,13 @@ Announcements | Komga - + - + + \ No newline at end of file diff --git a/docs/guides/cdisplayex/index.html b/docs/guides/cdisplayex/index.html index 20af2c89..26074a1e 100644 --- a/docs/guides/cdisplayex/index.html +++ b/docs/guides/cdisplayex/index.html @@ -6,7 +6,7 @@ Read with CDisplayEx | Komga - + @@ -21,8 +21,8 @@ added to the home page. In this view, the server must be reachable. You will be able to navigate in a virtual folder structure.

tip

To see a thumbnail on the folder and to display statistical information, you must activate the thumbnail option: Show a thumbnail on folders

Library

Once the synchronization is complete, the location has been added to the application library, it is accessible offline. Go to the series from the home page or by using the navigation bar. If you want to read a book offline you need to download it, -long press on the book and use the download button.

Reading status

Reading status and read progress are synced at different times when you use the app.

  • When you sync location manually. (Make a long press on the location and start the synchronization)
  • When you browse or refresh a series folder from a location.
  • When you open and close a book.
  • When the app goes into the background while a book is open.
- +long press on the book and use the download button.

Reading status

Reading status and read progress are synced at different times when you use the app.

  • When you sync location manually. (Make a long press on the location and start the synchronization)
  • When you browse or refresh a series folder from a location.
  • When you open and close a book.
  • When the app goes into the background while a book is open.
+ \ No newline at end of file diff --git a/docs/guides/chunky/index.html b/docs/guides/chunky/index.html index 9f6441c9..c522b261 100644 --- a/docs/guides/chunky/index.html +++ b/docs/guides/chunky/index.html @@ -6,13 +6,13 @@ Read with Chunky Reader (iPad) | Komga - +
-

Read with Chunky Reader (iPad)

Note

Chunky Reader does not work anymore with Komga 1.4.0+

Background

Thanks to Komga's OPDS support, you can use the Chunky Reader application for iPad to remotely download or stream your comics. Chunky Reader is at time of writing the only comic reader on iPad that supports the OPDS page streaming extension. This lets you stream individual pages without having to download the whole comic file onto your iPad.

caution

Please note that Chunky Reader's OPDS support requires the in app purchase which costs $3.99 or the equivalent of your local currency.

Adding your Komga server to Chunky

First you need to make sure that you can browse to your komga server's web UI from Safari on your iPad. Open up Safari, navigate to your server's address and log in as normal. Next, open the address bar, delete /dashboard part which is added automatically when you log in, and then append /opds/v1.2/catalog to the end of the URL and press return.

You should then see a screen like the below image, if you do, you're ready to proceed with configuring Chunky Reader. You may wish to copy the URL to your iPad clipboard for pasting later.

Open Chunky Reader and click the cloud icon, circled in red in the screenshot below.

In the pop up window, click the plus button, circled in red in the screenshot below.

Now choose the green plus button next to "Calibre/Ubooquity/OPDS".

In this dialogue box, enter your server address (paste from the earlier step if you copied it to clipboard), username, and password. Then click Connect. Your Komga server should now appear in the cloud icon menu. You can stream comics by navigating to them and tapping the name, or download them via clicking the blue download button next to a comic. You can download all the comics in a given view by tapping the All button in the bottom right of the menu.

Limitations

Reading comics via Chunky Reader does not update the read progress. This means you will need to manually mark your comics as read via the web UI.

- +

Read with Chunky Reader (iPad)

Note

Chunky Reader does not work anymore with Komga 1.4.0+

Background

Thanks to Komga's OPDS support, you can use the Chunky Reader application for iPad to remotely download or stream your comics. Chunky Reader is at time of writing the only comic reader on iPad that supports the OPDS page streaming extension. This lets you stream individual pages without having to download the whole comic file onto your iPad.

caution

Please note that Chunky Reader's OPDS support requires the in app purchase which costs $3.99 or the equivalent of your local currency.

Adding your Komga server to Chunky

First you need to make sure that you can browse to your komga server's web UI from Safari on your iPad. Open up Safari, navigate to your server's address and log in as normal. Next, open the address bar, delete /dashboard part which is added automatically when you log in, and then append /opds/v1.2/catalog to the end of the URL and press return.

You should then see a screen like the below image, if you do, you're ready to proceed with configuring Chunky Reader. You may wish to copy the URL to your iPad clipboard for pasting later.

Open Chunky Reader and click the cloud icon, circled in red in the screenshot below.

In the pop up window, click the plus button, circled in red in the screenshot below.

Now choose the green plus button next to "Calibre/Ubooquity/OPDS".

In this dialogue box, enter your server address (paste from the earlier step if you copied it to clipboard), username, and password. Then click Connect. Your Komga server should now appear in the cloud icon menu. You can stream comics by navigating to them and tapping the name, or download them via clicking the blue download button next to a comic. You can download all the comics in a given view by tapping the All button in the bottom right of the menu.

Limitations

Reading comics via Chunky Reader does not update the read progress. This means you will need to manually mark your comics as read via the web UI.

+ \ No newline at end of file diff --git a/docs/guides/cli/index.html b/docs/guides/cli/index.html index 1958a1c4..cad66d09 100644 --- a/docs/guides/cli/index.html +++ b/docs/guides/cli/index.html @@ -6,13 +6,13 @@ Command Line Interface | Komga - +
-

Command Line Interface

Komga offers a few commands available from the command line.

How to use?

You just need to append the command to the command line. Note that Komga will still start and run as usual.

With the jar file

Example:

java -jar komga-x.y.z.jar --list-users

With docker run

Example:

docker run ghcr.io/gotson/komga:latest --list-users

With docker-compose

You can override the command:

services:
komga:
image: gotson/komga:latest
command: --newpassword=toto --reset=admin@example.org

Available commands

List users

Command: --list-users

This will output all the users configured in the database. The output will be shown in the console or the logs.

Example:

2023-08-02T13:41:45.215+08:00 INFO 1979 --- [ main] o.g.k.i.apprunner.ListUsersRunner : Here is a list of all users: [admin@example.org, jacky@example.org]

Reset password for a user

Command: --reset=user@domain.com --newpassword=YourNewPassword

This will reset the password for the specified user.

Example:

2023-08-02T13:50:42.998+08:00 INFO 2806 --- [ main] o.g.k.i.apprunner.PasswordResetRunner : Reset password for user: admin@example.org

- +

Command Line Interface

Komga offers a few commands available from the command line.

How to use?

You just need to append the command to the command line. Note that Komga will still start and run as usual.

With the jar file

Example:

java -jar komga-x.y.z.jar --list-users

With docker run

Example:

docker run ghcr.io/gotson/komga:latest --list-users

With docker-compose

You can override the command:

services:
komga:
image: gotson/komga:latest
command: --newpassword=toto --reset=admin@example.org

Available commands

List users

Command: --list-users

This will output all the users configured in the database. The output will be shown in the console or the logs.

Example:

2023-08-02T13:41:45.215+08:00 INFO 1979 --- [ main] o.g.k.i.apprunner.ListUsersRunner : Here is a list of all users: [admin@example.org, jacky@example.org]

Reset password for a user

Command: --reset=user@domain.com --newpassword=YourNewPassword

This will reset the password for the specified user.

Example:

2023-08-02T13:50:42.998+08:00 INFO 2806 --- [ main] o.g.k.i.apprunner.PasswordResetRunner : Reset password for user: admin@example.org

+ \ No newline at end of file diff --git a/docs/guides/collections/index.html b/docs/guides/collections/index.html index b8b66209..2f2f6192 100644 --- a/docs/guides/collections/index.html +++ b/docs/guides/collections/index.html @@ -6,13 +6,13 @@ Collections | Komga - +
-

Collections

Collections let you gather related series together. For example, you might add all the Batman series together in a "Batman" collection.

Adding series to a collection

You can add a Series to a collection from the action menu icon and click on Add to collection.

You can also select multiple series, and click on Add to collection.

A dialog will show up, where you can either add series to an existing collection, or create a new collection.

Finding the Collections

Collections can be discovered or viewed in three ways:

  1. Series details screen
  2. Viewing the libraries "By Collection"
  3. Searching in the search bar

Series details screen

When viewing the details screen for a specific series that belongs to a collection, the collection will be displayed in a collapsible panel.

Click on the panel to expand it and see the content of the collection.

Viewing the libraries "By Collection"

Only show collections that exist in the library. Opening a collection goes to the "collection details" screen (see below).

Collection details

The collection details screen contains all the series that belong to the collection. It can include series from any library. By adding items in different libraries to collections, you can relate them to each other.

Collection ordering

By default collections will order series by alphabetical sort order. However, you can edit a collection and choose to manually sort series in a collection. You may want to do so if a collection has a specific reading order for example.

Either click on the edit button on the collection card.

Or click on the edit button from the collection details screen.

A dialog will show up, where you can edit the collection's ordering.

A manually ordered collection will be showing as such in the collection details screen.

Edit collection elements

From the collection details screen you can edit the elements composing a collection. To do so, click on the corresponding button in the toolbar.

The series cards will show two extra elements:

  • a delete button, to remove the series from the collection
  • a grip handle, which let you drag and drop series to reorder them (only available when the collection is manually ordered)

Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes.

Deleting a collection

To delete a collection, look for the action menu icon and click on Delete.

This will not delete the items in the collection, nor your media files.

- +

Collections

Collections let you gather related series together. For example, you might add all the Batman series together in a "Batman" collection.

Adding series to a collection

You can add a Series to a collection from the action menu icon and click on Add to collection.

You can also select multiple series, and click on Add to collection.

A dialog will show up, where you can either add series to an existing collection, or create a new collection.

Finding the Collections

Collections can be discovered or viewed in three ways:

  1. Series details screen
  2. Viewing the libraries "By Collection"
  3. Searching in the search bar

Series details screen

When viewing the details screen for a specific series that belongs to a collection, the collection will be displayed in a collapsible panel.

Click on the panel to expand it and see the content of the collection.

Viewing the libraries "By Collection"

Only show collections that exist in the library. Opening a collection goes to the "collection details" screen (see below).

Collection details

The collection details screen contains all the series that belong to the collection. It can include series from any library. By adding items in different libraries to collections, you can relate them to each other.

Collection ordering

By default collections will order series by alphabetical sort order. However, you can edit a collection and choose to manually sort series in a collection. You may want to do so if a collection has a specific reading order for example.

Either click on the edit button on the collection card.

Or click on the edit button from the collection details screen.

A dialog will show up, where you can edit the collection's ordering.

A manually ordered collection will be showing as such in the collection details screen.

Edit collection elements

From the collection details screen you can edit the elements composing a collection. To do so, click on the corresponding button in the toolbar.

The series cards will show two extra elements:

  • a delete button, to remove the series from the collection
  • a grip handle, which let you drag and drop series to reorder them (only available when the collection is manually ordered)

Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes.

Deleting a collection

To delete a collection, look for the action menu icon and click on Delete.

This will not delete the items in the collection, nor your media files.

+ \ No newline at end of file diff --git a/docs/guides/desktop/index.html b/docs/guides/desktop/index.html index e5acc948..56446c9d 100644 --- a/docs/guides/desktop/index.html +++ b/docs/guides/desktop/index.html @@ -6,13 +6,13 @@ Desktop Application | Komga - +
-

Desktop Application

The Desktop application runs in your menu bar / tray icon:

Desktop application menu

From the menu you can:

  • Open Komga: this will open the web interface.
  • Show log file: this will open a file explorer at the location of the log file.
  • Open configuration directory: this will open a file explorer at the location of the configuration directory.
  • Quit Komga: this will stop Komga and exit the application.
- +

Desktop Application

The Desktop application runs in your menu bar / tray icon:

Desktop application menu

From the menu you can:

  • Open Komga: this will open the web interface.
  • Show log file: this will open a file explorer at the location of the log file.
  • Open configuration directory: this will open a file explorer at the location of the configuration directory.
  • Quit Komga: this will stop Komga and exit the application.
+ \ No newline at end of file diff --git a/docs/guides/duplicate-files/index.html b/docs/guides/duplicate-files/index.html index 39461ad1..c6331333 100644 --- a/docs/guides/duplicate-files/index.html +++ b/docs/guides/duplicate-files/index.html @@ -6,13 +6,13 @@ Duplicate Files | Komga - + - + + \ No newline at end of file diff --git a/docs/guides/duplicate-pages/index.html b/docs/guides/duplicate-pages/index.html index 9dd4b1f9..9999e5be 100644 --- a/docs/guides/duplicate-pages/index.html +++ b/docs/guides/duplicate-pages/index.html @@ -6,13 +6,13 @@ Duplicate Pages | Komga - +
-

Duplicate Pages

Komga can detect duplicate pages among your books, and delete them manually or automatically.

You need to enable page hashing for your libraries.

You can manage duplicate pages from Server Settings > Duplicate Pages.

caution

Duplicate page removal will modify your files.

It is recommended to perform a backup, and to try using manual deletion before using automatic deletion.

Browsing New Duplicates

This screen will show all the newly detected duplicate pages. You can sort them by Count of duplicates, Size of the image, or the Total Size you could save by deleting it.

Browse New Duplicates

For each duplicate page, you can:

  • Ignore: It won't show anymore on this page, and Komga won't do anything about it.
  • Manual Delete: You will be able to trigger manual deletion from the Known view.
  • Auto Delete: Komga will automatically remove those pages after a library scan.

You can also see the detailed list of matches by clicking on the Matches button. It will show all the books containing the duplicate page, as well as the image for each, so you can perform a visual check. You can also delete matches individually.

Browsing Known Duplicates

This screen will show all the duplicate pages for which you chose an action. You can sort them by Deletion Count , Size of the image, or the Space Saved so far.

Browse Known Duplicates

For each page, you can change the action. You can Ignore a page that was set for deletion, or mark an ignored one for deletion, if you changed your mind.

For pages set for Manual Delete, you can trigger the deletion using the Delete Matches button.

- +

Duplicate Pages

Komga can detect duplicate pages among your books, and delete them manually or automatically.

You need to enable page hashing for your libraries.

You can manage duplicate pages from Server Settings > Duplicate Pages.

caution

Duplicate page removal will modify your files.

It is recommended to perform a backup, and to try using manual deletion before using automatic deletion.

Browsing New Duplicates

This screen will show all the newly detected duplicate pages. You can sort them by Count of duplicates, Size of the image, or the Total Size you could save by deleting it.

Browse New Duplicates

For each duplicate page, you can:

  • Ignore: It won't show anymore on this page, and Komga won't do anything about it.
  • Manual Delete: You will be able to trigger manual deletion from the Known view.
  • Auto Delete: Komga will automatically remove those pages after a library scan.

You can also see the detailed list of matches by clicking on the Matches button. It will show all the books containing the duplicate page, as well as the image for each, so you can perform a visual check. You can also delete matches individually.

Browsing Known Duplicates

This screen will show all the duplicate pages for which you chose an action. You can sort them by Deletion Count , Size of the image, or the Space Saved so far.

Browse Known Duplicates

For each page, you can change the action. You can Ignore a page that was set for deletion, or mark an ignored one for deletion, if you changed your mind.

For pages set for Manual Delete, you can trigger the deletion using the Delete Matches button.

+ \ No newline at end of file diff --git a/docs/guides/edit-metadata/index.html b/docs/guides/edit-metadata/index.html index e75ca755..148b1011 100644 --- a/docs/guides/edit-metadata/index.html +++ b/docs/guides/edit-metadata/index.html @@ -6,13 +6,13 @@ Edit Metadata | Komga - +
-

Edit Metadata

In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.

You may wish to customize or change the information associated with a library item.

The Edit Screen

Opening the Edit Screen

The edit screen for an item can be accessed in several ways, depending on where you are.

From the Item Card

  1. Hover over the item card
  2. Click the icon

From the Item Details

When viewing the details for a Library item, click the button in the top actionbar.

Edit Screen Details

The Edit Screen allows you to access title, authors, summary, tags, and more. There are several areas of the Edit Screen that can be accessed from the tabs on the left side.

Edit Screen for Series

General

The General screen allows you to edit details such as the title, sort title, summary, and more.

Tags

The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering.

Edit Screen for Books

General

The General screen allows you to edit details such as the title, number, summary, and more.

Authors

The Authors page includes metadata such as writers, pencillers, inkers, and more. These are items that can have more than one value and are typically available for sorting or filtering.

Tags

The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering.

Using the Edit Screen

Editing Standard Fields, Tags or Authors

Changing Fields

To edit the details for a particular piece of metadata:

  • Choose the tab of category you want to change on the left, then click the detail field
  • Type or paste the changes
  • For items in the Tags or Authors area, simply start typing the name. If the name already exists in the database, it will appear for you and you can select it. Otherwise, simply type out the name like normal.

To remove an item, click the X next to the entry.

Locking And Unlocking

If you’ve made an edit to a field, it is automatically locked. A locked field will not be altered when an item is refreshed. To lock or unlock a field:

  • Edit the field and it will lock automatically
  • Click the lock icon to either lock or unlock the field
  • A field is locked when the lock icon is colored orange

Sort Titles

The Sort Title field lets you control how items are sorted alphabetically. The Title field is what will be displayed, but the Sort Title field is used for sorting.

For example, if you want to ignore the article ("The") for your series like "The Boys":

  • Find the "The Boys" series and open the Edit Details screen
  • Click in the Sort Title and type "Boys (The)" then Save Changes

The result is that the series "The Boys" will appear together in the list under the letter B and sorted as entered in the Sort Title field.

Sort Numbers

The Sort Number field lets you control how items are sorted within a series. The Number field is what will be displayed, but the Sort Number field is used for sorting.

For example, if you have a "2015 Special" that is between book 24 and 25:

  • set the Number to "2015 Special"
  • set the Sort Number to "24.5"

The result is that the special book will appear between book 24 and 25, and will show "2015 Special" as its number.

- +

Edit Metadata

In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.

You may wish to customize or change the information associated with a library item.

The Edit Screen

Opening the Edit Screen

The edit screen for an item can be accessed in several ways, depending on where you are.

From the Item Card

  1. Hover over the item card
  2. Click the icon

From the Item Details

When viewing the details for a Library item, click the button in the top actionbar.

Edit Screen Details

The Edit Screen allows you to access title, authors, summary, tags, and more. There are several areas of the Edit Screen that can be accessed from the tabs on the left side.

Edit Screen for Series

General

The General screen allows you to edit details such as the title, sort title, summary, and more.

Tags

The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering.

Edit Screen for Books

General

The General screen allows you to edit details such as the title, number, summary, and more.

Authors

The Authors page includes metadata such as writers, pencillers, inkers, and more. These are items that can have more than one value and are typically available for sorting or filtering.

Tags

The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering.

Using the Edit Screen

Editing Standard Fields, Tags or Authors

Changing Fields

To edit the details for a particular piece of metadata:

  • Choose the tab of category you want to change on the left, then click the detail field
  • Type or paste the changes
  • For items in the Tags or Authors area, simply start typing the name. If the name already exists in the database, it will appear for you and you can select it. Otherwise, simply type out the name like normal.

To remove an item, click the X next to the entry.

Locking And Unlocking

If you’ve made an edit to a field, it is automatically locked. A locked field will not be altered when an item is refreshed. To lock or unlock a field:

  • Edit the field and it will lock automatically
  • Click the lock icon to either lock or unlock the field
  • A field is locked when the lock icon is colored orange

Sort Titles

The Sort Title field lets you control how items are sorted alphabetically. The Title field is what will be displayed, but the Sort Title field is used for sorting.

For example, if you want to ignore the article ("The") for your series like "The Boys":

  • Find the "The Boys" series and open the Edit Details screen
  • Click in the Sort Title and type "Boys (The)" then Save Changes

The result is that the series "The Boys" will appear together in the list under the letter B and sorted as entered in the Sort Title field.

Sort Numbers

The Sort Number field lets you control how items are sorted within a series. The Number field is what will be displayed, but the Sort Number field is used for sorting.

For example, if you have a "2015 Special" that is between book 24 and 25:

  • set the Number to "2015 Special"
  • set the Sort Number to "24.5"

The result is that the special book will appear between book 24 and 25, and will show "2015 Special" as its number.

+ \ No newline at end of file diff --git a/docs/guides/import-books/index.html b/docs/guides/import-books/index.html index 754fff21..368f1d71 100644 --- a/docs/guides/import-books/index.html +++ b/docs/guides/import-books/index.html @@ -6,13 +6,13 @@ Import Books | Komga - +
-

Import Books

Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).

Scan for books

Start by choosing a folder to scan for eligible books, and click Scan.

Scan for books

Komga will display a list of all files eligible for import.

Select destination series

You will need to pick a destination series for each. You can choose individually, or for all the selected files at once using the Select Series button.

Select series

Check book details

For each book, you can:

  • display the book details: format, number of pages, and detailed page list
  • browse the book pages
  • change the destination file name

If you choose a number for a book, and a book already exists with that number, Komga will offer you to upgrade it, effectively replacing the existing file. In case of upgrade, you can:

  • display the details of both books side by side
  • browse both books side by side
Book actions

Finalize the import

Komga will import only the selected files (checkbox on the left).

You can decide to:

  • move the files: files will be moved from their location, effectively deleting the original file.
  • copy/hardlink the files: Komga will try to hardlink the files to their destination (compatible file systems only), and if that doesn't work will copy the files to their destination, leaving the original file untouched.

Cick Import to start the import process.

- +

Import Books

Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).

Scan for books

Start by choosing a folder to scan for eligible books, and click Scan.

Scan for books

Komga will display a list of all files eligible for import.

Select destination series

You will need to pick a destination series for each. You can choose individually, or for all the selected files at once using the Select Series button.

Select series

Check book details

For each book, you can:

  • display the book details: format, number of pages, and detailed page list
  • browse the book pages
  • change the destination file name

If you choose a number for a book, and a book already exists with that number, Komga will offer you to upgrade it, effectively replacing the existing file. In case of upgrade, you can:

  • display the details of both books side by side
  • browse both books side by side
Book actions

Finalize the import

Komga will import only the selected files (checkbox on the left).

You can decide to:

  • move the files: files will be moved from their location, effectively deleting the original file.
  • copy/hardlink the files: Komga will try to hardlink the files to their destination (compatible file systems only), and if that doesn't work will copy the files to their destination, leaving the original file untouched.

Cick Import to start the import process.

+ \ No newline at end of file diff --git a/docs/guides/libraries/index.html b/docs/guides/libraries/index.html index 31a7558a..a835f0b6 100644 --- a/docs/guides/libraries/index.html +++ b/docs/guides/libraries/index.html @@ -6,13 +6,13 @@ Libraries | Komga - +
-

Libraries

You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.

Each library has a root folder, and no library can share any part of their path.

For example if you have a library with a root path of /books/mangas, you can't create a library with a root path of /books, because the two root paths would overlap. You can however create a library with a root path of /books/comics.

Creating libraries

From the web interface:

  • click on the + icon next to Libraries in the sidebar
  • choose a Name for your library
  • click the Browse button and select a root folder containing your books
  • click Add
Add Library Dialog

You can also specify extra options.

Scanner

Add Library Dialog Scanner

Empty trash automatically after every scan

See Emptying library trash.

Force directory modified time

This will force the last modified time of a directory as the maximum from its own last modified time and the last modified time from all the books inside the directory. This should be used only if your filesystem does not update the last modified time of a directory when files inside it are modified (Google Drive for instance).

Scan on startup

If enabled, the library will be scanner when Komga starts.

Scan interval

Choose to scan all of your libraries on a time-based interval. Choose the interval to use from the dropdown. Available frequencies:

  • disabled
  • hourly
  • every 6 hours
  • every 12 hours
  • daily
  • weekly

The scan interval is based on when Komga started, or when you changed that setting for the library. For instance, if you have it set to “every 6 hours” and you start your server at 12:35, then a scan will be started around 18:35.

One-Shots directory

See One-Shots.

Scan for these file types

This will configure the scanner to only look for files with specific file extensions. Available types:

  • Comic Book archives: cbz, zip, cbr, rar
  • PDF: pdf
  • Epub: epub

Directory exclusions

You can specify any pattern to exclude directory subtrees from the scan.

Any directory for which the full path contains any of the configured patterns will be ignored during the scan.

Patterns are checked against any part of the directory path:

  • #recycle will match on:
    • /data/books/Comics/#recycle
    • /data/books/Comics/My weirdly named #recycle comic
tip

To match only directories starting with the provided string, prefix the pattern with /, like /#recycle

Options

Add Library Dialog Options

Analysis

Compute hash for files

Komga will compute a filehash for your files. This is required for the "restore from trash bin" functionality to work, and to detect duplicate files.

This can consume lots of resources on large libraries or slow hardware.

Compute hash for pages

Komga will compute a filehash for the first and last 3 pages in each book (cbz only). Those are used to detect duplicate pages.

This can consume lots of resources on large libraries or slow hardware.

Analyze page dimensions

Komga will retrieve each page's dimensions (width and height). This is useful for:

  • properly displaying landscape pages in the web reader, when using double pages
  • comparing page dimensions in the "Import" dialog

This can consume lots of resources on large libraries or slow hardware.

File management

Automatically repair incorrect file extensions

Files with an incorrect extension will be automatically renamed in the background. For example a zip file with a .cbr extension will be renamed to .cbz.

Automatically convert to CBZ

Books in rar/cbr format (RAR4 only) will be converted to cbz automatically in the background. The zip files are created with the DEFLATE method without compression.

Series cover

Choose which book cover is used for the series.

Metadata

Add Library Dialog Metadata

Check the Refresh Metadata section to know more about what they do.

Edit a library

To edit a library, look for the action menu icon and click on Edit.

caution

If you change the root folder of a library, and the new path doesn't share anything with the previous path, you will lose all your series, books and read progress for that library.

If you change the path for a parent directory of the current path, you will not lose your content.

If you change the path for a child directory of the current path, you will lose part of your content.

Delete a library

To delete a library, look for the action menu icon and click on Delete.

danger

Deleting a library will remove all series and books contained in this library. Read progress for all those books will be deleted.

Your media files will not be affected.

This cannot be undone.

- +

Libraries

You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.

Each library has a root folder, and no library can share any part of their path.

For example if you have a library with a root path of /books/mangas, you can't create a library with a root path of /books, because the two root paths would overlap. You can however create a library with a root path of /books/comics.

Creating libraries

From the web interface:

  • click on the + icon next to Libraries in the sidebar
  • choose a Name for your library
  • click the Browse button and select a root folder containing your books
  • click Add
Add Library Dialog

You can also specify extra options.

Scanner

Add Library Dialog Scanner

Empty trash automatically after every scan

See Emptying library trash.

Force directory modified time

This will force the last modified time of a directory as the maximum from its own last modified time and the last modified time from all the books inside the directory. This should be used only if your filesystem does not update the last modified time of a directory when files inside it are modified (Google Drive for instance).

Scan on startup

If enabled, the library will be scanner when Komga starts.

Scan interval

Choose to scan all of your libraries on a time-based interval. Choose the interval to use from the dropdown. Available frequencies:

  • disabled
  • hourly
  • every 6 hours
  • every 12 hours
  • daily
  • weekly

The scan interval is based on when Komga started, or when you changed that setting for the library. For instance, if you have it set to “every 6 hours” and you start your server at 12:35, then a scan will be started around 18:35.

One-Shots directory

See One-Shots.

Scan for these file types

This will configure the scanner to only look for files with specific file extensions. Available types:

  • Comic Book archives: cbz, zip, cbr, rar
  • PDF: pdf
  • Epub: epub

Directory exclusions

You can specify any pattern to exclude directory subtrees from the scan.

Any directory for which the full path contains any of the configured patterns will be ignored during the scan.

Patterns are checked against any part of the directory path:

  • #recycle will match on:
    • /data/books/Comics/#recycle
    • /data/books/Comics/My weirdly named #recycle comic
tip

To match only directories starting with the provided string, prefix the pattern with /, like /#recycle

Options

Add Library Dialog Options

Analysis

Compute hash for files

Komga will compute a filehash for your files. This is required for the "restore from trash bin" functionality to work, and to detect duplicate files.

This can consume lots of resources on large libraries or slow hardware.

Compute hash for pages

Komga will compute a filehash for the first and last 3 pages in each book (cbz only). Those are used to detect duplicate pages.

This can consume lots of resources on large libraries or slow hardware.

Analyze page dimensions

Komga will retrieve each page's dimensions (width and height). This is useful for:

  • properly displaying landscape pages in the web reader, when using double pages
  • comparing page dimensions in the "Import" dialog

This can consume lots of resources on large libraries or slow hardware.

File management

Automatically repair incorrect file extensions

Files with an incorrect extension will be automatically renamed in the background. For example a zip file with a .cbr extension will be renamed to .cbz.

Automatically convert to CBZ

Books in rar/cbr format (RAR4 only) will be converted to cbz automatically in the background. The zip files are created with the DEFLATE method without compression.

Series cover

Choose which book cover is used for the series.

Metadata

Add Library Dialog Metadata

Check the Refresh Metadata section to know more about what they do.

Edit a library

To edit a library, look for the action menu icon and click on Edit.

caution

If you change the root folder of a library, and the new path doesn't share anything with the previous path, you will lose all your series, books and read progress for that library.

If you change the path for a parent directory of the current path, you will not lose your content.

If you change the path for a child directory of the current path, you will lose part of your content.

Delete a library

To delete a library, look for the action menu icon and click on Delete.

danger

Deleting a library will remove all series and books contained in this library. Read progress for all those books will be deleted.

Your media files will not be affected.

This cannot be undone.

+ \ No newline at end of file diff --git a/docs/guides/local-artwork-assets/index.html b/docs/guides/local-artwork-assets/index.html index 012d9d30..b219c052 100644 --- a/docs/guides/local-artwork-assets/index.html +++ b/docs/guides/local-artwork-assets/index.html @@ -6,13 +6,13 @@ Local Artwork Assets | Komga - +
-

Local Artwork Assets

Supported Artwork Image Formats

There are a number of supported custom media items that need to be named correctly to be detected. The supported image file formats are:

  • jpg
  • jpeg
  • png
  • webp
  • tbn

Poster Artwork

Posters are typically displayed for books, series and collections on dashboards, library views, and when looking at details for the element. Poster art is typically of 21:29.7 aspect ratio. Custom Poster artwork will be detected and used if named and stored as follows.

Books

Custom poster must have the same name as the book file:

  • Exact book name.ext

ext is the file extension.

/Series
Book 10.cbz
Book 10.jpg

More than one poster image can be included. For multiple items to be scanned, they should be named as follows:

  • Exact book name-X.ext

Where -X is a number.

/Series
Book 12.cbz
Book 12-1.jpg
Book 12-2.png

Series

Custom poster must be located in the Series directory and named as follows:

  • cover.ext
  • default.ext
  • folder.ext
  • series.ext
  • poster.ext

ext is the file extension.

/Series
poster.jpg
- +

Local Artwork Assets

Supported Artwork Image Formats

There are a number of supported custom media items that need to be named correctly to be detected. The supported image file formats are:

  • jpg
  • jpeg
  • png
  • webp
  • tbn

Poster Artwork

Posters are typically displayed for books, series and collections on dashboards, library views, and when looking at details for the element. Poster art is typically of 21:29.7 aspect ratio. Custom Poster artwork will be detected and used if named and stored as follows.

Books

Custom poster must have the same name as the book file:

  • Exact book name.ext

ext is the file extension.

/Series
Book 10.cbz
Book 10.jpg

More than one poster image can be included. For multiple items to be scanned, they should be named as follows:

  • Exact book name-X.ext

Where -X is a number.

/Series
Book 12.cbz
Book 12-1.jpg
Book 12-2.png

Series

Custom poster must be located in the Series directory and named as follows:

  • cover.ext
  • default.ext
  • folder.ext
  • series.ext
  • poster.ext

ext is the file extension.

/Series
poster.jpg
+ \ No newline at end of file diff --git a/docs/guides/oneshots/index.html b/docs/guides/oneshots/index.html index e7595d9e..f460a6ac 100644 --- a/docs/guides/oneshots/index.html +++ b/docs/guides/oneshots/index.html @@ -6,13 +6,13 @@ One-Shots | Komga - +
-

One-Shots

What are One-Shots?

One-Shots are series containing a single book.

However not all series containing a single book are One-Shots. Here are some example of single book series that are not One-Shots:

  • a series that has multiple books published, but only a single book is collected in Komga
  • a series that currently has only 1 book published, but will have more in the future

Historically Komga required each series to be in its own directory on disk. This was cumbersome for One-Shots, as each book needed to be placed in a dedicated directory.

With One-Shots handling, this is not necessary anymore.

One-Shots are still composed of a series with a single book, but are handled slightly differently.

One-Shots handling

Configuration

You can enable One-Shots handling through Library options.

Processing

One-Shots are detected during the scan. Any directory for which the full path contains the configured One-Shots directory will generate One-Shot series instead of standard Series.

Given the following directory structure, with One-Shots directory configured to _oneshots:

/data/books/Comics
├── Space Adventures
│   ├── Space_Adventures_001.cbz
│   ├── Space_Adventures_002.cbz
│   ├── Space_Adventures_003.cbz
│   └── _oneshots
│   └── Pluto Adventures.cbz
├── Super Duck
│   ├── Super_Duck_001.cbz
│   ├── Super_Duck_002.cbz
│   └── Super_Duck_003.cbz
└── _oneshots
├── A oneshot.cbz
├── Another oneshot.cbz
└── Yet another oneshot.cbz

This will result in:

  • 2 regular series:
    • Space Adventures
    • Super Duck
  • 4 One-Shots:
    • Pluto Adventures
    • A oneshot
    • Another oneshot
    • Yet another oneshot

One-Shots directory is checked against any part of the directory path:

  • _oneshots will match on:
    • /data/books/Comics/_oneshots
    • /data/books/Comics/My weirdly named _oneshots
tip

To match only directories starting with the provided string, prefix One-Shots directory with /, like /_oneshots

Metadata

While the book metadata will be processed as usual, the series metadata for One-Shots will be handled slightly differently:

  • the Mylar series.json is ignored
  • the local artwork is ignored. The one for the book is still processed as usual.
  • in addition, some metadata is set:
    • the series title and summary are set from the one of the book
    • the series status is set to Ended
    • the series total book count is set to 1

Dashboard

The Dashboard has specific handling for One-Shots:

  • One-Shots are displayed in a new view that shows both series and book metadata fields
  • when editing One-Shots metadata, a new dialog will allow to edit both book and series level metadata fields.
    • If you edit multiple items and all are One-Shots, this dialog is also used.
    • If there is a mix of One-Shots and normal items (series or books), the regular dialog will be used instead.s
  • One-Shots can be added to both collections and readlists
  • One-Shots will not show in the Recently Added Series or Recently Updated Series sections, but they will show in Recently Added Books.
  • Item card in Series views (when browsing libraries or collections):
    • will show an unread indicator in the top-right corner, instead of the number of unread books
    • will display One-shot at the bottom of the card instead of the number of books
  • Item card in Book views (when browsing readlists or recommended) will not display the Series name nor the book number
  • the Series filter panel has a One-shot filter
  • One-Shots will not show in the Series picker dialog when importing books
  • One-Shots will show only as books in the search bar and detailed search view

REST API

One-Shots are still composed of a Series with a single Book, however both have a new boolean attribute oneshot which can be used in client applications to handle One-Shots differently.

- +

One-Shots

What are One-Shots?

One-Shots are series containing a single book.

However not all series containing a single book are One-Shots. Here are some example of single book series that are not One-Shots:

  • a series that has multiple books published, but only a single book is collected in Komga
  • a series that currently has only 1 book published, but will have more in the future

Historically Komga required each series to be in its own directory on disk. This was cumbersome for One-Shots, as each book needed to be placed in a dedicated directory.

With One-Shots handling, this is not necessary anymore.

One-Shots are still composed of a series with a single book, but are handled slightly differently.

One-Shots handling

Configuration

You can enable One-Shots handling through Library options.

Processing

One-Shots are detected during the scan. Any directory for which the full path contains the configured One-Shots directory will generate One-Shot series instead of standard Series.

Given the following directory structure, with One-Shots directory configured to _oneshots:

/data/books/Comics
├── Space Adventures
│   ├── Space_Adventures_001.cbz
│   ├── Space_Adventures_002.cbz
│   ├── Space_Adventures_003.cbz
│   └── _oneshots
│   └── Pluto Adventures.cbz
├── Super Duck
│   ├── Super_Duck_001.cbz
│   ├── Super_Duck_002.cbz
│   └── Super_Duck_003.cbz
└── _oneshots
├── A oneshot.cbz
├── Another oneshot.cbz
└── Yet another oneshot.cbz

This will result in:

  • 2 regular series:
    • Space Adventures
    • Super Duck
  • 4 One-Shots:
    • Pluto Adventures
    • A oneshot
    • Another oneshot
    • Yet another oneshot

One-Shots directory is checked against any part of the directory path:

  • _oneshots will match on:
    • /data/books/Comics/_oneshots
    • /data/books/Comics/My weirdly named _oneshots
tip

To match only directories starting with the provided string, prefix One-Shots directory with /, like /_oneshots

Metadata

While the book metadata will be processed as usual, the series metadata for One-Shots will be handled slightly differently:

  • the Mylar series.json is ignored
  • the local artwork is ignored. The one for the book is still processed as usual.
  • in addition, some metadata is set:
    • the series title and summary are set from the one of the book
    • the series status is set to Ended
    • the series total book count is set to 1

Dashboard

The Dashboard has specific handling for One-Shots:

  • One-Shots are displayed in a new view that shows both series and book metadata fields
  • when editing One-Shots metadata, a new dialog will allow to edit both book and series level metadata fields.
    • If you edit multiple items and all are One-Shots, this dialog is also used.
    • If there is a mix of One-Shots and normal items (series or books), the regular dialog will be used instead.s
  • One-Shots can be added to both collections and readlists
  • One-Shots will not show in the Recently Added Series or Recently Updated Series sections, but they will show in Recently Added Books.
  • Item card in Series views (when browsing libraries or collections):
    • will show an unread indicator in the top-right corner, instead of the number of unread books
    • will display One-shot at the bottom of the card instead of the number of books
  • Item card in Book views (when browsing readlists or recommended) will not display the Series name nor the book number
  • the Series filter panel has a One-shot filter
  • One-Shots will not show in the Series picker dialog when importing books
  • One-Shots will show only as books in the search bar and detailed search view

REST API

One-Shots are still composed of a Series with a single Book, however both have a new boolean attribute oneshot which can be used in client applications to handle One-Shots differently.

+ \ No newline at end of file diff --git a/docs/guides/opds/index.html b/docs/guides/opds/index.html index 145f9a3d..883d8c5b 100644 --- a/docs/guides/opds/index.html +++ b/docs/guides/opds/index.html @@ -6,13 +6,13 @@ Read with any OPDS reader | Komga - +
-

Read with any OPDS reader

Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.

Komga supports OPDS v1 and v2, the URL should be configured accordingly:

  • OPDS v1: http(s)://your-server(:25600)(/baseUrl)/opds/v1.2/catalog
  • OPDS v2: http(s)://your-server(:25600)(/baseUrl)/opds/v2/catalog

Here is a list of reader applications that have been tested:

OSApp nameStatusOpenSearch supportPage streaming support
AndroidFBReader: Favorite Book Reader❌ Can't download CBR/CBZ, only PDF. PDF only supported in Premium version. Does not remember password.NoNo
AndroidMoon+ Reader✔️NoNo
AndroidLibrera✔️NoNo
AndroidPocketBook❌ Doesn't show CBR/CBZNoNo
iOSKyBook 3✔️YesNo
iOSPanels✔️NoOPDS PSE 1.0 (v2.8.0+)
OPDS PSE 1.1 (v2.9.7+)
iPadOSChunky Comic Reader❌ Does not work anymore with Komga 1.4.0+NoOPDS PSE 1.0

The OPDS v1 feed also supports:

- +

Read with any OPDS reader

Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.

Komga supports OPDS v1 and v2, the URL should be configured accordingly:

  • OPDS v1: http(s)://your-server(:25600)(/baseUrl)/opds/v1.2/catalog
  • OPDS v2: http(s)://your-server(:25600)(/baseUrl)/opds/v2/catalog

Here is a list of reader applications that have been tested:

OSApp nameStatusOpenSearch supportPage streaming support
AndroidFBReader: Favorite Book Reader❌ Can't download CBR/CBZ, only PDF. PDF only supported in Premium version. Does not remember password.NoNo
AndroidMoon+ Reader✔️NoNo
AndroidLibrera✔️NoNo
AndroidPocketBook❌ Doesn't show CBR/CBZNoNo
iOSKyBook 3✔️YesNo
iOSPanels✔️NoOPDS PSE 1.0 (v2.8.0+)
OPDS PSE 1.1 (v2.9.7+)
iPadOSChunky Comic Reader❌ Does not work anymore with Komga 1.4.0+NoOPDS PSE 1.0

The OPDS v1 feed also supports:

+ \ No newline at end of file diff --git a/docs/guides/panels/index.html b/docs/guides/panels/index.html index 037b380a..45e52c6a 100644 --- a/docs/guides/panels/index.html +++ b/docs/guides/panels/index.html @@ -6,14 +6,14 @@ Read with Panels on iOS | Komga - +

Read with Panels on iOS

Background

Panels app allows you to connect with any OPDS compatible server. With Panels you will be able to to remotely download or stream your comics using your iPhone or iPad. With Panels, users can conveniently navigate through their entire Komga library and keep track of their reading progress.

caution

Please note that Panels OPDS support requires either a Panels+ subscription or Panels in-app purchase.

Adding your Komga server to Panels

An OPDS feed is added to Panels as an importing service. From that point, it can be used either as a new library or just to download titles to your own device library.

To add a new OPDS feed, open Panels and go to Library -> Connect Service -> OPDS.

You'll be taken to the OPDS configuration screen. Give any name to your server, then enter your server address, username, and password. Tap on Apply.

Your Komga server should now appear both as a new library and as a new Import Service. Let's explore both options.

Komga as Import Service

You can use this method if you plan to use your Komga server mainly to import (download) comics into your device.

To add content to your library, you can follow either of these 2 flows:

  1. From he content screen, tap your server, navigate and select the files you want to import, and last select where yo place them in your device library.
  1. Navigate first to the location in your device library where you want your files to be imported. Then tap the 3 dot symbol and select "Import Files". Choose your server and find the files you want to download to your phone.

From either of the above flows above, your download should start and be visible from the "Downloads" tab.

Komga as a Library

Panels treats OPDS feeds as libraries. That means you can navigate your server library as if it was on your own device, with the benefit of keeping all files stored somewhere else. -Once you find a title you want to read, you can tap to open and start reading it (stream) or you can choose to download it for offline use. Long press a title (or select many) to show all options.

- +Once you find a title you want to read, you can tap to open and start reading it (stream) or you can choose to download it for offline use. Long press a title (or select many) to show all options.

+ \ No newline at end of file diff --git a/docs/guides/paperback/index.html b/docs/guides/paperback/index.html index 6678b241..9e2e1496 100644 --- a/docs/guides/paperback/index.html +++ b/docs/guides/paperback/index.html @@ -6,13 +6,13 @@ Read with Paperback | Komga - +
-

Read with Paperback

Komga has an extension for Paperback, a free iOS and iPadOS reader.

caution

Paperback requires iOS 13.4+ or iPadOS 13.4+.

Install and configure

Add the source repository

Support for Komga comes pre-installed with Paperback under the Paperback source name. If deleted the extension and repository simply open the repository page on your device and tap Add to Paperback.

Once Paperback opens choose "Add as Source Repo" on the popup.

Add the source repository manually
If you prefer, it is also possible to add the repository manually:
  1. In the app, go to Settings, External Sources then press Edit on the top right-hand corner.
  2. Press the top left-hand corner + button to add a repository.
  3. Use the base url:
    https://paperback-ios.github.io/extensions-main-promises/

Install the source

  1. In the app Settings, External Sources windows, choose Browse Official Repo, or Browse ... followed by the repository name you chose previously

  2. Install the source Paperback

Configure the source

  1. In the app Settings, External Sources, press the Paperback source
  2. Select Server Settings and set your:
    • server url
    • username
    • password
  3. Press Save to exit
tip

You can test your settings by opening Try Settings below the Server Settings section

Track read progress

It is possible to sync read chapters from the app to the Komga server using an implicit tracker.

Add the tracker repository

  1. In the app, go to Settings, External Trackers then press Edit on the top right-hand corner
  2. Press the top left-hand corner + button to add a repository.
  3. Use the base url (do not open this url):
    https://paperback-ios.github.io/trackers-main/main/

Install the tracker

  1. In the app Settings, External Trackers windows, choose Browse ... for the repository you just added
  2. Install the tracker Paperback

When you read or mark as read a chapter in the app, it will now be marked as such on your Komga server.

Changelog and Compatibility

Each version of the Komga extension need a specific version of the Komga server to work properly.

- +

Read with Paperback

Komga has an extension for Paperback, a free iOS and iPadOS reader.

caution

Paperback requires iOS 13.4+ or iPadOS 13.4+.

Install and configure

Add the source repository

Support for Komga comes pre-installed with Paperback under the Paperback source name. If deleted the extension and repository simply open the repository page on your device and tap Add to Paperback.

Once Paperback opens choose "Add as Source Repo" on the popup.

Add the source repository manually
If you prefer, it is also possible to add the repository manually:
  1. In the app, go to Settings, External Sources then press Edit on the top right-hand corner.
  2. Press the top left-hand corner + button to add a repository.
  3. Use the base url:
    https://paperback-ios.github.io/extensions-main-promises/

Install the source

  1. In the app Settings, External Sources windows, choose Browse Official Repo, or Browse ... followed by the repository name you chose previously

  2. Install the source Paperback

Configure the source

  1. In the app Settings, External Sources, press the Paperback source
  2. Select Server Settings and set your:
    • server url
    • username
    • password
  3. Press Save to exit
tip

You can test your settings by opening Try Settings below the Server Settings section

Track read progress

It is possible to sync read chapters from the app to the Komga server using an implicit tracker.

Add the tracker repository

  1. In the app, go to Settings, External Trackers then press Edit on the top right-hand corner
  2. Press the top left-hand corner + button to add a repository.
  3. Use the base url (do not open this url):
    https://paperback-ios.github.io/trackers-main/main/

Install the tracker

  1. In the app Settings, External Trackers windows, choose Browse ... for the repository you just added
  2. Install the tracker Paperback

When you read or mark as read a chapter in the app, it will now be marked as such on your Komga server.

Changelog and Compatibility

Each version of the Komga extension need a specific version of the Komga server to work properly.

+ \ No newline at end of file diff --git a/docs/guides/read-progress/index.html b/docs/guides/read-progress/index.html index 918df60f..81fa9cc5 100644 --- a/docs/guides/read-progress/index.html +++ b/docs/guides/read-progress/index.html @@ -6,13 +6,13 @@ Read progress | Komga - +
-

Read progress

Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.

Supported readers

Webreader

The webreader can track the progress as you read:

  • when you open a book that is in progress, the webreader will resume reading where you left it.
  • when you finish reading a book, the webreader will mark it as read.

Tachiyomi

Tachiyomi can track progress of read books, using the Komga tracker. See here for more details.

CDisplayEx

CDisplayEx syncs read status and reading progress, See here.

Unread and in progress indicators

The book card will display read progress indicators:

  • Unread books will display an orange tick in the top right corner:
Book card showing unread indicator
  • In progress books will display a progress bar at the bottom of the thumbnail:
Book card showing reading progress

In addition, the series card will display the number of unread books in the top right corner:

Series card showing unread count of books

Marking progress manually

You can mark books or series as read or unread manually. Look for the action menu icon and click on Mark as read or Mark as unread.

- +

Read progress

Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.

Supported readers

Webreader

The webreader can track the progress as you read:

  • when you open a book that is in progress, the webreader will resume reading where you left it.
  • when you finish reading a book, the webreader will mark it as read.

Tachiyomi

Tachiyomi can track progress of read books, using the Komga tracker. See here for more details.

CDisplayEx

CDisplayEx syncs read status and reading progress, See here.

Unread and in progress indicators

The book card will display read progress indicators:

  • Unread books will display an orange tick in the top right corner:
Book card showing unread indicator
  • In progress books will display a progress bar at the bottom of the thumbnail:
Book card showing reading progress

In addition, the series card will display the number of unread books in the top right corner:

Series card showing unread count of books

Marking progress manually

You can mark books or series as read or unread manually. Look for the action menu icon and click on Mark as read or Mark as unread.

+ \ No newline at end of file diff --git a/docs/guides/readlists/index.html b/docs/guides/readlists/index.html index 7422d1e2..018f38d3 100644 --- a/docs/guides/readlists/index.html +++ b/docs/guides/readlists/index.html @@ -6,13 +6,13 @@ Read lists | Komga - +
-

Read lists

Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.

Adding books to a read list

You can add a Book to a read list from the action menu icon and click on Add to read list.

You can also select multiple books, and click on Add to read list.

A dialog will show up, where you can either add books to an existing read list, or create a new read list.

Finding the Read Lists

Read lists can be discovered or viewed in three ways:

  1. Book details screen
  2. Viewing the libraries "By Read List"
  3. Searching in the search bar

Book details screen

When viewing the details screen for a specific book that belongs to a read list, the read list will be displayed in a collapsible panel.

Click on the panel to expand it and see the content of the read list.

Viewing the libraries "By Read List"

Only show read lists that exist in the library. Opening a read list goes to the "read list details" screen (see below).

Read List details

The read list details screen contains all the books that belong to the read list. It can include books from any library and any series. By adding items in different libraries or series to read lists, you can relate them to each other.

Read List ordering

By default books in a read list are ordered manually. However, you can edit a read list and choose to disable the manual ordering, in which case books will be ordered by release date.

Either click on the edit button on the read list card.

Or click on the edit button from the read list details screen.

A dialog will show up, where you can edit the read list's ordering.

A manually ordered read list will be showing as such in the read list details screen.

Edit read list elements

From the read list details screen you can edit the elements composing a read list. To do so, click on the corresponding button in the toolbar.

The book cards will show two extra elements:

  • a delete button, to remove the book from the read list
  • a grip handle, which let you drag and drop books to reorder them (only available when the read list is manually ordered)

Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes.

Deleting a read list

To delete a read list, look for the action menu icon and click on Delete.

This will not delete the items in the read list, nor your media files.

Import read lists from ComicRack

You can import ComicRack reading lists in .cbl format from the Import > Read List screen.

.cbl files contain the following information:

  • read list name
  • books contained in the list, in order
  • for each book:
    • name of the series it is part of
    • volume of the series
    • year of the series
    • number of that book in the series

Komga will try to match each book in the list in the following way:

  • part of a series named Series or Series (Volume)
  • where the number matches

The result will be shown after you click the Match button.

If some books are not matched, you can manually choose a series and a book. Duplicates and missing books will be shown with an error indicator on the right side.

Click Create to create the read list. If some books are unmatched, you can still create the read list (a confirmation dialog will pop-up).

- +

Read lists

Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.

Adding books to a read list

You can add a Book to a read list from the action menu icon and click on Add to read list.

You can also select multiple books, and click on Add to read list.

A dialog will show up, where you can either add books to an existing read list, or create a new read list.

Finding the Read Lists

Read lists can be discovered or viewed in three ways:

  1. Book details screen
  2. Viewing the libraries "By Read List"
  3. Searching in the search bar

Book details screen

When viewing the details screen for a specific book that belongs to a read list, the read list will be displayed in a collapsible panel.

Click on the panel to expand it and see the content of the read list.

Viewing the libraries "By Read List"

Only show read lists that exist in the library. Opening a read list goes to the "read list details" screen (see below).

Read List details

The read list details screen contains all the books that belong to the read list. It can include books from any library and any series. By adding items in different libraries or series to read lists, you can relate them to each other.

Read List ordering

By default books in a read list are ordered manually. However, you can edit a read list and choose to disable the manual ordering, in which case books will be ordered by release date.

Either click on the edit button on the read list card.

Or click on the edit button from the read list details screen.

A dialog will show up, where you can edit the read list's ordering.

A manually ordered read list will be showing as such in the read list details screen.

Edit read list elements

From the read list details screen you can edit the elements composing a read list. To do so, click on the corresponding button in the toolbar.

The book cards will show two extra elements:

  • a delete button, to remove the book from the read list
  • a grip handle, which let you drag and drop books to reorder them (only available when the read list is manually ordered)

Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes.

Deleting a read list

To delete a read list, look for the action menu icon and click on Delete.

This will not delete the items in the read list, nor your media files.

Import read lists from ComicRack

You can import ComicRack reading lists in .cbl format from the Import > Read List screen.

.cbl files contain the following information:

  • read list name
  • books contained in the list, in order
  • for each book:
    • name of the series it is part of
    • volume of the series
    • year of the series
    • number of that book in the series

Komga will try to match each book in the list in the following way:

  • part of a series named Series or Series (Volume)
  • where the number matches

The result will be shown after you click the Match button.

If some books are not matched, you can manually choose a series and a book. Duplicates and missing books will be shown with an error indicator on the right side.

Click Create to create the read list. If some books are unmatched, you can still create the read list (a confirmation dialog will pop-up).

+ \ No newline at end of file diff --git a/docs/guides/scan-analysis-refresh/index.html b/docs/guides/scan-analysis-refresh/index.html index f0fb685b..1a6b1a65 100644 --- a/docs/guides/scan-analysis-refresh/index.html +++ b/docs/guides/scan-analysis-refresh/index.html @@ -6,13 +6,13 @@ Scanning, Analyzing and Refreshing Metadata | Komga - +
-

Scanning, Analyzing and Refreshing Metadata

Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you’ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.

Scan Library Files

Scanning a library makes Komga check its folders and sub-folders for new or removed books. If it finds new media, it then pulls it into the library. You can think of scanning as “check for new or changed content”.

All files that have changed after a scan will be Analyzed.

You should Scan Library Files if you have:

  • Added or deleted files or folders
  • Renamed a file or folder
  • Moved files or folders from one location to another

By default, Komga will scan your libraries regularly.

Deep scan

This will force the scanner to compare all scanned books with the ones stored in the database. Normally this is not required, as Komga uses the last modified time of the parent folders to decide whether to compare books, but some filesystems may behave differently.

Trigger a Deep Scan if Komga is missing some books after a scan.

What happens during a Scan?

Komga will generate a library representation of your files on disk. A Komga library does not represent exactly your folder structure.

  • Komga will create a Series for each subfolder of any library, whatever the depth of this subfolder in your directory structure
  • Komga will create a Book for each file found, and place it inside the Series corresponding to the parent folder of the file

Analyze books

Analysis is automatically performed when content is added to your Library. In rare cases, new versions of Komga may update the media analysis capabilities to correct something or add the ability to detect new things. In those cases, content may be re-analyzed when you access it after the new server version is installed.

What happens during Analysis?

Whenever an item is added to one of your Libraries, Komga performs some analysis on it to gather information. In addition, all files analyzed will also be refreshed for metadata.

Gather media properties

The primary purpose of media analysis is to gather information about that media item. All of the media you add to a Library has properties that are useful to know, such as:

  • Container: ZIP, RAR, EPUB, PDF, etc.
  • Images Format: JPEG, PNG, WEBP, etc.

Why, though? What use are these media properties? Your Server, together with your apps, can use this information to help determine whether (and how) content can be played.

For example: Imagine you have a CBR file with WEBP images, but you’re using Internet Explorer (which can’t read WEBP). Since the webreader knows what kind of content your browser can display and since your media analysis detected that the book has WEBP images, your Komga Server can convert those images to a compatible format (like JPEG) for you in order to let you read your book successfully.

Generate default artwork

During analysis, artwork will automatically be grabbed from a book file. The first page will be used for poster/thumbnail type purposes.

Analyze your content

You can analyze content in multiple ways: for a book, for a series, or even for an entire Library.

Look for the action menu icon and click on Analyze.

caution

Depending on the size of your Library, analysis may take a while.

Media Analysis screen

You can check all the media for which the analysis did not succeed from the Media Analysis screen. You can access it from Media Management > Media Analysis.

It will show you all books with a status of:

  • Error: Komga could not analyze the book. If possible, there will be a comment to describe the error.
  • Unsupported: Komga does not support those files. The comment will give you more information.
Media Analysis

Refresh metadata

Refreshing Metadata for a library, series, or individual book causes the metadata for the item to be refreshed, even if it already has metadata. You can think of refreshing as “update metadata for the requested item even if it already has some”.

You should refresh a library or individual item if:

  • You’ve changed options for the library
  • You’ve added "local media assets" (such as artwork)

Metadata is gathered from the following sources:

  • a local ComicInfo.xml file located inside a CBZ or CBR
  • the metadata of an EPUB file
  • local media assets

The metadata refresh is dependent of the options of the Library.

Import metadata for CBR/CBZ containing a ComicInfo.xml file

Book metadata

This will import the following elements from the ComicInfo.xml file in Komga:

  • Year, Month, and Day to form the Release Date
  • Writer, Penciller, Inker, Colorist, Letterer, CoverArtist, Editor, and Translator as Authors with the according role. A value with multiple names separated by a , will be split in different authors.
  • Title, Summary, Number as their Komga equivalent
  • Valid Web links as a book link
  • The Tags element will be split by , and added to the book's tags
  • If the GTIN element contains a valid ISBN, as the book's ISBN

Series metadata

This will import the following elements from the ComicInfo.xml of the Series' books in Komga:

  • The Series and Volume elements will be used to overwrite the title of the Series, in the form <Series> (<Volume>), or just <Series> if the Volume element is not present, if the Volume is 1, or if Append volume to series title is disabled. If multiple values are present, the most frequent value from all books will be used.
  • The various AgeRating values will be converted to a number in Komga. The highest value from all books will be used.
  • The most frequent Publisher value will be used as Komga's equivalent.
  • A Manga element with the value YesAndRightToLeft will mark the reading direction as Right to left. The most frequent value from all books will be used.
  • The Genre element will be split by ,. All genres from all books will be added to the Series.
  • The LanguageISO element will be used as the Series' language. The most frequent value from all books will be used.
  • The highest value from Count will be used as the total count of books.

Collections

The SeriesGroup element will be split by , and used to create collections with those names, or add the series to an existing collection if it exists.

If the SeriesGroup element is set to different values in each book of the series, then each value of the elements will create a collection.

Read lists

The AlternateSeries or StoryArc elements will be used to create a read list with that name, or add the book to an existing read list with that name.

If the AlternateNumber element is set, it will be used to position the book in the read list.

StoryArcNumber

If the StoryArcNumber element is set, it will be used in conjunction with StoryArc to position the book in the read list.

Both StoryArc and StoryArcNumber elements can contain multiple values, separated by ,. Komga will do its best to match each pair:

  • If both elements are set, but do not contain the same number of values, the extra values will not be used
  • If there are invalid values, like blank strings or invalid numbers, the whole pair will be ignored

Import metadata from EPUB files

Book metadata

This will import the following fields from the Epub metadata in Komga:

  • dc:title element as the Title
  • dc:description element as the Summary
  • dc:date element as the Release date
  • dc:identifier element as the ISBN, if it is a valid ISBN
  • dc:creator element as Authors. The role will be imported either from the opf:role property, or from a meta element containing role property and a marc:relators scheme. A value with multiple names separated by a , will be split in different authors.

Series metadata

This will import the following fields from the Epub metadata in Komga:

  • dc:publisher element as the Publisher
  • dc:language element as the Language
  • The page-progression-direction property of the spine element as the Reading direction
  • The belongs-to-collection meta property will be used to overwrite the title of a Series. If multiple values are present, the most frequent value from all books will be used.

Import metadata generated by Mylar

Mylar can generate a series.json file inside your Series folders. This option will import the following fields into Komga:

  • The name field will be used for the Series title. If the volume field is set and is different from 1, then the year field will be appended to the title, in the form <name> (<year>).
  • status will be used to set the Series status.
  • description_formatted or description_text will be used for the Series summary.
  • publisher will be used for the Series publisher.
  • age_rating will be used for the Series age rating.
  • total_issues will be used for the total count of books.

Import local media assets

Local artwork

This will enable import for local artwork, check the Local Artwork Assets section for more information.

Import ISBN within barcode

ISBN barcode

Komga will inspect the first and last 3 pages of each book for barcodes. If a barcode is present and contains an ISBN code, it will be imported.

- +

Scanning, Analyzing and Refreshing Metadata

Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you’ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.

Scan Library Files

Scanning a library makes Komga check its folders and sub-folders for new or removed books. If it finds new media, it then pulls it into the library. You can think of scanning as “check for new or changed content”.

All files that have changed after a scan will be Analyzed.

You should Scan Library Files if you have:

  • Added or deleted files or folders
  • Renamed a file or folder
  • Moved files or folders from one location to another

By default, Komga will scan your libraries regularly.

Deep scan

This will force the scanner to compare all scanned books with the ones stored in the database. Normally this is not required, as Komga uses the last modified time of the parent folders to decide whether to compare books, but some filesystems may behave differently.

Trigger a Deep Scan if Komga is missing some books after a scan.

What happens during a Scan?

Komga will generate a library representation of your files on disk. A Komga library does not represent exactly your folder structure.

  • Komga will create a Series for each subfolder of any library, whatever the depth of this subfolder in your directory structure
  • Komga will create a Book for each file found, and place it inside the Series corresponding to the parent folder of the file

Analyze books

Analysis is automatically performed when content is added to your Library. In rare cases, new versions of Komga may update the media analysis capabilities to correct something or add the ability to detect new things. In those cases, content may be re-analyzed when you access it after the new server version is installed.

What happens during Analysis?

Whenever an item is added to one of your Libraries, Komga performs some analysis on it to gather information. In addition, all files analyzed will also be refreshed for metadata.

Gather media properties

The primary purpose of media analysis is to gather information about that media item. All of the media you add to a Library has properties that are useful to know, such as:

  • Container: ZIP, RAR, EPUB, PDF, etc.
  • Images Format: JPEG, PNG, WEBP, etc.

Why, though? What use are these media properties? Your Server, together with your apps, can use this information to help determine whether (and how) content can be played.

For example: Imagine you have a CBR file with WEBP images, but you’re using Internet Explorer (which can’t read WEBP). Since the webreader knows what kind of content your browser can display and since your media analysis detected that the book has WEBP images, your Komga Server can convert those images to a compatible format (like JPEG) for you in order to let you read your book successfully.

Generate default artwork

During analysis, artwork will automatically be grabbed from a book file. The first page will be used for poster/thumbnail type purposes.

Analyze your content

You can analyze content in multiple ways: for a book, for a series, or even for an entire Library.

Look for the action menu icon and click on Analyze.

caution

Depending on the size of your Library, analysis may take a while.

Media Analysis screen

You can check all the media for which the analysis did not succeed from the Media Analysis screen. You can access it from Media Management > Media Analysis.

It will show you all books with a status of:

  • Error: Komga could not analyze the book. If possible, there will be a comment to describe the error.
  • Unsupported: Komga does not support those files. The comment will give you more information.
Media Analysis

Refresh metadata

Refreshing Metadata for a library, series, or individual book causes the metadata for the item to be refreshed, even if it already has metadata. You can think of refreshing as “update metadata for the requested item even if it already has some”.

You should refresh a library or individual item if:

  • You’ve changed options for the library
  • You’ve added "local media assets" (such as artwork)

Metadata is gathered from the following sources:

  • a local ComicInfo.xml file located inside a CBZ or CBR
  • the metadata of an EPUB file
  • local media assets

The metadata refresh is dependent of the options of the Library.

Import metadata for CBR/CBZ containing a ComicInfo.xml file

Book metadata

This will import the following elements from the ComicInfo.xml file in Komga:

  • Year, Month, and Day to form the Release Date
  • Writer, Penciller, Inker, Colorist, Letterer, CoverArtist, Editor, and Translator as Authors with the according role. A value with multiple names separated by a , will be split in different authors.
  • Title, Summary, Number as their Komga equivalent
  • Valid Web links as a book link
  • The Tags element will be split by , and added to the book's tags
  • If the GTIN element contains a valid ISBN, as the book's ISBN

Series metadata

This will import the following elements from the ComicInfo.xml of the Series' books in Komga:

  • The Series and Volume elements will be used to overwrite the title of the Series, in the form <Series> (<Volume>), or just <Series> if the Volume element is not present, if the Volume is 1, or if Append volume to series title is disabled. If multiple values are present, the most frequent value from all books will be used.
  • The various AgeRating values will be converted to a number in Komga. The highest value from all books will be used.
  • The most frequent Publisher value will be used as Komga's equivalent.
  • A Manga element with the value YesAndRightToLeft will mark the reading direction as Right to left. The most frequent value from all books will be used.
  • The Genre element will be split by ,. All genres from all books will be added to the Series.
  • The LanguageISO element will be used as the Series' language. The most frequent value from all books will be used.
  • The highest value from Count will be used as the total count of books.

Collections

The SeriesGroup element will be split by , and used to create collections with those names, or add the series to an existing collection if it exists.

If the SeriesGroup element is set to different values in each book of the series, then each value of the elements will create a collection.

Read lists

The AlternateSeries or StoryArc elements will be used to create a read list with that name, or add the book to an existing read list with that name.

If the AlternateNumber element is set, it will be used to position the book in the read list.

StoryArcNumber

If the StoryArcNumber element is set, it will be used in conjunction with StoryArc to position the book in the read list.

Both StoryArc and StoryArcNumber elements can contain multiple values, separated by ,. Komga will do its best to match each pair:

  • If both elements are set, but do not contain the same number of values, the extra values will not be used
  • If there are invalid values, like blank strings or invalid numbers, the whole pair will be ignored

Import metadata from EPUB files

Book metadata

This will import the following fields from the Epub metadata in Komga:

  • dc:title element as the Title
  • dc:description element as the Summary
  • dc:date element as the Release date
  • dc:identifier element as the ISBN, if it is a valid ISBN
  • dc:creator element as Authors. The role will be imported either from the opf:role property, or from a meta element containing role property and a marc:relators scheme. A value with multiple names separated by a , will be split in different authors.

Series metadata

This will import the following fields from the Epub metadata in Komga:

  • dc:publisher element as the Publisher
  • dc:language element as the Language
  • The page-progression-direction property of the spine element as the Reading direction
  • The belongs-to-collection meta property will be used to overwrite the title of a Series. If multiple values are present, the most frequent value from all books will be used.

Import metadata generated by Mylar

Mylar can generate a series.json file inside your Series folders. This option will import the following fields into Komga:

  • The name field will be used for the Series title. If the volume field is set and is different from 1, then the year field will be appended to the title, in the form <name> (<year>).
  • status will be used to set the Series status.
  • description_formatted or description_text will be used for the Series summary.
  • publisher will be used for the Series publisher.
  • age_rating will be used for the Series age rating.
  • total_issues will be used for the total count of books.

Import local media assets

Local artwork

This will enable import for local artwork, check the Local Artwork Assets section for more information.

Import ISBN within barcode

ISBN barcode

Komga will inspect the first and last 3 pages of each book for barcodes. If a barcode is present and contains an ISBN code, it will be imported.

+ \ No newline at end of file diff --git a/docs/guides/search/index.html b/docs/guides/search/index.html index fa2996fc..20c44e01 100644 --- a/docs/guides/search/index.html +++ b/docs/guides/search/index.html @@ -6,13 +6,13 @@ Full Text Search | Komga - +
-

Full Text Search

Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.

  • FTS will order results by relevance
  • FTS is case-insensitive
  • When searching with CJK characters (Chinese, Japanese, Korean), a minimum of 2 characters is required.
  • The order of words is not important: batman robin will match Robin & Batman
  • To search by words in order, enclose your search in ": "white knight" will not match knight white nor white and knight
  • By default, the search will match the item title. For Books, the ISBN will also be matched by default.
  • You can use the AND, OR and NOT operators (UPPERCASE) to build complex queries:
    • batman NOT publisher:dc will match all Batman series not published by DC Comics
    • batman OR robin will match Batman or Robin
    • batman AND (robin OR superman) will match Superman & Batman and Batman & Robin
    • writer:remender penciller:murphy
  • You can perform range queries using the [a TO b] syntax. Example: release_date:[1990 TO 2000]. Note that the matching is lexicographic, not numerical. You can also use wildcards: release_date:[2010 TO *].

Some extra fields are available for search using the field:search syntax, see after.

Series additional fields

  • publisher. Example: publisher:vertigo
  • status
    • Possible values: ongoing, ended, hiatus, abandoned
    • Example: status:hiatus
  • reading_direction
    • Possible values: left_to_right, right_to_left, vertical, webtoon
    • Example: reading_direction:right_to_left
  • age_rating. Example: age_rating:12
  • language. Example: language:fr
  • tag will search any tag, whether it is set at Series or Book level. Example: tag:action
  • series_tag will search series tags only
  • book_tag will search book tags only
  • genre. Example: genre:action
  • author will search authors with any role. Example: author:(sean murphy)
    • You can also search by specific role. Example: writer:remender
    • Possible role values are: writer, penciller, letterer, inker, editor, cover, colorist
  • book_count, which is the number of books present in that Series. Example: book_count:1
  • total_book_count. Example: total_book_count:100
  • release_date will search by year released. Example: release_date:1999
  • deleted will search soft-deleted series. Example: deleted:true or deleted:false
  • complete will search complete series, ie series where the total book counts (from metadata) is equals to the actual book counts (number of files). Example: complete:true or complete:false
  • sharing_label. Example: sharing_label:kids

Book additional fields

  • tag will search any tag. Example: tag:"double pages"
  • author will search authors with any role. Example: author:(sean murphy)
    • You can also search by specific role. Example: writer:remender
    • Possible role values are: writer, penciller, letterer, inker, editor, cover, colorist
  • release_date will search by year released. Example: release_date:1999
  • status
    • Possible values: ready, unknown, error, unsupported, outdated
    • Example: status:(error OR unsupported)
  • deleted will search soft-deleted books. Example: deleted:true or deleted:false
  • oneshot will search for One-Shots only. Example: oneshot:true or oneshot:false

Some additional Series fields will be available if the book is a One-Shot:

  • publisher
  • status, which should always be ended
  • reading_direction
  • age_rating
  • language
  • genre
  • sharing_label
  • complete, which will always be true
- +

Full Text Search

Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.

  • FTS will order results by relevance
  • FTS is case-insensitive
  • When searching with CJK characters (Chinese, Japanese, Korean), a minimum of 2 characters is required.
  • The order of words is not important: batman robin will match Robin & Batman
  • To search by words in order, enclose your search in ": "white knight" will not match knight white nor white and knight
  • By default, the search will match the item title. For Books, the ISBN will also be matched by default.
  • You can use the AND, OR and NOT operators (UPPERCASE) to build complex queries:
    • batman NOT publisher:dc will match all Batman series not published by DC Comics
    • batman OR robin will match Batman or Robin
    • batman AND (robin OR superman) will match Superman & Batman and Batman & Robin
    • writer:remender penciller:murphy
  • You can perform range queries using the [a TO b] syntax. Example: release_date:[1990 TO 2000]. Note that the matching is lexicographic, not numerical. You can also use wildcards: release_date:[2010 TO *].

Some extra fields are available for search using the field:search syntax, see after.

Series additional fields

  • publisher. Example: publisher:vertigo
  • status
    • Possible values: ongoing, ended, hiatus, abandoned
    • Example: status:hiatus
  • reading_direction
    • Possible values: left_to_right, right_to_left, vertical, webtoon
    • Example: reading_direction:right_to_left
  • age_rating. Example: age_rating:12
  • language. Example: language:fr
  • tag will search any tag, whether it is set at Series or Book level. Example: tag:action
  • series_tag will search series tags only
  • book_tag will search book tags only
  • genre. Example: genre:action
  • author will search authors with any role. Example: author:(sean murphy)
    • You can also search by specific role. Example: writer:remender
    • Possible role values are: writer, penciller, letterer, inker, editor, cover, colorist
  • book_count, which is the number of books present in that Series. Example: book_count:1
  • total_book_count. Example: total_book_count:100
  • release_date will search by year released. Example: release_date:1999
  • deleted will search soft-deleted series. Example: deleted:true or deleted:false
  • complete will search complete series, ie series where the total book counts (from metadata) is equals to the actual book counts (number of files). Example: complete:true or complete:false
  • sharing_label. Example: sharing_label:kids

Book additional fields

  • tag will search any tag. Example: tag:"double pages"
  • author will search authors with any role. Example: author:(sean murphy)
    • You can also search by specific role. Example: writer:remender
    • Possible role values are: writer, penciller, letterer, inker, editor, cover, colorist
  • release_date will search by year released. Example: release_date:1999
  • status
    • Possible values: ready, unknown, error, unsupported, outdated
    • Example: status:(error OR unsupported)
  • deleted will search soft-deleted books. Example: deleted:true or deleted:false
  • oneshot will search for One-Shots only. Example: oneshot:true or oneshot:false

Some additional Series fields will be available if the book is a One-Shot:

  • publisher
  • status, which should always be ended
  • reading_direction
  • age_rating
  • language
  • genre
  • sharing_label
  • complete, which will always be true
+ \ No newline at end of file diff --git a/docs/guides/server-settings/index.html b/docs/guides/server-settings/index.html index 80f8cd06..ae868916 100644 --- a/docs/guides/server-settings/index.html +++ b/docs/guides/server-settings/index.html @@ -6,13 +6,13 @@ Server settings & management | Komga - +
-

Server settings & management

The Server Settings > Server screen allows for more configuration of your server.

Server Settings

This section allows to configure some server-wide options.

Server Settings

Delete empty collections after scan

Indicate whether Komga should delete empty collections after a scan.

Delete empty read lists after scan

Indicate whether Komga should delete empty read lists after a scan.

Remember Me duration

The duration (in days) of the remember-me cookie that will be saved in the browser, if the Remember Me checkbox is ticked upon login.

Regenerate the RememberMe key

The RememberMe feature works with a secret key. If you want to invalidate all the remember-me cookies that have been issued, you can regenerate the key.

Server Management

This sections allows some administrative actions for your server.

Server Management
- +

Server settings & management

The Server Settings > Server screen allows for more configuration of your server.

Server Settings

This section allows to configure some server-wide options.

Server Settings

Delete empty collections after scan

Indicate whether Komga should delete empty collections after a scan.

Delete empty read lists after scan

Indicate whether Komga should delete empty read lists after a scan.

Task threads

The number of threads dedicated to the processing of background tasks.

Remember Me duration

The duration (in days) of the remember-me cookie that will be saved in the browser, if the Remember Me checkbox is ticked upon login.

Regenerate the RememberMe key

The RememberMe feature works with a secret key. If you want to invalidate all the remember-me cookies that have been issued, you can regenerate the key.

Server Management

This sections allows some administrative actions for your server.

Server Management
+ \ No newline at end of file diff --git a/docs/guides/tachiyomi/index.html b/docs/guides/tachiyomi/index.html index 06bd60e0..d3461d16 100644 --- a/docs/guides/tachiyomi/index.html +++ b/docs/guides/tachiyomi/index.html @@ -6,13 +6,13 @@ Read with Tachiyomi | Komga - +
-

Read with Tachiyomi

Install and configure

Komga has an official extension for Tachiyomi, available from within Tachiyomi's extension menu.

Once installed, the extension will let you configure up to 3 Komga servers.

Tachiyomi extension infoTachiyomi extension configuration

You will need to configure the extension with your server address, username and password before you can use it.

tip

Example server address: http://my.server:25600(/baseUrl)

Note that there is no trailing slash (/).

Browse

You can browse series, use the filter menu, and search for series.

Tachiyomi extension browseTachiyomi extension filtersTachiyomi extension search

Track read progress

Tachiyomi starting from 0.12.1 can keep your read progress in sync with your Komga server. Check the official Tachiyomi website for instructions.

Requirements:

  • Tachiyomi 0.12.1+
  • Komga 0. 95.2+
  • Tachiyomi Komga extension 1.2.24+

Changelog and Compatibility

Each version of the Komga extension need a specific version of the Komga server to work properly. Check the CHANGELOG for more information.

- +

Read with Tachiyomi

Install and configure

Komga has an official extension for Tachiyomi, available from within Tachiyomi's extension menu.

Once installed, the extension will let you configure up to 3 Komga servers.

Tachiyomi extension infoTachiyomi extension configuration

You will need to configure the extension with your server address, username and password before you can use it.

tip

Example server address: http://my.server:25600(/baseUrl)

Note that there is no trailing slash (/).

Browse

You can browse series, use the filter menu, and search for series.

Tachiyomi extension browseTachiyomi extension filtersTachiyomi extension search

Track read progress

Tachiyomi starting from 0.12.1 can keep your read progress in sync with your Komga server. Check the official Tachiyomi website for instructions.

Requirements:

  • Tachiyomi 0.12.1+
  • Komga 0. 95.2+
  • Tachiyomi Komga extension 1.2.24+

Changelog and Compatibility

Each version of the Komga extension need a specific version of the Komga server to work properly. Check the CHANGELOG for more information.

+ \ No newline at end of file diff --git a/docs/guides/theme/index.html b/docs/guides/theme/index.html index bc477a31..833d7ae7 100644 --- a/docs/guides/theme/index.html +++ b/docs/guides/theme/index.html @@ -6,13 +6,13 @@ Theme | Komga - + - + + \ No newline at end of file diff --git a/docs/guides/trash/index.html b/docs/guides/trash/index.html index b61a52e0..bcda67bd 100644 --- a/docs/guides/trash/index.html +++ b/docs/guides/trash/index.html @@ -6,13 +6,13 @@ Emptying Library Trash | Komga - +
-

Emptying Library Trash

Like modern operating systems, Komga uses a concept of placing items in the “trash” before they’re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the “trash”. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn’t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an “Empty Trash” on your Server.

If an item is currently in the trash, it can be restored back to the Library by making the file for the library item available again at the expected location. Conversely, if you perform an “Empty Trash” on your Server, then the item is discarded from the trash and can no longer be automatically restored.

Items currently in the trash will be displayed with an "Unavailable" indicator.

Unavailable indicator on card

Unavailable indicator on details view

File Hashes

With the trash bin, you can move or rename files and folders without losing your metadata, read progress, or read lists and collections.

To track your files when they are renamed or restored, Komga generates a file hash for each file. If Komga doesn't have a file hash for a file, it won't be able to restore data after a file move or rename. Hashing files requires some computing power, so you may want to disable this entirely on low-end devices (see Configuration).

Automatically Empty Trash

By default, items found removed from a Library are placed in the trash until the trash is emptied. You can choose to have your Server automatically empty the trash after every scan occurs if you wish. To do so:

  1. Open Komga web interface
  2. Edit the library for which you want to change the setting
  3. Enable the Empty trash automatically after every scan option
  4. Save Changes
Empty trash automatically after every scan option
danger

Enabling this option means that content will be removed from your Library immediately with no chance to simply restore it if there was a mistake.

It will also prevent folder and file moves between libraries.

Manually Empty Trash

If you have items in the trash that you’re ready to remove, you can empty the trash. When you choose to empty the trash, you’ll need to confirm your choice.

Look for the action menu icon and click on Empty Trash.

Empty trash confirmation dialog
- +

Emptying Library Trash

Like modern operating systems, Komga uses a concept of placing items in the “trash” before they’re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the “trash”. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn’t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an “Empty Trash” on your Server.

If an item is currently in the trash, it can be restored back to the Library by making the file for the library item available again at the expected location. Conversely, if you perform an “Empty Trash” on your Server, then the item is discarded from the trash and can no longer be automatically restored.

Items currently in the trash will be displayed with an "Unavailable" indicator.

Unavailable indicator on card

Unavailable indicator on details view

File Hashes

With the trash bin, you can move or rename files and folders without losing your metadata, read progress, or read lists and collections.

To track your files when they are renamed or restored, Komga generates a file hash for each file. If Komga doesn't have a file hash for a file, it won't be able to restore data after a file move or rename. Hashing files requires some computing power, so you may want to disable this entirely on low-end devices (see Configuration).

Automatically Empty Trash

By default, items found removed from a Library are placed in the trash until the trash is emptied. You can choose to have your Server automatically empty the trash after every scan occurs if you wish. To do so:

  1. Open Komga web interface
  2. Edit the library for which you want to change the setting
  3. Enable the Empty trash automatically after every scan option
  4. Save Changes
Empty trash automatically after every scan option
danger

Enabling this option means that content will be removed from your Library immediately with no chance to simply restore it if there was a mistake.

It will also prevent folder and file moves between libraries.

Manually Empty Trash

If you have items in the trash that you’re ready to remove, you can empty the trash. When you choose to empty the trash, you’ll need to confirm your choice.

Look for the action menu icon and click on Empty Trash.

Empty trash confirmation dialog
+ \ No newline at end of file diff --git a/docs/guides/user-accounts/index.html b/docs/guides/user-accounts/index.html index 969dab9d..0579ff8a 100644 --- a/docs/guides/user-accounts/index.html +++ b/docs/guides/user-accounts/index.html @@ -6,13 +6,13 @@ User accounts | Komga - +
-

User accounts

The administrator of a Komga server has the ability to create other User Accounts for that server.

You can manage Users in Server Settings > Users.

Users management

Creating Users

You can add a user by clicking on the + button.

Add User

A dialog will show up. Fill in all the required information, and press Add.

Add User Dialog

User Roles

Users can have different roles, giving them the ability to do certain things.

Administrator

An administrator can perform all the management actions:

  • add, edit, and delete libraries
  • add, edit, and delete users
  • add, edit, and delete collections
  • edit series and book metadata
  • manually scan, analyze and refresh metadata

Page Streaming

A user with this role will be able to stream individual pages, for example to read using the Webreader.

File Download

A user with this role will be able to download the file of a book.

Shared Libraries

An administrator can limit what libraries users can access. This is done via the Edit Restrictions button.

Edit Restrictions

Choose the libraries the user will be able to access, or select All libraries for unrestricted access (default option).

Edit Shared Libraries

Content Restrictions

Content restrictions lets you control more finely the content you share. You can select specific age rating as well as content that you’ve set with a specific Label.

Content restriction is performed at series level, and will also apply to books, collections and reading lists.

Age Rating

Select which age rating you wish to only allow or exclude. For instance, if you choose to only allow content under 10 as the restriction, then only content that has an age rating of 10 or under will be shared . If you choose to exclude content over 16 then those will be hidden.

Age Restriction Allow underAge Restriction Exclude over

Labels

You can create arbitrary Labels when editing library content. When sharing, you can then choose to allow one or more Labels to have content matching those Labels shared. You can also exclude labels.

Labels are defined on Series:

Edit Shared Libraries

Multiple restrictions

When combining multiple restrictions, the following rules apply:

  • Exclusion rules have always priority over allow rules.
  • Allow rules apply with an OR condition: for example allowing a user to access content rated 10 or under, or labelled "kids", the user will be able to access content matching one or the other.
Edit Restrictions

Deleting Users

danger

Deleting a user will remove all read progress for this user.

This cannot be undone.

- +

User accounts

The administrator of a Komga server has the ability to create other User Accounts for that server.

You can manage Users in Server Settings > Users.

Users management

Creating Users

You can add a user by clicking on the + button.

Add User

A dialog will show up. Fill in all the required information, and press Add.

Add User Dialog

User Roles

Users can have different roles, giving them the ability to do certain things.

Administrator

An administrator can perform all the management actions:

  • add, edit, and delete libraries
  • add, edit, and delete users
  • add, edit, and delete collections
  • edit series and book metadata
  • manually scan, analyze and refresh metadata

Page Streaming

A user with this role will be able to stream individual pages, for example to read using the Webreader.

File Download

A user with this role will be able to download the file of a book.

Shared Libraries

An administrator can limit what libraries users can access. This is done via the Edit Restrictions button.

Edit Restrictions

Choose the libraries the user will be able to access, or select All libraries for unrestricted access (default option).

Edit Shared Libraries

Content Restrictions

Content restrictions lets you control more finely the content you share. You can select specific age rating as well as content that you’ve set with a specific Label.

Content restriction is performed at series level, and will also apply to books, collections and reading lists.

Age Rating

Select which age rating you wish to only allow or exclude. For instance, if you choose to only allow content under 10 as the restriction, then only content that has an age rating of 10 or under will be shared . If you choose to exclude content over 16 then those will be hidden.

Age Restriction Allow underAge Restriction Exclude over

Labels

You can create arbitrary Labels when editing library content. When sharing, you can then choose to allow one or more Labels to have content matching those Labels shared. You can also exclude labels.

Labels are defined on Series:

Edit Shared Libraries

Multiple restrictions

When combining multiple restrictions, the following rules apply:

  • Exclusion rules have always priority over allow rules.
  • Allow rules apply with an OR condition: for example allowing a user to access content rated 10 or under, or labelled "kids", the user will be able to access content matching one or the other.
Edit Restrictions

Deleting Users

danger

Deleting a user will remove all read progress for this user.

This cannot be undone.

+ \ No newline at end of file diff --git a/docs/guides/webreader/index.html b/docs/guides/webreader/index.html index 47a81d27..c1af68f4 100644 --- a/docs/guides/webreader/index.html +++ b/docs/guides/webreader/index.html @@ -6,13 +6,13 @@ Read with the Webreader | Komga - +
-

Read with the Webreader

Komga has an integrated Webreader packed with features.

To start reading a book, you can click on the read button either on the book card, or on the book details screen.

Book Card Read ButtonBook Details read button

Here is an overview of the Webreader's interface.

Webreader overview

Settings

The Webreader can be configured in various ways from the settings dialog.

Webreader settings

General

Reading mode

Four reading modes are available:

  • Left to right
  • Right to left
  • Vertical
  • Webtoon: displays all the pages in a continuous vertical strip

The Webreader will automatically use the Reading direction specified in the Book metadata.

Animate page transitions

If enable, a smooth transition will be used to switch between pages.

Gestures

Touch gestures are available in the Page reader only (Left to right, Right to left, Vertical), and can be disabled if necessary.

Display

Background color

You can choose the background color of the reader between white and black.

Reader specific options: Paged reader

Scale type

Four scale types are available:

  • Fit to screen
  • Fit to width
  • Fit to height
  • Original

Double pages

When enabled, the Webreader will display two pages on the same screen, like an open book, with the following exceptions:

  • The first and last page will always be shown as a single page
  • If a page has a landscape orientation (width > height), it will be show as a single page

Thumbnails explorer

You can use the Thumbnails explorer to have an overview of all the pages in the book, and to quickly navigate to a particular page.

Thumbnails explorer

Help dialog

The help dialog will display the available keyboard shortcuts. The dialog is context-aware, and will only show shortcuts that are relevant to the current reading mode.

- +

Read with the Webreader

Komga has an integrated Webreader packed with features.

To start reading a book, you can click on the read button either on the book card, or on the book details screen.

Book Card Read ButtonBook Details read button

Here is an overview of the Webreader's interface.

Webreader overview

Settings

The Webreader can be configured in various ways from the settings dialog.

Webreader settings

General

Reading mode

Four reading modes are available:

  • Left to right
  • Right to left
  • Vertical
  • Webtoon: displays all the pages in a continuous vertical strip

The Webreader will automatically use the Reading direction specified in the Book metadata.

Animate page transitions

If enable, a smooth transition will be used to switch between pages.

Gestures

Touch gestures are available in the Page reader only (Left to right, Right to left, Vertical), and can be disabled if necessary.

Display

Background color

You can choose the background color of the reader between white and black.

Reader specific options: Paged reader

Scale type

Four scale types are available:

  • Fit to screen
  • Fit to width
  • Fit to height
  • Original

Double pages

When enabled, the Webreader will display two pages on the same screen, like an open book, with the following exceptions:

  • The first and last page will always be shown as a single page
  • If a page has a landscape orientation (width > height), it will be show as a single page

Thumbnails explorer

You can use the Thumbnails explorer to have an overview of all the pages in the book, and to quickly navigate to a particular page.

Thumbnails explorer

Help dialog

The help dialog will display the available keyboard shortcuts. The dialog is context-aware, and will only show shortcuts that are relevant to the current reading mode.

+ \ No newline at end of file diff --git a/docs/guides/webui/index.html b/docs/guides/webui/index.html index 92669e84..abab293f 100644 --- a/docs/guides/webui/index.html +++ b/docs/guides/webui/index.html @@ -6,13 +6,13 @@ Accessing the web interface | Komga - +
-

Accessing the web interface

Once Komga is started, you can access the web interface at: http://<your-server>:<port>(/baseUrl).

tip

If you are running Komga locally, <your-server> will be localhost.

The default <port> is 25600.

Create user account

You will be asked to create a user account. Choose an email and password, then click on Create User Account.

Create initial account
- +

Accessing the web interface

Once Komga is started, you can access the web interface at: http://<your-server>:<port>(/baseUrl).

tip

If you are running Komga locally, <your-server> will be localhost.

The default <port> is 25600.

Create user account

You will be asked to create a user account. Choose an email and password, then click on Create User Account.

Create initial account
+ \ No newline at end of file diff --git a/docs/installation/configuration/index.html b/docs/installation/configuration/index.html index 8662fb95..cd5055f4 100644 --- a/docs/installation/configuration/index.html +++ b/docs/installation/configuration/index.html @@ -6,13 +6,13 @@ Configuration options | Komga - +
-

Configuration options

tip

Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.

The application.yml file does not exist by default, you need to create one if you want to customize the configuration.

Komga relies heavily on Spring Boot's configuration, leveraging profiles and configuration properties.

The easiest way to configure is either via environment variables (a good fit for docker and docker-compose) or by using an application.yml file located in the configuration directory:

  • The Docker image will load any application.yml file located in the /config mounted folder.
  • The Jar will load any application.yml file located in the komga.config-dir directory (defaults to ~/.komga, more details).

Each configuration key can have a different format depending if it's from the environment variable, or from the application.yml file. In the following section I will provide both format in the form ENVIRONMENT_VARIABLE / application-property.

You can also specify configuration via the command line, when launching the jar. Use the application-property form, and prefix with --. For example:

java -jar komga.jar --server.servlet.context-path="/komga" --server.port=8443

Optional configuration

You can use some optional configuration keys:

KOMGA_CONFIGDIR / komga.config-dir: <directory>

The Komga configuration directory. Will be used to store the logs, database, and any other file Komga needs.

Defaults to:

  • %LOCALAPPDATA%/Komga on the Windows app. That folder is virtualized by Windows.
  • ~/Library/Application Support/Komga on the macOS app.
  • ~/.komga otherwise.

~ is your home directory on Unix, and your User profile on Windows.

When overriding this configuration, you need to use ${user.home} instead of ~ (this is a specific Spring Boot variable).

SERVER_PORT / server.port: <port>

Port to listen to for the API and web interface.

Defaults to 25600.

SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: <baseUrl>

Base URL, useful if you need to reverse proxy with a subfolder.

Defaults to /.

SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: <duration>

The duration after which an inactive session will expire. You can specify the timeunit, for example 14d for 14 days, or 24h for 24 hours. If no unit is set, seconds will be used.

Defaults to 30 minutes.

KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: <cron>

This has been moved to Library options: scan interval.

KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: <true/false>

This has been moved to Library options: scan on startup.

KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: <exclusions>

This has been moved to Library options: directory exclusions.

KOMGA_REMEMBERME_KEY / komga.remember-me.key: <key>

This has been moved to Server Settings.

KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: <duration>

This has been moved to Server Settings.

KOMGA_SESSIONTIMEOUT / komga.session-timeout: <duration>

This has been replaced by server.servlet.session.timeout.

KOMGA_DATABASE_FILE / komga.database.file: <file path>

File path for the SQLite database.

If you want to change the directory, it is advised to change komga.config-dir instead.

Defaults to:

  • /config/database.sqlite for Docker.
  • \${komga.config-dir}/database.sqlite otherwise.

KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: <origins>

A list of origins to allow for CORS.

Defaults to empty list.

KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: <true/false>

This has been moved to Server Settings.

KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: <true/false>

This has been moved to Server Settings.

KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: <true/false>

A boolean indicating whether Komga should create new users when a login via OAuth2/OIDC succeeds, but there is no existing user with that email.

Such users will be created with a random password, which the user can subsequently change from the Account Settings page later on, for example to be able to connect using OPDS or Tachiyomi.

caution

It is recommended to enable this only with OAuth2 providers you control

Defaults to false.

KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: <true/false>

A boolean indicating whether Komga should check whether the email_verified claim is present and true in the OpenID Connect request.

caution

It is recommended to disable this only with OIDC providers that do not verify emails (like Azure AD)

Defaults to true.

LOGGING_FILE_NAME / logging.file.name: <logfile name>

Name of the log file.

If you want to change the directory, it is advised to change komga.config-dir instead.

Defaults to:

  • ~/Library/Logs/Komga/komga.log for the macOS app.
  • /config/logs/komga.log for Docker.
  • \${komga.config-dir}/komga.log otherwise.

~ is your home directory on Unix, and your User profile on Windows.

When overriding this configuration, you need to use ${user.home} instead of ~ (this is a specific Spring Boot variable).

KOMGA_TASKCONSUMERS / komga.task-consumers: <int>

This has been removed.

KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: <int>

This has been removed.

Sample Configuration File

Here is a sample application.yml file in case you need to customize it. Keep only the lines you need.

# Only keep lines that are relevant to you!
# Lines starting with # are comments
# Make sure indentation is correct (2 spaces at every indentation level), yaml is very sensitive!
komga:
database:
file: ${user.home}/.komga/database.sqlite
cors.allowed-origins:
- http://localhost:8081
- http://localhost:8082
delete-empty-collections: true
delete-empty-read-lists: true
server:
port: 25600
servlet:
session.timeout: 7d # session timeout, here 7 days
context-path: /komga

Database performance

caution

Use at your own risk!

Some specific configuration keys are available to tweak the database performance.

komga:
database:
# sets the retry timeout when SQLITE_BUSY error happens
busy-timeout: 30s

# changes the journal mode
# accepted values are: DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF
# most likely to be set to wal if needed, check https://sqlite.org/wal.html for more details
journal-mode: wal

# pool size will determine the number of connections in the pool
# this takes precedence over max-pool-size if set
# defaults to undefined
pool-size: 1

# max-pool-size will determine the maximum number of connections in the pool
# when set, the number of connections is set to the number of available processors capped at max-pool-size
# defaults to 1
max-pool-size: 8

# pragmas accepts a list of key/value pairs where:
# - key is the pragma name (see https://www.sqlite.org/pragma.html)
# - value is the pragma value
pragmas:
# here are some example pragmas
page_size: 1024
synchronous: OFF
- +

Configuration options

tip

Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.

The application.yml file does not exist by default, you need to create one if you want to customize the configuration.

Komga relies heavily on Spring Boot's configuration, leveraging profiles and configuration properties.

The easiest way to configure is either via environment variables (a good fit for docker and docker-compose) or by using an application.yml file located in the configuration directory:

  • The Docker image will load any application.yml file located in the /config mounted folder.
  • The Jar will load any application.yml file located in the komga.config-dir directory (defaults to ~/.komga, more details).

Each configuration key can have a different format depending if it's from the environment variable, or from the application.yml file. In the following section I will provide both format in the form ENVIRONMENT_VARIABLE / application-property.

You can also specify configuration via the command line, when launching the jar. Use the application-property form, and prefix with --. For example:

java -jar komga.jar --server.servlet.context-path="/komga" --server.port=8443

Optional configuration

You can use some optional configuration keys:

KOMGA_CONFIGDIR / komga.config-dir: <directory>

The Komga configuration directory. Will be used to store the logs, database, and any other file Komga needs.

Defaults to:

  • %LOCALAPPDATA%/Komga on the Windows app. That folder is virtualized by Windows.
  • ~/Library/Application Support/Komga on the macOS app.
  • ~/.komga otherwise.

~ is your home directory on Unix, and your User profile on Windows.

When overriding this configuration, you need to use ${user.home} instead of ~ (this is a specific Spring Boot variable).

SERVER_PORT / server.port: <port>

Port to listen to for the API and web interface.

Defaults to 25600.

SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: <baseUrl>

Base URL, useful if you need to reverse proxy with a subfolder.

Defaults to /.

SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: <duration>

The duration after which an inactive session will expire. You can specify the timeunit, for example 14d for 14 days, or 24h for 24 hours. If no unit is set, seconds will be used.

Defaults to 30 minutes.

KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: <cron>

This has been moved to Library options: scan interval.

KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: <true/false>

This has been moved to Library options: scan on startup.

KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: <exclusions>

This has been moved to Library options: directory exclusions.

KOMGA_REMEMBERME_KEY / komga.remember-me.key: <key>

This has been moved to Server Settings.

KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: <duration>

This has been moved to Server Settings.

KOMGA_SESSIONTIMEOUT / komga.session-timeout: <duration>

This has been replaced by server.servlet.session.timeout.

KOMGA_DATABASE_FILE / komga.database.file: <file path>

File path for the SQLite database.

If you want to change the directory, it is advised to change komga.config-dir instead.

Defaults to:

  • /config/database.sqlite for Docker.
  • \${komga.config-dir}/database.sqlite otherwise.

KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: <origins>

A list of origins to allow for CORS.

Defaults to empty list.

KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: <true/false>

This has been moved to Server Settings.

KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: <true/false>

This has been moved to Server Settings.

KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: <true/false>

A boolean indicating whether Komga should create new users when a login via OAuth2/OIDC succeeds, but there is no existing user with that email.

Such users will be created with a random password, which the user can subsequently change from the Account Settings page later on, for example to be able to connect using OPDS or Tachiyomi.

caution

It is recommended to enable this only with OAuth2 providers you control

Defaults to false.

KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: <true/false>

A boolean indicating whether Komga should check whether the email_verified claim is present and true in the OpenID Connect request.

caution

It is recommended to disable this only with OIDC providers that do not verify emails (like Azure AD)

Defaults to true.

LOGGING_FILE_NAME / logging.file.name: <logfile name>

Name of the log file.

If you want to change the directory, it is advised to change komga.config-dir instead.

Defaults to:

  • ~/Library/Logs/Komga/komga.log for the macOS app.
  • /config/logs/komga.log for Docker.
  • \${komga.config-dir}/komga.log otherwise.

~ is your home directory on Unix, and your User profile on Windows.

When overriding this configuration, you need to use ${user.home} instead of ~ (this is a specific Spring Boot variable).

KOMGA_TASKCONSUMERS / komga.task-consumers: <int>

This has been removed.

KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: <int>

This has been removed.

Sample Configuration File

Here is a sample application.yml file in case you need to customize it. Keep only the lines you need.

# Only keep lines that are relevant to you!
# Lines starting with # are comments
# Make sure indentation is correct (2 spaces at every indentation level), yaml is very sensitive!
komga:
database:
file: ${user.home}/.komga/database.sqlite
cors.allowed-origins:
- http://localhost:8081
- http://localhost:8082
delete-empty-collections: true
delete-empty-read-lists: true
server:
port: 25600
servlet:
session.timeout: 7d # session timeout, here 7 days
context-path: /komga

Database performance

caution

Use at your own risk!

Some specific configuration keys are available to tweak the database performance.

komga:
database:
# sets the retry timeout when SQLITE_BUSY error happens
busy-timeout: 30s

# changes the journal mode
# accepted values are: DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF
# most likely to be set to wal if needed, check https://sqlite.org/wal.html for more details
journal-mode: wal

# pool size will determine the number of connections in the pool
# this takes precedence over max-pool-size if set
# defaults to undefined
pool-size: 1

# max-pool-size will determine the maximum number of connections in the pool
# when set, the number of connections is set to the number of available processors capped at max-pool-size
# defaults to 1
max-pool-size: 8

# pragmas accepts a list of key/value pairs where:
# - key is the pragma name (see https://www.sqlite.org/pragma.html)
# - value is the pragma value
pragmas:
# here are some example pragmas
page_size: 1024
synchronous: OFF
+ \ No newline at end of file diff --git a/docs/installation/desktop/index.html b/docs/installation/desktop/index.html index d1cf2c91..a301931e 100644 --- a/docs/installation/desktop/index.html +++ b/docs/installation/desktop/index.html @@ -6,13 +6,13 @@ Install the Desktop application | Komga - +
-

Install the Desktop application

You can install Komga from the Download page. Just follow the instructions on the page.

The desktop application is available for Windows, macOS and Linux.

Updating

The application will automatically update itself when a new version is available.

Windows

The OS itself will check for updates every 8 hours and upgrade the app in the background, even if it's not being used. Users will never see an update prompt.

macOS

The app will check for updates on startup without blocking the user, and on a schedule whilst the app runs. Once the user agrees, updates will be downloaded and applied in the background ready for the next launch.

Linux

An update check will be performed synchronously on each app start. If a new version is available then the update process will start and the update downloaded and applied, without any user interaction being required.

Check the Desktop Application page.

- +

Install the Desktop application

You can install Komga from the Download page. Just follow the instructions on the page.

The desktop application is available for Windows, macOS and Linux.

Updating

The application will automatically update itself when a new version is available.

Windows

The OS itself will check for updates every 8 hours and upgrade the app in the background, even if it's not being used. Users will never see an update prompt.

macOS

The app will check for updates on startup without blocking the user, and on a schedule whilst the app runs. Once the user agrees, updates will be downloaded and applied in the background ready for the next launch.

Linux

An update check will be performed synchronously on each app start. If a new version is available then the update process will start and the update downloaded and applied, without any user interaction being required.

Check the Desktop Application page.

+ \ No newline at end of file diff --git a/docs/installation/docker/index.html b/docs/installation/docker/index.html index 10397b46..f1b30974 100644 --- a/docs/installation/docker/index.html +++ b/docs/installation/docker/index.html @@ -6,15 +6,15 @@ Run with Docker | Komga - +

Run with Docker

Registries

The Docker images are published on:

Version tags

This image provides various versions that are available via tags.

TagDescription
latestlatest commit
MAJOR.xlatest MAJOR version, for example 0.x
x.y.zversion x.y.z

Usage

Here are some example snippets to help you get started creating a container.

docker

docker create \
--name=komga \
--user 1000:1000 \
-p 25600:25600 \
--mount type=bind,source=/path/to/config,target=/config \
--mount type=bind,source=/path/to/data,target=/data \
--restart unless-stopped \
gotson/komga

Then start the container:

docker start komga

docker-compose

---
version: '3.3'
services:
komga:
image: gotson/komga
container_name: komga
volumes:
- type: bind
source: /path/to/config
target: /config
- type: bind
source: /path/to/data
target: /data
- type: bind
source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London
target: /etc/timezone
read_only: true
ports:
- 25600:25600
user: "1000:1000"
# remove the whole environment section if you don't need it
environment:
- <ENV_VAR>=<extra configuration>
restart: unless-stopped

Parameters

Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate external:internal respectively. -For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

ParameterFunction
-p 25600The port for the Komga APIs and web interface
--user: 1000:1000User:Group identifier - see below for explanation
--mount type=bind,source=/path/to/config,target=/configDatabase and Komga configurations
--mount type=bind,source=/path/to/data,target=/dataLocation of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work.
-e ENV_VAR=valueAny configuration environment variable

User / Group Identifiers

When using volumes (-v flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user ID and group ID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance UID=1000 and GID=1000, to find yours use id <your_user> as below:

$ id <your_user>
uid=1000(jdoe) gid=1000(jdgroup) groups=1000(jdgroup)

Increase memory limit

By default the java process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some OutOfMemoryException in the logs you probably need to increase the maximum memory Komga can use.

To do so, you can use the JAVA_TOOL_OPTIONS=-Xmx<limit> environment variable, where <limit> can be any amount like 2048m, 4g etc. For example to run Komga with a maximum of 4gb of memory:

JAVA_TOOL_OPTIONS=-Xmx4g

Support info

  • Shell access whilst the container is running: docker exec -it komga /bin/bash
  • To monitor the logs of the container in realtime: docker logs -f komga

Updating

Below are the instructions for updating containers:

Via Docker Run/Create

  • Update the image: docker pull gotson/komga
  • Stop the running container: docker stop komga
  • Delete the container: docker rm komga
  • Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your /config folder and settings will be preserved)
  • Start the new container: docker start komga
  • You can also remove the old dangling images: docker image prune

Via Docker Compose

  • Update all images: docker-compose pull
    • or update a single image: docker-compose pull komga
  • Let compose update all containers as necessary: docker-compose up -d
    • or update a single container: docker-compose up -d komga
  • You can also remove the old dangling images: docker image prune

Automatic updates

You can use Watchtower to automatically update your containers.

- +For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

ParameterFunction
-p 25600The port for the Komga APIs and web interface
--user: 1000:1000User:Group identifier - see below for explanation
--mount type=bind,source=/path/to/config,target=/configDatabase and Komga configurations
--mount type=bind,source=/path/to/data,target=/dataLocation of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work.
-e ENV_VAR=valueAny configuration environment variable

User / Group Identifiers

When using volumes (-v flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user ID and group ID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance UID=1000 and GID=1000, to find yours use id <your_user> as below:

$ id <your_user>
uid=1000(jdoe) gid=1000(jdgroup) groups=1000(jdgroup)

Increase memory limit

By default the java process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some OutOfMemoryException in the logs you probably need to increase the maximum memory Komga can use.

To do so, you can use the JAVA_TOOL_OPTIONS=-Xmx<limit> environment variable, where <limit> can be any amount like 2048m, 4g etc. For example to run Komga with a maximum of 4gb of memory:

JAVA_TOOL_OPTIONS=-Xmx4g

Support info

  • Shell access whilst the container is running: docker exec -it komga /bin/bash
  • To monitor the logs of the container in realtime: docker logs -f komga

Updating

Below are the instructions for updating containers:

Via Docker Run/Create

  • Update the image: docker pull gotson/komga
  • Stop the running container: docker stop komga
  • Delete the container: docker rm komga
  • Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your /config folder and settings will be preserved)
  • Start the new container: docker start komga
  • You can also remove the old dangling images: docker image prune

Via Docker Compose

  • Update all images: docker-compose pull
    • or update a single image: docker-compose pull komga
  • Let compose update all containers as necessary: docker-compose up -d
    • or update a single container: docker-compose up -d komga
  • You can also remove the old dangling images: docker image prune

Automatic updates

You can use Watchtower to automatically update your containers.

+ \ No newline at end of file diff --git a/docs/installation/gdrive/index.html b/docs/installation/gdrive/index.html index c9437d37..3cf879b2 100644 --- a/docs/installation/gdrive/index.html +++ b/docs/installation/gdrive/index.html @@ -6,14 +6,14 @@ Google Drive and rclone | Komga - +

Google Drive and rclone

If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.

You will need to configure your library to force the directory modified time.

Rclone requires some specific configuration to cache files locally, and work better with Komga. -Here is a user-provided configuration that works well (thanks Magikarp):

rclone mount <name>:<path> <mount_point/folder> \
--no-checksum \
--use-server-modtime \
--no-gzip-encoding \
--no-update-modtime \
--no-seek \
--modify-window 2m \
--allow-other \
--allow-non-empty \
--dir-cache-time 30m \
--cache-read-retries 15 \
--cache-db-purge \
--timeout 30m \
--vfs-cache-mode full \
--vfs-read-chunk-size 2M \
--vfs-read-chunk-size-limit 5M \
--vfs-cache-max-age 30m \
--attr-timeout 20s \
--poll-interval 9m \
--vfs-cache-poll-interval 10m
- +Here is a user-provided configuration that works well (thanks Magikarp):

rclone mount <name>:<path> <mount_point/folder> \
--no-checksum \
--use-server-modtime \
--no-gzip-encoding \
--no-update-modtime \
--no-seek \
--modify-window 2m \
--allow-other \
--allow-non-empty \
--dir-cache-time 30m \
--cache-read-retries 15 \
--cache-db-purge \
--timeout 30m \
--vfs-cache-mode full \
--vfs-read-chunk-size 2M \
--vfs-read-chunk-size-limit 5M \
--vfs-cache-max-age 30m \
--attr-timeout 20s \
--poll-interval 9m \
--vfs-cache-poll-interval 10m
+ \ No newline at end of file diff --git a/docs/installation/https/index.html b/docs/installation/https/index.html index e936dbcc..6594ad67 100644 --- a/docs/installation/https/index.html +++ b/docs/installation/https/index.html @@ -6,13 +6,13 @@ Expose your server | Komga - +
-

Expose your server

HTTPS

If you want to open your Komga server outside your local network, it is strongly advised to secure it with https (especially due to the use of http basic authentication).

Spring Boot supports https out of the box, but you will have to configure it, and https is most useful only with valid certificates (not self-signed), which most people don't readily have available.

I recommend using Caddy as a reverse proxy, as it supports the automatic generation of Let's Encrypt certificates.

Reverse proxy

Here are some sample configuration on how to configure reverse proxy for Komga.

Caddy (v1)

Without a base URL configured in Komga, using a subdomain:

komga.yourdomain.com {
proxy / http://your-komga-server:25600 {
transparent
}
}

With a base URL configured in Komga:

yourdomain.com {
proxy /komga http://your-komga-server:25600 {
transparent
}
}

Caddy (v2)

Without a base URL configured in Komga, using a subdomain:

komga.yourdomain.com {
reverse_proxy http://your-komga-server:25600
}

With a base URL configured in Komga:

yourdomain.com {
reverse_proxy /komga/* http://your-komga-server:25600
}
- +

Expose your server

HTTPS

If you want to open your Komga server outside your local network, it is strongly advised to secure it with https (especially due to the use of http basic authentication).

Spring Boot supports https out of the box, but you will have to configure it, and https is most useful only with valid certificates (not self-signed), which most people don't readily have available.

I recommend using Caddy as a reverse proxy, as it supports the automatic generation of Let's Encrypt certificates.

Reverse proxy

Here are some sample configuration on how to configure reverse proxy for Komga.

Caddy (v1)

Without a base URL configured in Komga, using a subdomain:

komga.yourdomain.com {
proxy / http://your-komga-server:25600 {
transparent
}
}

With a base URL configured in Komga:

yourdomain.com {
proxy /komga http://your-komga-server:25600 {
transparent
}
}

Caddy (v2)

Without a base URL configured in Komga, using a subdomain:

komga.yourdomain.com {
reverse_proxy http://your-komga-server:25600
}

With a base URL configured in Komga:

yourdomain.com {
reverse_proxy /komga/* http://your-komga-server:25600
}
+ \ No newline at end of file diff --git a/docs/installation/jar/index.html b/docs/installation/jar/index.html index 2e05ab3e..d99f9553 100644 --- a/docs/installation/jar/index.html +++ b/docs/installation/jar/index.html @@ -6,13 +6,13 @@ Run with the Jar file | Komga - +
-

Run with the Jar file

tip

You need Java version 17+ to run Komga. Check your version with java -version.

You can run Komga from the fat jar file. You can download them in the releases section.

In order to run Komga, use the following command (replace x.y.z with the actual version number):

java -jar komga-x.y.z.jar

Once Komga is started, you can access the web interface.

tip

On Windows, use javaw instead of java to launch Komga without a command prompt window appearing.

Increase memory limit

By default the java process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some OutOfMemoryException in the logs you probably need to increase the maximum memory Komga can use.

To do so, you can use the -Xmx<limit> command line flag, where <limit> can be any amount like 2048m, 4g etc. For example to run Komga with a maximum of 4gb of memory:

java -jar -Xmx4g komga-x.y.z.jar

Updating

To update just stop Komga, then start it with the latest jar.

- +

Run with the Jar file

tip

You need Java version 17+ to run Komga. Check your version with java -version.

You can run Komga from the fat jar file. You can download them in the releases section.

In order to run Komga, use the following command (replace x.y.z with the actual version number):

java -jar komga-x.y.z.jar

Once Komga is started, you can access the web interface.

tip

On Windows, use javaw instead of java to launch Komga without a command prompt window appearing.

Increase memory limit

By default the java process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some OutOfMemoryException in the logs you probably need to increase the maximum memory Komga can use.

To do so, you can use the -Xmx<limit> command line flag, where <limit> can be any amount like 2048m, 4g etc. For example to run Komga with a maximum of 4gb of memory:

java -jar -Xmx4g komga-x.y.z.jar

Updating

To update just stop Komga, then start it with the latest jar.

+ \ No newline at end of file diff --git a/docs/installation/ms-store/index.html b/docs/installation/ms-store/index.html index 1783a246..d6f35af2 100644 --- a/docs/installation/ms-store/index.html +++ b/docs/installation/ms-store/index.html @@ -6,13 +6,13 @@ Install from the Microsoft Store | Komga - +
-

Install from the Microsoft Store

You can install Komga from the Microsoft Store.

Updating

The application will automatically update itself when a new version is available from the Microsoft Store.

Note that it takes up to a day or two for new releases to show in the Microsoft Store, as Microsoft needs to validate every new version.

Check the Desktop Application page.

- +

Install from the Microsoft Store

You can install Komga from the Microsoft Store.

Updating

The application will automatically update itself when a new version is available from the Microsoft Store.

Note that it takes up to a day or two for new releases to show in the Microsoft Store, as Microsoft needs to validate every new version.

Check the Desktop Application page.

+ \ No newline at end of file diff --git a/docs/installation/oauth2/index.html b/docs/installation/oauth2/index.html index 73b57ef9..bae6e37c 100644 --- a/docs/installation/oauth2/index.html +++ b/docs/installation/oauth2/index.html @@ -6,7 +6,7 @@ Social login | Komga - + @@ -15,8 +15,8 @@ jwk-set-uri, user-info-uri. If your authentication server provides issuer-uri, this option is preferred.

The registration section contains a provider option, this must be the same name as specified in the provider configuration. (In the example below, we've configured provider with name keycloak, so in the registration section we set provider: keycloak). The name of the provider can be whatever you want, no need -to use the service's name if you don't want to.

Sample configuration:

spring:
security:
oauth2:
client:
registration:
keycloak:
provider: keycloak # this must match the provider below
client-id: your-client-id
client-secret: c830e452-a2a9-40a0-93c1-eb84ea688245
client-name: Keycloak
scope: openid,email
authorization-grant-type: authorization_code
# the placeholders in {} will be replaced automatically, you don't need to change this line
redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
provider:
keycloak: # this must match the provider above
user-name-attribute: sub
# either set the issuer-uri, in which case the app will lookup the configuration for you automatically
issuer-uri: http://localhost:8085/auth/realms/komgatest
# or set all of the following
authorization-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/auth
token-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/token
jwk-set-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/certs
user-info-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/userinfo
- +to use the service's name if you don't want to.

Sample configuration:

spring:
security:
oauth2:
client:
registration:
keycloak:
provider: keycloak # this must match the provider below
client-id: your-client-id
client-secret: c830e452-a2a9-40a0-93c1-eb84ea688245
client-name: Keycloak
scope: openid,email
authorization-grant-type: authorization_code
# the placeholders in {} will be replaced automatically, you don't need to change this line
redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
provider:
keycloak: # this must match the provider above
user-name-attribute: sub
# either set the issuer-uri, in which case the app will lookup the configuration for you automatically
issuer-uri: http://localhost:8085/auth/realms/komgatest
# or set all of the following
authorization-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/auth
token-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/token
jwk-set-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/certs
user-info-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/userinfo
+ \ No newline at end of file diff --git a/docs/installation/thirdparty/index.html b/docs/installation/thirdparty/index.html index 6a50a92e..27b86a5d 100644 --- a/docs/installation/thirdparty/index.html +++ b/docs/installation/thirdparty/index.html @@ -6,7 +6,7 @@ Install via third-party integrations | Komga - + @@ -15,8 +15,8 @@ In order to create komga you need to find it under the TrueCharts apps in SCALE. Scale needs access to ip range of: 172.16.0.0/16 in order to deploy. Keep all defaults and change:

  1. Enter a name with lowercase letters.
  2. Change the update type to "Rolling Update:Create new pods and then kill old ones"
  3. Next
  4. You can change the node port to whatever you prefer, this is the port you will be accessing komga over.
  5. This is the Komga Data source, add what you need.
  6. Next
  7. Next
  8. Choose the container resources (I chose default), Next.
  9. I left this at disabled, Next.
  10. Install Komga and let it run. -Once its installed click portal and you now have komga setup in SCALE.
- +Once its installed click portal and you now have komga setup in SCALE. + \ No newline at end of file diff --git a/docs/introduction/index.html b/docs/introduction/index.html index b28fd91c..8aa2da9f 100644 --- a/docs/introduction/index.html +++ b/docs/introduction/index.html @@ -6,13 +6,13 @@ Introduction | Komga - +
-

Introduction

What is Komga?

Komga is a media server for your comics, mangas, BDs and magazines.

How it works:

  1. Install and run Komga on a computer or NAS.
  2. Add libraries by type of content and let Komga do the rest.
  3. Use the web interface or any compatible client.
  4. Enjoy your books!

What media and devices work?

Komga supports these media file types

Komga supports the following file types:

  • Comic book archives: CBZ and CBR (except RAR5 and solid archives)
  • Comic books in EPUB format (only images)
  • PDF files

Komga server compatibility

Komga can run on any system that can run Java or Docker:

  • Windows
  • macOS
  • Linux
  • Many popular NAS devices such as QNAP, Synology and more

Demo

A demonstration website is available at: https://demo.komga.org

You can log in using the following credentials:

  • Login: demo@komga.org
  • Password: komga-demo
- +

Introduction

What is Komga?

Komga is a media server for your comics, mangas, BDs and magazines.

How it works:

  1. Install and run Komga on a computer or NAS.
  2. Add libraries by type of content and let Komga do the rest.
  3. Use the web interface or any compatible client.
  4. Enjoy your books!

What media and devices work?

Komga supports these media file types

Komga supports the following file types:

  • Comic book archives: CBZ and CBR (except RAR5 and solid archives)
  • Comic books in EPUB format (only images)
  • PDF files

Komga server compatibility

Komga can run on any system that can run Java or Docker:

  • Windows
  • macOS
  • Linux
  • Many popular NAS devices such as QNAP, Synology and more

Demo

A demonstration website is available at: https://demo.komga.org

You can log in using the following credentials:

  • Login: demo@komga.org
  • Password: komga-demo
+ \ No newline at end of file diff --git a/index.html b/index.html index 8313c0ee..6170fee3 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,13 @@ Free and open source comics/mangas media server | Komga - +

Komga

Free and open source comics/mangas media server

Organize

Organize your CBZ, CBR, PDF and EPUB files in different libraries, collections or reading lists.

Read

Use the integrated Webreader, the Tachiyomi extension, any OPDS reader, or other integrations.

Manage

Edit metadata for your series and books.

- + \ No newline at end of file