Compare commits
1111 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 318fba6c97 | |||
| 2d63fa80b4 | |||
| 1dc211a046 | |||
| f71f379529 | |||
| bee95b4977 | |||
| 9f8aaa57b6 | |||
| 2c1aab154a | |||
| 37cfac27b8 | |||
| 11b2e2a6e2 | |||
| d555ee737b | |||
| 12a6a7d95a | |||
| caac3bfc95 | |||
| 05630776a0 | |||
| 72c947cbaf | |||
| 53fb3a36f7 | |||
| 6b3892987a | |||
| 390919c439 | |||
| 09ab06ae6c | |||
| ad9373312b | |||
| bd71e087d4 | |||
| c90dcde7cc | |||
| d91cc3616b | |||
| 74cd3d66c6 | |||
| e6f9d9a31a | |||
| b71a86142b | |||
| 6e4ba6184b | |||
| b37162099e | |||
| dab74662e9 | |||
| 3d103046bc | |||
| 3ca62d9c55 | |||
| 2cd45ed1de | |||
| 263598f2cf | |||
| 1d1d71c779 | |||
| fd13265131 | |||
| 911c35a7f1 | |||
| adb265794c | |||
| 8c20d8cb3d | |||
| 43359f1d26 | |||
| dc9da7480c | |||
| 18647203cc | |||
| be8f2c01a2 | |||
| c8fffe4ade | |||
| 43fd7737f1 | |||
| fb4969d5d1 | |||
| 3cc4af5947 | |||
| ac39ebddc0 | |||
| 29bb1f7ef2 | |||
| b8d2f5b373 | |||
| 2139853dd9 | |||
| 527aa61a87 | |||
| 4261fc8a04 | |||
| 7dbddba757 | |||
| 16183791f3 | |||
| f38c7a4b7e | |||
| bb0b2a1f53 | |||
| 0048662182 | |||
| 7bd2455175 | |||
| 43e49f36b7 | |||
| e4b3479779 | |||
| 6bac9c7e8f | |||
| ff3cde4dfb | |||
| 7aab84f2d9 | |||
| 3a940711eb | |||
| 2b0b2bb1ae | |||
| e39507552f | |||
| b019ab79f9 | |||
| 43da8c2a72 | |||
| 0b65cea6fd | |||
| a1806390b0 | |||
| 5d6559e839 | |||
| 29c79ad1d8 | |||
| d77a1aba7a | |||
| 9e21b16553 | |||
| dcb56ae775 | |||
| ab2c019a7a | |||
| eb408d4858 | |||
| 4f38851880 | |||
| 2c356ec87f | |||
| bb84464216 | |||
| 32b9e0bad4 | |||
| 02f5a86ee9 | |||
| 391bf052e4 | |||
| d2a9363fc5 | |||
| 68af4cd5ba | |||
| c82dcb11e1 | |||
| d0f8d8d1f9 | |||
| 6a852332de | |||
| 830fec0c29 | |||
| aa68d35f42 | |||
| 6e6fe9bc87 | |||
| 29f68e6dbb | |||
| 9428b2576b | |||
| 3210302ecd | |||
| f23979024a | |||
| 870a65fa6d | |||
| 199eb20b66 | |||
| 91114e5aa0 | |||
| dfbc831525 | |||
| 1a640609c7 | |||
| 00630bd4a3 | |||
| fb408d7aa3 | |||
| 6b5d6e4091 | |||
| a287be1f0c | |||
| 42a3149fe3 | |||
| 5aee5c0fb8 | |||
| 12ecf366b0 | |||
| 275562bce0 | |||
| a09030fd6d | |||
| 414893a687 | |||
| 5939d79057 | |||
| 189bd37e71 | |||
| 715056047c | |||
| 0220f900c1 | |||
| 10a0e58572 | |||
| 8d47798fa2 | |||
| 3f2513a717 | |||
| 9be71f603e | |||
| d354b38139 | |||
| 1152cd4f07 | |||
| de0e218440 | |||
| d377cf0d02 | |||
| 788b435f9b | |||
| 6ea91b2dde | |||
| 55d883925f | |||
| 89aff7764d | |||
| c4e1bc35b4 | |||
| 7e53e33e0f | |||
| 8b73c2bf8a | |||
| bcb0056b55 | |||
| b1311547b2 | |||
| bddba4bd96 | |||
| 8f304b8157 | |||
| 6acfac9064 | |||
| f64db3a2f9 | |||
| d1db47ee34 | |||
| 3b1f27b674 | |||
| 0e753b245a | |||
| 8b7d7f1666 | |||
| 0f1afff4c3 | |||
| 50c36068e7 | |||
| a6f7fdba4e | |||
| 9d337bf4dc | |||
| b7d34079d9 | |||
| eade36ee82 | |||
| 443d08381a | |||
| 4e6880e520 | |||
| 9a300d0286 | |||
| 9987e3bcef | |||
| cc749858cb | |||
| 89264b3da4 | |||
| 3aab8ccb4a | |||
| 171ba84741 | |||
| 83271bb11e | |||
| ffbc9a28ad | |||
| a65fea4d64 | |||
| 182ee3c0da | |||
| efe204fef8 | |||
| 026308acc9 | |||
| 3f60cf5377 | |||
| b07891089f | |||
| 4cfac47674 | |||
| f4c90426a5 | |||
| e5d798581c | |||
| 05b79eb77b | |||
| 4e0fe27de3 | |||
| 8eb82836b9 | |||
| 5262e92b9f | |||
| c0a6b3d5a3 | |||
| 66cd7dd809 | |||
| c90a88fb17 | |||
| de4a699c46 | |||
| 149d0da724 | |||
| 5340683199 | |||
| 652f5cbf20 | |||
| 8094b25185 | |||
| bdad18a572 | |||
| a8cbda5f24 | |||
| 753d81adad | |||
| 43e9529ce4 | |||
| 0c258f0506 | |||
| 912d5a3069 | |||
| 1b6dd9241f | |||
| ecb4ee2e3e | |||
| 7a1ae8691e | |||
| 92972ac776 | |||
| 0c469cc712 | |||
| 3e4a14b299 | |||
| dff10e89fe | |||
| 693adf8488 | |||
| adacfb1110 | |||
| 177cc3d7f9 | |||
| 0c582df962 | |||
| 1e1fd97b38 | |||
| 1e2f02613f | |||
| 5a6a726014 | |||
| eace0af7a5 | |||
| 036d0556a4 | |||
| e9fda40b2b | |||
| b9b2b559a1 | |||
| 5fb3ea465f | |||
| ba04b753de | |||
| 92ca447f33 | |||
| 755a1331da | |||
| 6db541c89b | |||
| 67c52c3764 | |||
| 131caa20eb | |||
| 89a6ed2a5b | |||
| b597cd891b | |||
| fa31a6e441 | |||
| a3688fe642 | |||
| 96e786d480 | |||
| 3c09482a93 | |||
| a648da021f | |||
| d1d69bfaf4 | |||
| 221e03488e | |||
| 2ffb7cab2e | |||
| acffabf9de | |||
| 0a464f9d28 | |||
| 7add754fc3 | |||
| 10ff950bb8 | |||
| 6b9a4a8d6f | |||
| 079ee658a5 | |||
| bd838a71d1 | |||
| 5999af6c78 | |||
| af2eac52a8 | |||
| e4e040f14b | |||
| 10789503c1 | |||
| fd15cdbf40 | |||
| 9852376b38 | |||
| d327ec6ba4 | |||
| 9e6d6b2532 | |||
| 9edbff0ec0 | |||
| b82a3f3300 | |||
| d9fa6619e7 | |||
| f7d3c4b4ff | |||
| 4ff92d739d | |||
| befd0f6ecd | |||
| b584185f0f | |||
| 10b0924cfb | |||
| 6736063f83 | |||
| 93274a6d7b | |||
| 16b763e086 | |||
| 6974d4068b | |||
| 0b65bb7e9a | |||
| 1eb9ac8217 | |||
| 7810dd1942 | |||
| eeb0456356 | |||
| c032cfd99e | |||
| 4545249fa3 | |||
| 380f719fd8 | |||
| fdf51a8855 | |||
| 2d326f47ec | |||
| 9c38cc42f6 | |||
| c27c89a680 | |||
| 4e860b024b | |||
| 0c896d9e59 | |||
| 4f8bc641bd | |||
| e0a6119bb7 | |||
| 7dc12dea1e | |||
| ab0a3690f3 | |||
| 20c5578470 | |||
| bf921a41f9 | |||
| ab56ab9b27 | |||
| d3bc92c3f8 | |||
| 2459eabb05 | |||
| f25809befb | |||
| 443182c879 | |||
| 452bd04272 | |||
| da9c961fca | |||
| feaf21373a | |||
| 752b267399 | |||
| 7966c925ea | |||
| 832692c8af | |||
| 14db7a09e3 | |||
| 723a7c563f | |||
| 21d6874e54 | |||
| 354593a70d | |||
| 38bf310eac | |||
| 1146e61821 | |||
| 8ee7504c45 | |||
| e824b55c20 | |||
| 6d09cb6b6d | |||
| 2d2b9a2ac9 | |||
| 69661879eb | |||
| 42e57547f7 | |||
| b88e24678b | |||
| de69d0031e | |||
| 8998a79ff9 | |||
| e116f17c43 | |||
| efa1781eb6 | |||
| 03e86ed147 | |||
| c754c860fd | |||
| 391d00bcb9 | |||
| d7297b567d | |||
| e9cebedb4a | |||
| 2edbf64e69 | |||
| 1efcac0946 | |||
| 415550f16d | |||
| aa554a9e77 | |||
| 2876c7ff97 | |||
| 651f56370a | |||
| 950adeebbf | |||
| 4e33a52290 | |||
| f2cc7c2873 | |||
| 9c01ca1080 | |||
| 09103dc981 | |||
| f096910abc | |||
| 242165485d | |||
| e6904ca884 | |||
| 5a792cc821 | |||
| 0633eaf68c | |||
| 40afa3695a | |||
| 14889e7d85 | |||
| 3bb103c6b6 | |||
| 5e680551b9 | |||
| cefdd86b7f | |||
| b8e26a2112 | |||
| 58a149990d | |||
| c23b2479f7 | |||
| a97b761eda | |||
| 1adf8ff6b6 | |||
| b5a5363a6a | |||
| f91bdc2785 | |||
| db34f2f7fd | |||
| 5de8ea162d | |||
| 6e2763b72c | |||
| 966d99217a | |||
| 5d140145c1 | |||
| fcf3b0b672 | |||
| e8bbad6772 | |||
| 5f2b75997f | |||
| 426ce77f1c | |||
| 83c7434eb5 | |||
| 99854e90be | |||
| 424b11cf50 | |||
| da87b1256c | |||
| a3971543b5 | |||
| a384798779 | |||
| d31eddf32f | |||
| 1068c4ad23 | |||
| cbc979263e | |||
| 765181bbc0 | |||
| d82dec9773 | |||
| 024177515d | |||
| fb3b36a569 | |||
| 614743c8f4 | |||
| 47f5e4134e | |||
| efa7b3ba54 | |||
| 1e9d67ec39 | |||
| 80d0ddca9a | |||
| 976d347623 | |||
| df0a059a02 | |||
| cc697486fc | |||
| 2227a6f5f3 | |||
| a9320f06e8 | |||
| 39b7ab66d4 | |||
| bc9ee1d611 | |||
| 56ce747ffc | |||
| a2f3b2199a | |||
| 88b8d34aa6 | |||
| 21fd08e0fb | |||
| 37a4f4a39f | |||
| 9d2c30298e | |||
| 6f5d60fb62 | |||
| 41ffa0c015 | |||
| b3e51cc849 | |||
| e01e4e6530 | |||
| 6ed072f67b | |||
| 8bc64be77b | |||
| 83e2cabbcc | |||
| 7de7619fd1 | |||
| afae5fd972 | |||
| 70cd313082 | |||
| e799f35dd2 | |||
| 1db255fd3e | |||
| 909e4820d6 | |||
| 4727671c79 | |||
| f2f255e6e6 | |||
| b5d75e2016 | |||
| d3c35ec9c5 | |||
| d476656789 | |||
| 8d0ff974e1 | |||
| 33ded2a174 | |||
| 277af33ab0 | |||
| 2e4c005ad9 | |||
| 739bed737e | |||
| a1a7e6ac06 | |||
| c3348bd068 | |||
| cc61729f01 | |||
| b457bfbd4e | |||
| 1877834fd1 | |||
| afdfd1863f | |||
| f6aba0f9ec | |||
| 66640ebfeb | |||
| 9057e4b7d0 | |||
| 0deb8f4090 | |||
| 1633af7af6 | |||
| 99da181cfc | |||
| 8a9b0347bb | |||
| fe4b307fe6 | |||
| 948ff5530c | |||
| 2ff1a81f19 | |||
| d90527a095 | |||
| f0874ff3fd | |||
| c8538cc62f | |||
| bbe820d797 | |||
| b5751a3fa8 | |||
| 02bc84062e | |||
| dd8a4c0c56 | |||
| 4274fceafe | |||
| da06440fdc | |||
| c1c1d7fabb | |||
| 8b39a1da00 | |||
| 86e50f97ba | |||
| 0d7ccc2b26 | |||
| 5aa06ed3be | |||
| d696ce4e41 | |||
| 2782dae518 | |||
| 0f9c2f0a38 | |||
| 296a5e786e | |||
| db0a55cd65 | |||
| 32e79ce7b3 | |||
| a898610f13 | |||
| dc7df5bcfa | |||
| dcefd53bfe | |||
| cfa04fadd1 | |||
| 4a6c337960 | |||
| 3cf85bb837 | |||
| dc2c92e721 | |||
| b7f1a1ad4b | |||
| 1967c1e237 | |||
| 6e638cd673 | |||
| 6fcc1d7685 | |||
| 30ba3aeea7 | |||
| 6172d80776 | |||
| 811494e9ed | |||
| 137b2ffdd0 | |||
| 05e69da5d8 | |||
| b0f10b1851 | |||
| b1212fc98b | |||
| ea99567805 | |||
| 443c842723 | |||
| 9614da6238 | |||
| 0164171cad | |||
| 8e78160bb9 | |||
| 7d118b5d42 | |||
| 676ad2d34f | |||
| b3a82b1b20 | |||
| 25848b78f9 | |||
| f94176a910 | |||
| ae96508e15 | |||
| 95ebf815eb | |||
| b713fb5650 | |||
| 6159c83fd2 | |||
| f1af17bf4d | |||
| a87c1c1210 | |||
| e63d165b65 | |||
| 9411770253 | |||
| dc80ac1c88 | |||
| bb055628cc | |||
| 390bcdb8c6 | |||
| d95bcb46ad | |||
| 7b954e21e7 | |||
| a6eea4d096 | |||
| 2c189d5c78 | |||
| 85a80fd032 | |||
| 0309b47515 | |||
| 95d8f60389 | |||
| 1ec7122381 | |||
| 061b229e12 | |||
| 3617433858 | |||
| d6d525cc1b | |||
| e752290458 | |||
| d77e25425e | |||
| 028c0249a3 | |||
| a3ca5307a5 | |||
| 6796462b13 | |||
| d08475d5af | |||
| d310c77fc8 | |||
| 75d8ca1306 | |||
| 894eea739e | |||
| 1156290377 | |||
| c271f0c224 | |||
| a7f14dc103 | |||
| f05d5bdb9e | |||
| e99c400f59 | |||
| e38166837d | |||
| d43a08eb71 | |||
| 293e713af6 | |||
| 03866b4c31 | |||
| 4f2c08525f | |||
| 2c12f53937 | |||
| c88e5f9be2 | |||
| 0f51a9794e | |||
| edd1f49e57 | |||
| 4df0cf2d07 | |||
| 87ba99755b | |||
| c03f860f8e | |||
| f2e0e3f345 | |||
| fee652dfd7 | |||
| 839446a88d | |||
| 028b8c8bcc | |||
| 64b1d4ca3b | |||
| c6cbee6563 | |||
| a406f6e7cc | |||
| 9869b92c2b | |||
| 00549eed79 | |||
| 0c4968dc30 | |||
| 704335c898 | |||
| ec74feea5a | |||
| 2f5cc3059a | |||
| 4355485581 | |||
| 342c3254cb | |||
| 5fc82dfaa2 | |||
| 6ab6507db9 | |||
| 3c807ae86e | |||
| 9bfacaa39a | |||
| a2882a4908 | |||
| 1adc64a352 | |||
| c28863966b | |||
| 14dc679332 | |||
| 17085dd8a0 | |||
| 82b8313da0 | |||
| 4f7e764fa0 | |||
| d52da8bbea | |||
| cdddcad784 | |||
| 38767cad0f | |||
| c3d7dda61f | |||
| c4e32ce159 | |||
| 6355a07dc4 | |||
| 0e3fb41e73 | |||
| fdac5af5ee | |||
| 0e509ceafa | |||
| 6b84534632 | |||
| fc255b558d | |||
| 9e54e30011 | |||
| 77312ce2e0 | |||
| 9a6d29d6e7 | |||
| 2cb7517f64 | |||
| 3228882fc0 | |||
| 6804e3dc73 | |||
| f9af61a5ca | |||
| a94b443f13 | |||
| fd06aa2135 | |||
| dd0f40559d | |||
| 471a60dcb0 | |||
| 46994c3355 | |||
| 642811869c | |||
| 3be4697487 | |||
| a3aca4acb5 | |||
| 7587f858ae | |||
| 854c214bc0 | |||
| 5dfce4db34 | |||
| 95467fa3c1 | |||
| 4ec3453558 | |||
| 536fda04f2 | |||
| 2094204877 | |||
| ab375cca1a | |||
| 479f706f8a | |||
| 4342285507 | |||
| 8bb656cb17 | |||
| a117e897ca | |||
| 347ac70063 | |||
| 50842ef815 | |||
| 1970a64f6f | |||
| dd71a53f5e | |||
| 3f1f835df3 | |||
| 8440d9890c | |||
| 87ca031335 | |||
| 96b9e37461 | |||
| 0d3a2fe844 | |||
| 848781aef5 | |||
| 28bf497a0b | |||
| 8ede738396 | |||
| 40c2b6a563 | |||
| 3581cf7305 | |||
| c33775b944 | |||
| b0cd2522e0 | |||
| c3979f6e31 | |||
| 103df4d9f3 | |||
| 040e02cfc5 | |||
| f377b64065 | |||
| e5459b68ff | |||
| fc194021a4 | |||
| 39f8ca3bf1 | |||
| 7a807f7216 | |||
| bedfb51b1c | |||
| b2afb95c19 | |||
| 10239161fd | |||
| 242f10952d | |||
| e997bd371b | |||
| 400167f4ef | |||
| 572f6d833d | |||
| 2e06be5155 | |||
| 62121470a8 | |||
| e3ccc3ee6b | |||
| ece94f6bdc | |||
| 03fc0703c0 | |||
| 0d13b25f56 | |||
| 75c2067836 | |||
| 824da6a07b | |||
| 2c2ea24dc4 | |||
| 47b73a5b64 | |||
| 6b3f8e548d | |||
| 0ea483f901 | |||
| 97aed8ef23 | |||
| 0ee3fe9157 | |||
| 434770155f | |||
| 7e8bf94543 | |||
| 8d8944705c | |||
| 7c9c1a5169 | |||
| 1a6c16d8ea | |||
| ccf792f9d3 | |||
| 789bc8563c | |||
| 99a50f70dd | |||
| 9bef411056 | |||
| e79e92c60f | |||
| 858ad43d3b | |||
| 5761765ea7 | |||
| 6abc733763 | |||
| 4271e24e59 | |||
| 9e4ed2214b | |||
| 011332e509 | |||
| 5403ef4d84 | |||
| 31739aca02 | |||
| 8f2e7b6f65 | |||
| 4ed647c43d | |||
| f88ff4fb5c | |||
| cc4881d633 | |||
| d856b35afc | |||
| b6d025da09 | |||
| cc79ff1ca3 | |||
| 131aa2b6be | |||
| 02a6b73122 | |||
| d87366c095 | |||
| 4f7a3afbfc | |||
| 6725954b70 | |||
| 4fe535e5e8 | |||
| aed94bfc4c | |||
| de996c0a81 | |||
| 1a39aa4da5 | |||
| 1f4ba73da7 | |||
| 836b174d33 | |||
| 853a65aef1 | |||
| 566039b93f | |||
| 18a7ff8726 | |||
| 6ffdf167fe | |||
| 6b702b13e4 | |||
| f476bd985b | |||
| 92c4f0598b | |||
| a337402124 | |||
| 209e6332b3 | |||
| 645bd8a109 | |||
| 9a471d80f7 | |||
| de0c59efe7 | |||
| c19d26f4f3 | |||
| 2edfc75c8a | |||
| 4c977d2c1f | |||
| 1425f2ec78 | |||
| b081eda76f | |||
| 7f6837c751 | |||
| a467936e73 | |||
| 2677ddccaa | |||
| 564ace3ddf | |||
| a81ef7497c | |||
| caa7b07398 | |||
| 6976a7241e | |||
| 172eda3ce5 | |||
| 552340add7 | |||
| bd92dde117 | |||
| 617c54ab81 | |||
| c76f7804ab | |||
| 0799aa2c72 | |||
| b80dca74ef | |||
| f5f00e0f6c | |||
| 75d2d82d05 | |||
| 5172242f88 | |||
| 25e68cf826 | |||
| e527685ebf | |||
| e745cb5e4b | |||
| dfaa4969da | |||
| f980a2f27a | |||
| 6b7c97c02a | |||
| fdd9f37abd | |||
| a09bba454c | |||
| 4be9aa091b | |||
| 33b810de74 | |||
| 44ccb1eec1 | |||
| bef38c670c | |||
| 025d7bf192 | |||
| 5ad2d62039 | |||
| a128833e68 | |||
| 87f7b0849a | |||
| 4596a8ee01 | |||
| f9b1b12b10 | |||
| 68b1655e7f | |||
| 658b64df74 | |||
| e344503834 | |||
| bf2760ffef | |||
| db2ed2d881 | |||
| fb0fa742f5 | |||
| 3b55cdc0be | |||
| 0efcc99f3e | |||
| 7a85164a1e | |||
| ba2cda8955 | |||
| 9048be4c8e | |||
| 83716ae1bc | |||
| 5cd4d2d158 | |||
| 13bb6d469b | |||
| 8e4c4c34e4 | |||
| 3125d04f32 | |||
| c436c57cc9 | |||
| 7f9f825589 | |||
| da9aed5c11 | |||
| 10ef3509dd | |||
| 3dc538f9e6 | |||
| 1e29ff322d | |||
| 9c30d58b10 | |||
| 013a0f8324 | |||
| 07b58f46f9 | |||
| 566e118a19 | |||
| 0e18c88534 | |||
| 068d06b9ee | |||
| 0cf7606ec9 | |||
| 25338ce02f | |||
| 4805d86a7c | |||
| 33b1410d82 | |||
| f35ebec7c6 | |||
| 3aa6ee0320 | |||
| cdb0aa00d8 | |||
| 9de7b8d3a7 | |||
| 4a28a46612 | |||
| 16561d15ff | |||
| 9642ad2820 | |||
| e2169a26c2 | |||
| f697922f32 | |||
| 1390d01763 | |||
| 86f780871c | |||
| c1b22125fd | |||
| 30f069a5db | |||
| 2bf6cd9241 | |||
| 87d2a954a3 | |||
| a388c5a642 | |||
| 4b34f017ca | |||
| 5c1d1dd5a1 | |||
| 1580d27c23 | |||
| 4b9187928c | |||
| 5b7236f6ad | |||
| 6fb439b580 | |||
| a8334b5c27 | |||
| e1cac93945 | |||
| 081f9f5bce | |||
| 25ccc5660d | |||
| b6d3e578f2 | |||
| 52377c2dcf | |||
| 5c78f707fe | |||
| bd5ed1b684 | |||
| e89339b813 | |||
| 0b69feda40 | |||
| 339f7f776f | |||
| 7e6ccbad21 | |||
| aac53e5cdc | |||
| cbec75a175 | |||
| bf04d9eb39 | |||
| 3058c894b1 | |||
| e57e279fe1 | |||
| f43c58fc6d | |||
| dea304ac39 | |||
| b46e834220 | |||
| 46f4905259 | |||
| 28c7736ecd | |||
| f881981c44 | |||
| 953d18e795 | |||
| b45024a97e | |||
| 3dcdfa0166 | |||
| 2079583866 | |||
| b68358766b | |||
| cf2b9eddfa | |||
| 8c184dc4d4 | |||
| e8d1f89a47 | |||
| 0e85b0fd8f | |||
| f7dc916e80 | |||
| 03e7a254a2 | |||
| 0ac9fe5a54 | |||
| dc61fd925f | |||
| 2aea08726f | |||
| 746bec908b | |||
| 8102e3b3f5 | |||
| 1ba998aa68 | |||
| 2de34f70ce | |||
| 8b9fd67d6f | |||
| 97238a1621 | |||
| ef4136d327 | |||
| 6dbca8d478 | |||
| a305db9e6f | |||
| 59c1ea3097 | |||
| 03457f5d32 | |||
| 2336a6159c | |||
| e4c4b53fcd | |||
| 83cbf51704 | |||
| 2ebb755f00 | |||
| ec1c3a86f5 | |||
| 969f770df0 | |||
| 9c3f848fa8 | |||
| 1ea6425cd1 | |||
| 052db5d748 | |||
| a35460cb84 | |||
| ae93bbe2a7 | |||
| 3b97c7729b | |||
| 6021124688 | |||
| 1d34976dd0 | |||
| 02bde51caf | |||
| bef1e2e3db | |||
| be3e3e5d7e | |||
| c028c7db4e | |||
| c129023821 | |||
| cbdb8fa51f | |||
| c6ecfb679a | |||
| 5d03e9bda8 | |||
| d8b26c6da8 | |||
| 2e61cf3183 | |||
| 45e2335b86 | |||
| 2bbc44c5ab | |||
| 012428416d | |||
| 7134f93eb8 | |||
| 1887b5a860 | |||
| ef17668871 | |||
| e9909b179a | |||
| 09f8bdef6d | |||
| 2a9b09f359 | |||
| 1f6a3ccac7 | |||
| 1f40fc1de9 | |||
| 20b94ef0bb | |||
| 72c334e5e0 | |||
| e7f35822af | |||
| bd2152d568 | |||
| b1d7ef03e2 | |||
| aa74417d11 | |||
| 229b009b7f | |||
| bece6253d5 | |||
| ae7e582ec8 | |||
| d69470e207 | |||
| c60e852226 | |||
| a205478a29 | |||
| 22d30522e1 | |||
| 19b1fad274 | |||
| 9a6dfacf9b | |||
| 7f236c5b18 | |||
| 25985c732d | |||
| 9ce50b7e3d | |||
| f5e93a8179 | |||
| 2b5cef156c | |||
| f3032f74a4 | |||
| 58ec7553ea | |||
| 357f7d1c31 | |||
| e6d30d72fa | |||
| 355038a91a | |||
| 97d9b80baa | |||
| b6814fad57 | |||
| 7586c65103 | |||
| 633170d743 | |||
| c5be7827c3 | |||
| e84c705e31 | |||
| 36162509e0 | |||
| 76bf1c0379 | |||
| 32b847c26e | |||
| a45d6fdf57 | |||
| c071e64a7e | |||
| 663f12851e | |||
| c4ef523564 | |||
| 992f792c0a | |||
| 97611fa057 | |||
| 32240777c3 | |||
| 6065ff8caa | |||
| 8db073941d | |||
| 5e281b44e9 | |||
| 142ede350e | |||
| a2e1d4caa2 | |||
| 5f00d8b9c6 | |||
| 2e85e18020 | |||
| 40a8115101 | |||
| d02b97e1c1 | |||
| 485b152beb | |||
| c918f5b001 | |||
| cca2f7d178 | |||
| baf533de35 | |||
| dfc0d6eee7 | |||
| 7948cb8110 | |||
| 568436f188 | |||
| 04b59318f9 | |||
| 1a3d05ffc3 | |||
| 2f2db74d73 | |||
| ef097d15dd | |||
| caaa474c23 | |||
| 63bebd92e0 | |||
| ad36b8b10f | |||
| 18c22d2a6c | |||
| 73024edba9 | |||
| a360c0a3d7 | |||
| 34657f820f | |||
| 8840911f22 | |||
| 4aa66f4156 | |||
| 799a1c99f2 | |||
| c4247bfea3 | |||
| 1e3464fe47 | |||
| b7603fd150 | |||
| 517a3363d6 | |||
| 3511b69fc8 | |||
| e6efc61b3b | |||
| 360c1d9a15 | |||
| e3449f9c8f | |||
| a8e723d722 | |||
| d116234523 | |||
| dce2bc7508 | |||
| 2bf764f560 | |||
| 587b77e70b | |||
| 53cd9fd8bf | |||
| a8220172f8 | |||
| 397f8c70b4 | |||
| 68ff5377b0 | |||
| b359dc3cb6 | |||
| 5b036067ed | |||
| b9f38162d5 | |||
| ab6909bfbd | |||
| 53c3c916a6 | |||
| 6924aa5eb1 | |||
| a3b45d62b6 | |||
| b34de624ce | |||
| 7886c42742 | |||
| d476b15312 | |||
| bdf38e7668 | |||
| e33566a04a | |||
| c28251b8b4 | |||
| 337db1c508 | |||
| ad2a1ba901 | |||
| fa6f6f8e9f | |||
| a44043a4e5 | |||
| 87b15c60c0 | |||
| 2c83e52c15 | |||
| 55c5027539 | |||
| ce06af0c9b | |||
| baaf7ad153 | |||
| 4a25e7dc22 | |||
| f90563d18c | |||
| 8352ecd3b9 | |||
| 69b34a4364 | |||
| 6023c3c624 | |||
| 171e7ffa77 | |||
| d9f918005a | |||
| e8ade4866b | |||
| bbfa789a4e | |||
| a779c3803c | |||
| 79dea504b0 | |||
| 4900fecd10 | |||
| adfaab7eb2 | |||
| c5adbea6e1 | |||
| bb89fa4aab | |||
| 43d639104d | |||
| a1792a7d94 | |||
| 373b6918f8 | |||
| f1396761b0 | |||
| 335bb0707c | |||
| 7a51e0dd4d | |||
| 5b42899dde | |||
| 229357df2b | |||
| 8d5626620b | |||
| 2c4243b3d0 | |||
| 38e0178c81 | |||
| c5c7a134dd | |||
| da9eb61532 | |||
| c1ccf026f0 | |||
| 4309104925 | |||
| a3b84b3ca7 | |||
| f6630163b1 | |||
| aebeb37fb0 | |||
| b74ad69288 | |||
| b6579cd38e | |||
| 46a2032b9a | |||
| 0eb548f115 | |||
| c7dff229db | |||
| 8e80825b4f | |||
| a1481c1113 | |||
| 3bdcdef198 | |||
| b69f6e0df7 | |||
| be2794a372 | |||
| 2ff25b49f4 | |||
| 135d72d4cd | |||
| 90ef64efa3 | |||
| 60df387459 | |||
| fc1acf6f01 | |||
| cfc5229964 | |||
| f9ddeac265 | |||
| 8d7c576037 | |||
| fccdbdd66a | |||
| 23ba651705 | |||
| ac0ad98b55 | |||
| 9cbd5d1b0c | |||
| 80fd664cc8 | |||
| 041c711cb9 | |||
| dd9c5244fd | |||
| fe693db84f | |||
| 5c9d3cd08b | |||
| 725ab5622f | |||
| e9acd21733 | |||
| ce1ab1ed50 | |||
| 3e918ffd18 | |||
| 678ce23c16 | |||
| 31c18ff34c | |||
| e407a4fa13 | |||
| be72df70fe | |||
| dbd79f4797 | |||
| f790315d3f | |||
| f1ab700334 | |||
| afc29a67d2 | |||
| ba816babee | |||
| 6e0ac79eae | |||
| 94514cfeea | |||
| 8c7080eaef | |||
| 348d395b21 | |||
| 2e7e97ea13 | |||
| d71e7ebff1 | |||
| 9755936950 | |||
| 347052f82f | |||
| e196ff1e2f | |||
| 46e344bb92 | |||
| 7f038cae90 | |||
| 489a34b10c | |||
| 46b2b6b558 | |||
| bb7566426c | |||
| 7df552e767 | |||
| 274fba1bd2 | |||
| db366aac08 | |||
| 1359418745 | |||
| 8da3f231e0 | |||
| b3cfe6d9e9 | |||
| 424845d924 | |||
| 4630ca5321 | |||
| e13d4a6b9c | |||
| c624580596 | |||
| e085a10cf3 | |||
| 21d1920d68 | |||
| 94cc1d7dbd | |||
| 026f3c24e9 | |||
| 251c92ff1e | |||
| 135e1a7a7b | |||
| 9008093cce | |||
| 5990a28870 | |||
| bd34be92e6 | |||
| e608c61ba5 | |||
| d2edc0bffe | |||
| bfde308492 | |||
| f181dba964 | |||
| c894e36855 | |||
| 01e906e99c | |||
| 352800223e | |||
| 619735fea0 | |||
| 75b1ed08b4 | |||
| c234c95880 | |||
| 7cc7fc0a0c | |||
| 897d49f734 | |||
| 051c958c8b | |||
| 56627caf5b | |||
| 4f47c8c06b | |||
| de1dbcea9c | |||
| d1498506a8 | |||
| 9bcbdd31ce | |||
| 38c968d47e | |||
| f578ca6d47 | |||
| b04e69fd66 | |||
| 0a1e28a08f | |||
| 9fdaa82d77 | |||
| 88123b1cd2 | |||
| 42c4c9dba1 | |||
| e63dc49475 | |||
| 690f30f3dd | |||
| 561b030e80 | |||
| 4756c075b6 | |||
| 328f382f86 | |||
| 6ad77e9434 | |||
| 919928ab70 | |||
| 2a4d4ea999 | |||
| 547ce49500 | |||
| f4970ed053 | |||
| 9cf083decf | |||
| d078367c04 | |||
| a8edc85183 | |||
| 5d48de7fa9 | |||
| 82beb040bc | |||
| 03864e52ff | |||
| c24fb403c5 | |||
| 1d3ee2008c | |||
| c917875943 | |||
| e2904a02a5 | |||
| 292eb645b0 | |||
| 07fdf51069 | |||
| 97dc7660b4 | |||
| b6a7d40863 | |||
| 55cba8aa5f | |||
| 6141888d3e | |||
| 09964e4b16 | |||
| 20cab5a949 | |||
| da4fd201ad | |||
| 13525d2330 | |||
| 0d8fddf537 | |||
| 56c92cd83b | |||
| bafc32f30a | |||
| 76a300481f | |||
| 613b4449a7 | |||
| 85b83f9666 | |||
| 568cc243f0 | |||
| af2efbdbbd |
@@ -0,0 +1,19 @@
|
||||
# Editor configuration, see https://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{ts,js}]
|
||||
quote_type = single
|
||||
|
||||
[*.{md,mdx}]
|
||||
max_line_length = off
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
quote_type = double
|
||||
@@ -0,0 +1,13 @@
|
||||
mobile/openapi/**/*.md -diff -merge
|
||||
mobile/openapi/**/*.md linguist-generated=true
|
||||
mobile/openapi/**/*.dart -diff -merge
|
||||
mobile/openapi/**/*.dart linguist-generated=true
|
||||
|
||||
web/src/api/open-api/**/*.md -diff -merge
|
||||
web/src/api/open-api/**/*.md linguist-generated=true
|
||||
|
||||
web/src/api/open-api/**/*.ts -diff -merge
|
||||
web/src/api/open-api/**/*.ts linguist-generated=true
|
||||
|
||||
mobile/openapi/.openapi-generator/FILES -diff -merge
|
||||
mobile/openapi/.openapi-generator/FILES linguist-generated=true
|
||||
@@ -0,0 +1,24 @@
|
||||
title: "[Feature] <feature-name-goes-here>"
|
||||
labels: ["feature"]
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please use this form to request new feature for Immich
|
||||
- type: textarea
|
||||
id: feature
|
||||
attributes:
|
||||
label: The feature
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Platform
|
||||
options:
|
||||
- label: Server
|
||||
- label: Web
|
||||
- label: Mobile
|
||||
@@ -0,0 +1,5 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: alextran1502
|
||||
liberapay: alex.tran1502
|
||||
custom: https://www.buymeacoffee.com/altran1502
|
||||
@@ -0,0 +1,100 @@
|
||||
name: Report an issue with Immich
|
||||
description: Report an issue with Immich
|
||||
labels: ["bug", "need triage"]
|
||||
title: "[BUG] <title>"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
This issue form is for reporting bugs only!
|
||||
|
||||
If you have a feature or enhancement request, please use the [feature request][fr] section of our [GitHub Discussions][fr].
|
||||
|
||||
[fr]: https://github.com/immich-app/immich/discussions/new?category=feature-request
|
||||
|
||||
- type: textarea
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: The bug
|
||||
description: >-
|
||||
Describe the issue you are experiencing here, to communicate to the
|
||||
maintainers. Tell us what you were trying to do and what happened.
|
||||
|
||||
Provide a clear and concise description of what the problem is.
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Environment
|
||||
|
||||
- type: input
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: The OS that Immich Server is running on
|
||||
placeholder: Ubuntu 22.10, Debian, Arch...etc
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Version of Immich Server
|
||||
placeholder: v1.0.0
|
||||
|
||||
- type: input
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Version of Immich Mobile App
|
||||
placeholder: v1.0.0
|
||||
|
||||
- type: checkboxes
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Platform with the issue
|
||||
options:
|
||||
- label: Server
|
||||
- label: Web
|
||||
- label: Mobile
|
||||
|
||||
- type: textarea
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Your docker-compose.yml content
|
||||
render: YAML
|
||||
|
||||
- type: textarea
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Your .env content
|
||||
description: Please provide the redacted .env content of your setup
|
||||
render: Shell
|
||||
|
||||
- type: textarea
|
||||
id: repro
|
||||
attributes:
|
||||
label: Reproduction steps
|
||||
description: "How do you trigger this bug? Please walk us through it step by step."
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
...
|
||||
render: bash
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: >
|
||||
If you have any additional information for us, use the field below.
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: Thank you for submitting the form
|
||||
@@ -0,0 +1,11 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: I have a question or need support
|
||||
url: https://discord.gg/D8JsnBEuKb
|
||||
about: We use GitHub for tracking bugs, please check out our Discord channel for freaky fast support.
|
||||
- name: Feature Request
|
||||
url: https://github.com/immich-app/immich/discussions/new?category=feature-request
|
||||
about: Please use our GitHub Discussion for making feature requests.
|
||||
- name: I'm unsure where to go
|
||||
url: https://discord.gg/D8JsnBEuKb
|
||||
about: If you are unsure where to go, then joining our Discord is recommended; Just ask!
|
||||
@@ -0,0 +1,7 @@
|
||||
version: 2
|
||||
updates:
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
@@ -0,0 +1,67 @@
|
||||
name: Build Mobile
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
inputs:
|
||||
ref:
|
||||
required: false
|
||||
type: string
|
||||
pull_request:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build-sign-android:
|
||||
name: Build and sign Android
|
||||
runs-on: macos-12
|
||||
|
||||
steps:
|
||||
- name: Determine ref
|
||||
id: get-ref
|
||||
run: |
|
||||
input_ref="${{ inputs.ref }}"
|
||||
github_ref="${{ github.sha }}"
|
||||
ref="${input_ref:-$github_ref}"
|
||||
echo "ref=$ref" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ steps.get-ref.outputs.ref }}
|
||||
|
||||
- uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: "zulu"
|
||||
java-version: "12.x"
|
||||
cache: "gradle"
|
||||
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: "3.7.3"
|
||||
cache: true
|
||||
|
||||
- name: Create the Keystore
|
||||
env:
|
||||
KEY_JKS: ${{ secrets.KEY_JKS }}
|
||||
working-directory: ./mobile
|
||||
run: echo $KEY_JKS | base64 -d > android/key.jks
|
||||
|
||||
- name: Get Packages
|
||||
working-directory: ./mobile
|
||||
run: flutter pub get
|
||||
|
||||
- name: Build Android App Bundle
|
||||
working-directory: ./mobile
|
||||
env:
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
|
||||
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
|
||||
run: flutter build apk --release
|
||||
|
||||
- name: Publish Android Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: release-apk-signed
|
||||
path: mobile/build/app/outputs/flutter-apk/app-release.apk
|
||||
@@ -0,0 +1,33 @@
|
||||
name: Clean up actions cache on PR close
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
jobs:
|
||||
cleanup:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Cleanup
|
||||
run: |
|
||||
gh extension install actions/gh-actions-cache
|
||||
|
||||
REPO=${{ github.repository }}
|
||||
BRANCH=${{ github.ref }}
|
||||
|
||||
echo "Fetching list of cache keys"
|
||||
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
|
||||
|
||||
## Setting this to not fail the workflow while deleting cache keys.
|
||||
set +e
|
||||
echo "Deleting caches..."
|
||||
for cacheKey in $cacheKeysForPR
|
||||
do
|
||||
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
|
||||
done
|
||||
echo "Done"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,74 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "main" ]
|
||||
schedule:
|
||||
- cron: '20 13 * * 1'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript', 'python' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
@@ -0,0 +1,22 @@
|
||||
name: Update Immich SDK
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ["main"]
|
||||
|
||||
jobs:
|
||||
update-sdk-repos:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
with:
|
||||
github-token: ${{ secrets.GH_TOKEN }}
|
||||
script: |
|
||||
await github.rest.actions.createWorkflowDispatch({
|
||||
owner: 'immich-app',
|
||||
repo: 'immich-sdk-typescript-axios',
|
||||
workflow_id: 'build.yml',
|
||||
ref: 'main'
|
||||
})
|
||||
@@ -0,0 +1,101 @@
|
||||
name: Build and Push Docker Images
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build_and_push:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
# Prevent a failure in one image from stopping the other builds
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- context: "server"
|
||||
image: "immich-server"
|
||||
- context: "web"
|
||||
image: "immich-web"
|
||||
- context: "machine-learning"
|
||||
image: "immich-machine-learning"
|
||||
- context: "nginx"
|
||||
image: "immich-proxy"
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2.1.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2.4.1
|
||||
# Workaround to fix error:
|
||||
# failed to push: failed to copy: io: read/write on closed pipe
|
||||
# See https://github.com/docker/build-push-action/issues/761
|
||||
with:
|
||||
driver-opts: |
|
||||
image=moby/buildkit:v0.10.6
|
||||
|
||||
- name: Login to Docker Hub
|
||||
# Only push to Docker Hub when making a release
|
||||
if: ${{ github.event_name == 'release' }}
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
# Skip when PR from a fork
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Generate docker image tags
|
||||
id: metadata
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
flavor: |
|
||||
# Disable latest tag
|
||||
latest=false
|
||||
images: |
|
||||
name=ghcr.io/${{ github.repository_owner }}/${{matrix.image}}
|
||||
name=altran1502/${{matrix.image}},enable=${{ github.event_name == 'release' }}
|
||||
tags: |
|
||||
# Tag with branch name
|
||||
type=ref,event=branch
|
||||
# Tag with pr-number
|
||||
type=ref,event=pr
|
||||
# Tag with git tag on release
|
||||
type=ref,event=tag
|
||||
type=raw,value=release,enable=${{ github.event_name == 'release' }}
|
||||
|
||||
- name: Determine build cache output
|
||||
id: cache-target
|
||||
run: |
|
||||
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
||||
# Essentially just ignore the cache output (PR can't write to registry cache)
|
||||
echo "cache-to=type=local,dest=/tmp/discard,ignore-error=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "cache-to=type=registry,mode=max,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{ matrix.image }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Build and push image
|
||||
uses: docker/build-push-action@v4.0.0
|
||||
with:
|
||||
context: ${{ matrix.context }}
|
||||
platforms: linux/arm/v7,linux/amd64,linux/arm64
|
||||
# Skip pushing when PR from a fork
|
||||
push: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{matrix.image}}
|
||||
cache-to: ${{ steps.cache-target.outputs.cache-to }}
|
||||
tags: ${{ steps.metadata.outputs.tags }}
|
||||
labels: ${{ steps.metadata.outputs.labels }}
|
||||
@@ -0,0 +1,19 @@
|
||||
name: github-repo-stats
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Run this once per day, towards the end of the day for keeping the most
|
||||
# recent data point most meaningful (hours are interpreted in UTC).
|
||||
- cron: "0 23 * * *"
|
||||
workflow_dispatch: # Allow for running this manually.
|
||||
|
||||
jobs:
|
||||
j1:
|
||||
name: github-repo-stats
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: run-ghrs
|
||||
# Use latest release.
|
||||
uses: jgehrcke/github-repo-stats@RELEASE
|
||||
with:
|
||||
ghtoken: ${{ secrets.GHRS_GITHUB_API_TOKEN }}
|
||||
@@ -0,0 +1,78 @@
|
||||
name: Prepare new release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
serverBump:
|
||||
description: "Bump server version"
|
||||
required: true
|
||||
default: "false"
|
||||
type: choice
|
||||
options:
|
||||
- "false"
|
||||
- minor
|
||||
- patch
|
||||
mobileBump:
|
||||
description: "Bump mobile build number"
|
||||
required: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
bump_version:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
token: ${{ secrets.ORG_RELEASE_TOKEN }}
|
||||
|
||||
- name: Bump version
|
||||
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
|
||||
|
||||
- name: Commit and tag
|
||||
id: push-tag
|
||||
uses: EndBug/add-and-commit@v9
|
||||
with:
|
||||
author_name: Immich Release Bot
|
||||
author_email: bot@immich.app
|
||||
message: "Version ${{ env.IMMICH_VERSION }}"
|
||||
tag: ${{ env.IMMICH_VERSION }}
|
||||
push: true
|
||||
|
||||
build_mobile:
|
||||
uses: ./.github/workflows/build-mobile.yml
|
||||
needs: bump_version
|
||||
secrets: inherit
|
||||
with:
|
||||
ref: ${{ needs.bump_version.outputs.ref }}
|
||||
|
||||
prepare_release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build_mobile
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
token: ${{ secrets.ORG_RELEASE_TOKEN }}
|
||||
|
||||
- name: Download APK
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: release-apk-signed
|
||||
|
||||
- name: Create draft release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
draft: true
|
||||
tag_name: ${{ env.IMMICH_VERSION }}
|
||||
generate_release_notes: true
|
||||
body_path: misc/release/notes.tmpl
|
||||
files: |
|
||||
docker/docker-compose.yml
|
||||
docker/example.env
|
||||
*.apk
|
||||
@@ -0,0 +1,31 @@
|
||||
name: Static Code Analysis
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
mobile-dart-analyze:
|
||||
name: Run Dart Code Analysis
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
flutter-version: '3.7.3'
|
||||
|
||||
- name: Install dependencies
|
||||
run: dart pub get
|
||||
working-directory: ./mobile
|
||||
|
||||
- name: Run dart analyze
|
||||
run: dart analyze --fatal-infos
|
||||
working-directory: ./mobile
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
name: Test
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
e2e-tests:
|
||||
name: Run end-to-end test suites
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Run Immich Server E2E Test
|
||||
run: docker-compose -f ./docker/docker-compose.test.yml --env-file ./docker/.env.test up --abort-on-container-exit --exit-code-from immich-server-test
|
||||
|
||||
server-unit-tests:
|
||||
name: Run server unit test suites and checks
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Run tests
|
||||
run: cd server && npm ci && npm run check:all
|
||||
|
||||
web-unit-tests:
|
||||
name: Run web unit test suites and checks
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Run tests
|
||||
run: cd web && npm ci && npm run check:all
|
||||
|
||||
mobile-unit-tests:
|
||||
name: Run mobile unit tests
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
flutter-version: '3.7.3'
|
||||
- name: Run tests
|
||||
working-directory: ./mobile
|
||||
run: flutter test
|
||||
|
||||
mobile-integration-tests:
|
||||
name: Run mobile end-to-end integration tests
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: 'adopt'
|
||||
java-version: '11'
|
||||
- name: Cache android SDK
|
||||
uses: actions/cache@v3
|
||||
id: android-sdk
|
||||
with:
|
||||
key: android-sdk
|
||||
path: |
|
||||
/usr/local/lib/android/
|
||||
~/.android
|
||||
- name: Setup Android SDK
|
||||
if: steps.android-sdk.outputs.cache-hit != 'true'
|
||||
uses: android-actions/setup-android@v2
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
flutter-version: '3.7.3'
|
||||
- name: Run integration tests
|
||||
uses: reactivecircus/android-emulator-runner@v2.27.0
|
||||
with:
|
||||
working-directory: ./mobile
|
||||
api-level: 29
|
||||
arch: x86_64
|
||||
profile: pixel
|
||||
target: default
|
||||
emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim
|
||||
disable-linux-hw-accel: false
|
||||
script: |
|
||||
flutter pub get
|
||||
flutter test integration_test
|
||||
@@ -0,0 +1,12 @@
|
||||
.DS_Store
|
||||
.vscode/*
|
||||
!.vscode/launch.json
|
||||
.idea
|
||||
|
||||
docker/upload
|
||||
uploads
|
||||
coverage
|
||||
|
||||
mobile/gradle.properties
|
||||
mobile/openapi/pubspec.lock
|
||||
mobile/*.jks
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"restart": true,
|
||||
"port": 9230,
|
||||
"name": "Immich Server",
|
||||
"remoteRoot": "/usr/src/app",
|
||||
"localRoot": "${workspaceFolder}/server"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation
|
||||
in our community a harassment-free experience for everyone, regardless
|
||||
of age, body size, visible or invisible disability, ethnicity, sex
|
||||
characteristics, gender identity and expression, level of experience,
|
||||
education, socio-economic status, nationality, personal appearance,
|
||||
race, religion, or sexual identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open,
|
||||
welcoming, diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for
|
||||
our community include:
|
||||
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our
|
||||
mistakes, and learning from the experience
|
||||
- Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
- The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
- Trolling, insulting or derogatory comments, and personal or
|
||||
political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in
|
||||
a professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our
|
||||
standards of acceptable behavior and will take appropriate and fair
|
||||
corrective action in response to any behavior that they deem
|
||||
inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit,
|
||||
or reject comments, commits, code, wiki edits, issues, and other
|
||||
contributions that are not aligned to this Code of Conduct, and will
|
||||
communicate reasons for moderation decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also
|
||||
applies when an individual is officially representing the community in
|
||||
public spaces. Examples of representing our community include using an
|
||||
official e-mail address, posting via an official social media account,
|
||||
or acting as an appointed representative at an online or offline
|
||||
event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior
|
||||
may be reported to the community leaders responsible for enforcement
|
||||
at our Discord channel. All complaints
|
||||
will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and
|
||||
security of the reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in
|
||||
determining the consequences for any action they deem in violation of
|
||||
this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior
|
||||
deemed unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders,
|
||||
providing clarity around the nature of the violation and an
|
||||
explanation of why the behavior was inappropriate. A public apology
|
||||
may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued
|
||||
behavior. No interaction with the people involved, including
|
||||
unsolicited interaction with those enforcing the Code of Conduct, for
|
||||
a specified period of time. This includes avoiding interactions in
|
||||
community spaces as well as external channels like social
|
||||
media. Violating these terms may lead to a temporary or permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards,
|
||||
including sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or
|
||||
public communication with the community for a specified period of
|
||||
time. No public or private interaction with the people involved,
|
||||
including unsolicited interaction with those enforcing the Code of
|
||||
Conduct, is allowed during this period. Violating these terms may lead
|
||||
to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of
|
||||
community standards, including sustained inappropriate behavior,
|
||||
harassment of an individual, or aggression toward or disparagement of
|
||||
classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction
|
||||
within the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor
|
||||
Covenant][homepage], version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of
|
||||
conduct enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the
|
||||
FAQ at https://www.contributor-covenant.org/faq. Translations are
|
||||
available at https://www.contributor-covenant.org/translations.
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 Hau Tran
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,35 @@
|
||||
dev:
|
||||
rm -rf ./server/dist && docker-compose -f ./docker/docker-compose.dev.yml up --remove-orphans
|
||||
|
||||
dev-new:
|
||||
rm -rf ./server/dist && docker compose -f ./docker/docker-compose.dev.yml up --remove-orphans
|
||||
|
||||
dev-new-update:
|
||||
rm -rf ./server/dist && docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
|
||||
|
||||
dev-update:
|
||||
rm -rf ./server/dist && docker-compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
|
||||
|
||||
dev-scale:
|
||||
rm -rf ./server/dist && docker-compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans
|
||||
|
||||
stage:
|
||||
docker-compose -f ./docker/docker-compose.staging.yml up --build -V --remove-orphans
|
||||
|
||||
pull-stage:
|
||||
docker-compose -f ./docker/docker-compose.staging.yml pull
|
||||
|
||||
test-e2e:
|
||||
docker-compose -f ./docker/docker-compose.test.yml --env-file ./docker/.env.test -p immich-test-e2e up --renew-anon-volumes --abort-on-container-exit --exit-code-from immich-server-test --remove-orphans --build
|
||||
|
||||
prod:
|
||||
docker-compose -f ./docker/docker-compose.yml up --build -V --remove-orphans
|
||||
|
||||
prod-scale:
|
||||
docker-compose -f ./docker/docker-compose.yml up --build -V --scale immich-server=3 --scale immich-microservices=3 --remove-orphans
|
||||
|
||||
api:
|
||||
cd ./server && npm run api:generate
|
||||
|
||||
attach-server:
|
||||
docker exec -it docker_immich-server_1 sh
|
||||
@@ -0,0 +1,17 @@
|
||||
# Deployment checklist for iOS/Android/Server
|
||||
|
||||
[ ] Up version in [mobile/pubspec.yml](/mobile/pubspec.yaml)
|
||||
|
||||
[ ] Up version in [docker/docker-compose.yml](/docker/docker-compose.yml) for `immich_server` service
|
||||
|
||||
[ ] Up version in [docker/docker-compose.gpu.yml](/docker/docker-compose.gpu.yml) for `immich_server` service
|
||||
|
||||
[ ] Up version in [docker/docker-compose.dev.yml](/docker/docker-compose.dev.yml) for `immich_server` service
|
||||
|
||||
[ ] Up version in [server/src/constants/server_version.constant.ts](/server/src/constants/server_version.constant.ts)
|
||||
|
||||
[ ] Up version in iOS Fastlane [/mobile/ios/fastlane/Fastfile](/mobile/ios/fastlane/Fastfile)
|
||||
|
||||
[ ] Add changelog to [Android Fastlane F-droid folder](/mobile/android/fastlane/metadata/android/en-US/changelogs)
|
||||
|
||||
All of the version should be the same.
|
||||
@@ -0,0 +1,106 @@
|
||||
<p align="center">
|
||||
<br/>
|
||||
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green.svg?color=3F51B5&style=for-the-badge&label=License&logoColor=000000&labelColor=ececec" alt="License: MIT"></a>
|
||||
<a href="https://discord.gg/D8JsnBEuKb">
|
||||
<img src="https://img.shields.io/discord/979116623879368755.svg?label=Discord&logo=Discord&style=for-the-badge&logoColor=000000&labelColor=ececec" atl="Discord"/>
|
||||
</a>
|
||||
<br/>
|
||||
<br/>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="design/immich-logo.svg" width="150" title="Login With Custom URL">
|
||||
</p>
|
||||
<h3 align="center">Immich - High performance self-hosted photo and video backup solution</h3>
|
||||
<br/>
|
||||
<a href="https://immich.app">
|
||||
<img src="design/immich-screenshots.png" title="Main Screenshot">
|
||||
</a>
|
||||
<br/>
|
||||
<p align="center">
|
||||
<a href="README_zh_CN.md">中文</a>
|
||||
</p>
|
||||
|
||||
## Disclaimer
|
||||
|
||||
- ⚠️ The project is under **very active** development.
|
||||
- ⚠️ Expect bugs and breaking changes.
|
||||
- ⚠️ **Do not use the app as the only way to store your photos and videos!**
|
||||
|
||||
## Content
|
||||
|
||||
- [Official Documentation](https://immich.app/docs)
|
||||
- [Roadmap](https://github.com/orgs/immich-app/projects/1)
|
||||
- [Demo](#demo)
|
||||
- [Features](#features)
|
||||
- [Introduction](https://immich.app/docs/overview/introduction)
|
||||
- [Installation](https://immich.app/docs/install/requirements)
|
||||
- [Contribution Guidelines](https://immich.app/docs/overview/support-the-project)
|
||||
- [Support The Project](#support-the-project)
|
||||
- [Known Issues](#known-issues)
|
||||
|
||||
## Documentation
|
||||
|
||||
You can find the main documentation, including installation guides, at https://immich.app/.
|
||||
|
||||
## Demo
|
||||
|
||||
You can access the web demo at https://demo.immich.app
|
||||
|
||||
For the mobile app, you can use `https://demo.immich.app/api` for the `Server Endpoint URL`
|
||||
|
||||
```bash title="Demo Credential"
|
||||
The credential
|
||||
email: demo@immich.app
|
||||
password: demo
|
||||
```
|
||||
|
||||
```
|
||||
Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM
|
||||
```
|
||||
|
||||
# Features
|
||||
|
||||
| Features | Mobile | Web |
|
||||
| ------------------------------------------- | ------- | --- |
|
||||
| Upload and view videos and photos | Yes | Yes |
|
||||
| Auto backup when the app is opened | Yes | N/A |
|
||||
| Selective album(s) for backup | Yes | N/A |
|
||||
| Download photos and videos to local device | Yes | Yes |
|
||||
| Multi-user support | Yes | Yes |
|
||||
| Album and Shared albums | Yes | Yes |
|
||||
| Scrubbable/draggable scrollbar | Yes | Yes |
|
||||
| Support RAW (HEIC, HEIF, DNG, Apple ProRaw) | Yes | Yes |
|
||||
| Metadata view (EXIF, map) | Yes | Yes |
|
||||
| Search by metadata, objects and image tags | Yes | No |
|
||||
| Administrative functions (user management) | N/A | Yes |
|
||||
| Background backup | Android | N/A |
|
||||
| Virtual scroll | Yes | Yes |
|
||||
| OAuth support | Yes | Yes |
|
||||
| LivePhoto backup and playback | iOS | Yes |
|
||||
| User-defined storage structure | Yes | Yes |
|
||||
| Public Sharing | N/A | Yes |
|
||||
|
||||
# Support the project
|
||||
|
||||
I've committed to this project, and I will not stop. I will keep updating the docs, adding new features, and fixing bugs. But I can't do it alone. So I need your help to give me additional motivation to keep going.
|
||||
|
||||
As our hosts in the [selfhosted.show - In the episode 'The-organization-must-not-be-name is a Hostile Actor'](https://selfhosted.show/79?t=1418) said, this is a massive undertaking of what the team and I are doing. And I would love to someday be able to do this full-time, and I am asking for your help to make that happen.
|
||||
|
||||
If you feel like this is the right cause and the app is something you are seeing yourself using for a long time, please consider supporting the project with the option below.
|
||||
|
||||
## Donation
|
||||
|
||||
- [Monthly donation](https://github.com/sponsors/alextran1502) via GitHub Sponsors
|
||||
- [One-time donation](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via Github Sponsors
|
||||
- [Librepay](https://liberapay.com/alex.tran1502/)
|
||||
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
||||
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
|
||||
|
||||
# Known Issues
|
||||
|
||||
## immich-machine-learning fails to start
|
||||
|
||||
Symptoms: the container logs `illegal instruction core dump` and restarts
|
||||
|
||||
Solution: https://immich.app/docs/install/requirements#hardware
|
||||
@@ -0,0 +1,115 @@
|
||||
<p align="center">
|
||||
<br/>
|
||||
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green.svg?color=3F51B5&style=for-the-badge&label=License&logoColor=000000&labelColor=ececec" alt="License: MIT"></a>
|
||||
<a href="https://discord.gg/D8JsnBEuKb">
|
||||
<img src="https://img.shields.io/discord/979116623879368755.svg?label=Discord&logo=Discord&style=for-the-badge&logoColor=000000&labelColor=ececec" atl="Discord"/>
|
||||
</a>
|
||||
<br/>
|
||||
<br/>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="design/immich-logo.svg" width="150" title="Login With Custom URL">
|
||||
</p>
|
||||
<h3 align="center">Immich - 高性能的自托管照片和视频备份方案</h3>
|
||||
<p align="center">
|
||||
请注意: 此README不是由Immich团队维护, 这意味着它在某一时间点不会被更新,因为我们是依靠贡献者来更新的。感谢理解。
|
||||
</p>
|
||||
<br/>
|
||||
<a href="https://immich.app">
|
||||
<img src="design/immich-screenshots.png" title="Main Screenshot">
|
||||
</a>
|
||||
<br/>
|
||||
|
||||
<p align="center">
|
||||
<a href="README.md">English</a>
|
||||
</p>
|
||||
|
||||
|
||||
## 免责声明
|
||||
|
||||
- ⚠️ 本项目正在 **非常活跃** 的开发中。
|
||||
- ⚠️ 可能存在bug或者重大变更。
|
||||
- ⚠️ **不要把本软件作为你存储照片或视频的唯一方式!**
|
||||
|
||||
## 目录
|
||||
|
||||
- [官方文档](https://immich.app/docs/overview/introduction)
|
||||
- [示例](#示例)
|
||||
- [功能特性](#功能特性)
|
||||
- [介绍](https://immich.app/docs/overview/introduction)
|
||||
- [安装](https://immich.app/docs/install/requirements)
|
||||
- [贡献指南](https://immich.app/docs/overview/support-the-project)
|
||||
- [支持本项目](#support-the-project)
|
||||
- [已知问题](#known-issues)
|
||||
|
||||
## 官方文档
|
||||
|
||||
你可以在 https://immich.app/ 找到包含安装手册的官方文档.
|
||||
## 示例
|
||||
|
||||
你可以在 https://demo.immich.app 访问示例.
|
||||
|
||||
在移动端, 你可以使用 `https://demo.immich.app/api`获取`服务终端链接`
|
||||
|
||||
```bash title="示例认证信息"
|
||||
认证信息
|
||||
邮箱: demo@immich.app
|
||||
密码: demo
|
||||
```
|
||||
|
||||
```
|
||||
规格: 甲骨文免费虚拟机套餐-阿姆斯特丹 4核 2.4Ghz ARM64 CPU, 24GB RAM。
|
||||
```
|
||||
|
||||
# 功能特性
|
||||
|
||||
| 功能特性 | 移动端 | 网页端 |
|
||||
| ------------------------------------------- | ------- | --- |
|
||||
| 上传并查看照片和视频 | 是 | 是 |
|
||||
| 软件运行时自动备份 | 是 | N/A |
|
||||
| 选择需要备份的相册 | 是 | N/A |
|
||||
| 下载照片和视频到本地 | 是 | 是 |
|
||||
| 多用户支持 | 是 | 是 |
|
||||
| 相册 | 是 | 是 |
|
||||
| 共享相册 | 是 | 是 |
|
||||
| 可拖动的快速导航栏 | 是 | 是 |
|
||||
| 支持RAW格式 (HEIC, HEIF, DNG, Apple ProRaw) | 是 | 是 |
|
||||
| 元数据视图 (EXIF, 地图) | 是 | 是 |
|
||||
| 通过元数据、对象和标签进行搜索 | 是 | No |
|
||||
| 管理功能 (用户管理) | N/A | 是 |
|
||||
| 后台备份 | Android | N/A |
|
||||
| 虚拟滚动 | 是 | 是 |
|
||||
| OAuth支持 | 是 | 是 |
|
||||
| 实时照片备份和查看 (仅iOS) | 是 | 是 |
|
||||
|
||||
# 支持本项目
|
||||
|
||||
我已经致力于本项目并且将我会持续更新文档、新增功能和修复问题。但是我不能一个人走下去,所以我需要你给予我走下去的动力。
|
||||
|
||||
就像我主页里面 [selfhosted.show - In the episode 'The-organization-must-not-be-name is a Hostile Actor'](https://selfhosted.show/79?t=1418) 说的一样,这是我和团队的一项艰巨的任务。我希望某一天我能够全职开发本项目,在此我希望你们能够助我梦想成真。
|
||||
|
||||
如果你使用了本项目一段时间,并且觉得上面的话有道理,那么请你按照如下方式帮助我吧。
|
||||
|
||||
## 捐赠
|
||||
|
||||
- [按月捐赠](https://github.com/sponsors/alextran1502) via GitHub Sponsors
|
||||
- [一次捐赠](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via Github Sponsors
|
||||
|
||||
# 已知问题
|
||||
|
||||
## TensorFlow 构建问题
|
||||
|
||||
_这是一个针对于Proxmox的已知问题_
|
||||
|
||||
TensorFlow 不能运行在很旧的CPU架构上, 需要运行在AVX和AVX2指令集的CPU上。如果你在docker-compose的命令行中遇到了 `illegal instruction core dump`的错误, 通过如下命令检查你的CPU flag寄存器然后确保你能够看到`AVX`和`AVX2`的字样:
|
||||
|
||||
```bash
|
||||
more /proc/cpuinfo | grep flags
|
||||
```
|
||||
|
||||
如果你在Proxmox中运行虚拟机, 虚拟机中没有启用flag寄存器。
|
||||
|
||||
你需要在虚拟机的硬件面板中把CPU类型从`kvm64`改为`host`。
|
||||
|
||||
`Hardware > Processors > Edit > Advanced > Type (dropdown menu) > host`
|
||||
@@ -0,0 +1,5 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report security issues to `alex.tran1502@gmail.com`
|
||||
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 308 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 144 KiB |
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="svg2781" xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 564.2 553.5"
|
||||
style="enable-background:new 0 0 564.2 553.5;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#4081EF;stroke:#512D8C;stroke-miterlimit:10;}
|
||||
.st1{fill:#31A452;stroke:#512D8C;stroke-miterlimit:10;}
|
||||
.st2{fill:#DE7FB3;stroke:#512D8C;stroke-miterlimit:10;}
|
||||
.st3{fill:#FFB800;stroke:#512D8C;stroke-miterlimit:10;}
|
||||
.st4{fill:#E64132;stroke:#512D8C;stroke-miterlimit:10;}
|
||||
.st5{fill:#F2F5FB;stroke:#512D8C;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<path class="st0" d="M210.5,549.6c-2.2-0.2-5.5-1-9.7-2.2c-52.4-15.7-99-46.5-133.8-88.5c-8.8-10.7-17.2-22.4-19.4-27.5
|
||||
c-8.1-18.1-6.3-38.7,4.8-55.4c5-7.5,13.2-15,20.5-18.7c1.2-0.6,54.1-20,55.8-20.4c0.5-0.1,0.5,0.2-0.3,2.1c-0.7,1.7-1,3.1-1.1,5.5
|
||||
l-0.1,3.2l2.8,5.8c8.7,17.9,19.2,32.7,33.2,46.4c6.3,6.2,7.8,7.6,13.8,12.3c22.7,18.1,52,30.7,79.9,34.3c2.5,0.3,5,0.8,5.7,1
|
||||
c2.8,0.9,7.7-0.8,11-3.7l1.8-1.6l-0.2,4.8c-0.1,2.7-0.6,15.4-1,28.3c-0.6,20.3-0.8,24-1.5,27.5c-3.9,20.7-18.6,37.5-38.4,44.1
|
||||
c-4.6,1.5-8,2.2-13.1,2.7C216.6,550.1,215.3,550,210.5,549.6z"/>
|
||||
<path class="st1" d="M339.8,549.4c-4-0.4-9.4-1.6-13.2-2.9c-3.4-1.2-10-4.4-12.5-6.1c-10.9-7.4-19-17.9-23.1-30
|
||||
c-2.2-6.7-2.3-7.5-3.3-36.9c-0.5-14.9-0.9-27.9-0.9-28.9l0-1.9l2.3,1.8c2.6,2,6.6,3.4,8.5,3.1c0.6-0.1,3-0.5,5.3-0.8
|
||||
c37.7-5.3,71.2-22.2,97.4-49.1c12.2-12.5,21.4-25.5,29.9-42.4l3.5-7l0-3.6c0-3.1-0.1-3.8-1-5.7c-0.5-1.2-0.9-2.1-0.9-2.2
|
||||
c0.2-0.2,55.3,20.1,56.9,20.9c2.6,1.3,6.6,4.1,9.9,7c9.2,7.7,16.1,19.4,18.8,31.8c0.7,3.1,0.8,4.8,0.8,11.3c0,8.6-0.5,11.7-2.9,18.7
|
||||
c-1.7,5-2.9,7.2-7.1,13.1c-7.6,11-15.3,20.5-25.2,31.2c-32.8,35.4-76.5,62.5-123.4,76.3C351.6,549.6,347.2,550.1,339.8,549.4z"/>
|
||||
<path class="st2" d="M255.6,438c-25.9-4.2-50.7-14.9-71.7-31c-5.2-4-8.7-7.1-14.1-12.4c-12.7-12.5-21.9-24.9-30.5-41.4
|
||||
c-2.3-4.4-2.4-4.7-2.4-7.1c0-8.8,8.5-15.2,16.9-12.7c5.6,1.7,9.6,6.8,9.7,12.2c0,2.6-0.8,4.6-2.6,6.2c-1.2,1.1-3.2,1.9-4.6,1.9
|
||||
c-1.2,0-3.3-0.8-4.3-1.6c-2.1-1.8-2-1,0.4,3.2c19.3,33.8,52.3,59.1,90,69.1c5.7,1.5,11.5,2.7,11.8,2.4c0.1-0.1-0.4-0.8-1.3-1.6
|
||||
c-5.1-4.5-2.3-11.7,5-12.8c5.4-0.8,11.4,2.7,13.9,8c0.8,1.7,1,2.5,1,5.3s-0.1,3.5-1,5.3c-2,4.3-6.8,7.9-10.3,7.8
|
||||
C260.6,438.7,257.9,438.3,255.6,438z"/>
|
||||
<path class="st0" d="M297.6,438.2c-3.4-1.3-6.4-4.3-7.8-8.1c-1.1-2.9-0.9-7.3,0.5-10.2c2.6-5.3,8.7-8.5,14.4-7.5
|
||||
c2.9,0.5,4.7,1.9,6,4.3c0.8,1.6,1,2.2,0.8,3.6c-0.3,2.2-0.9,3.3-2.7,4.8c-0.8,0.7-1.4,1.4-1.3,1.5c0.5,0.5,13.4-2.7,21.3-5.4
|
||||
c33.6-11.3,62.5-35.1,80.4-66.1c2.5-4.4,2.6-5,0.5-3.2c-2.8,2.4-7,1.9-9.6-1c-4-4.6-0.7-13.8,6.1-16.9c2-0.9,2.7-1,5.5-1
|
||||
c2.9,0,3.5,0.1,5.6,1.1c4.4,2.1,7.4,6.4,7.8,11c0.2,2.2,0.1,2.3-2.2,6.9c-23,45.9-67,78.1-117.2,85.9
|
||||
C300.2,438.8,299.4,438.9,297.6,438.2z"/>
|
||||
<path class="st1" d="M211.1,398.5c-4.7-0.9-8.7-2.7-12.9-5.9c-10.8-8.1-13.5-22.3-6.6-33.7c0.7-1.2,1.1-2.2,1-2.4
|
||||
c-0.2-0.2-1.2-0.6-2.3-1.1c-7.6-3-13-10.6-13.5-19.1c-0.5-7.4,3.1-15,9-19.4c1-0.7,2.2-1.5,2.6-1.8c0.8-0.4,68.9-22.7,69.4-22.7
|
||||
c0.2,0,0.7,0.7,1.2,1.5c0.5,0.8,1.6,2.3,2.4,3.3c1.2,1.4,1.5,1.9,1.2,2.3c-0.2,0.3-6.9,9.5-14.8,20.5
|
||||
c-15.9,21.9-15.5,21.3-13.4,23.4c1.3,1.3,2.9,1.4,4.4,0.3c0.6-0.4,7.5-9.7,15.5-20.7c11.2-15.4,14.6-19.9,15-19.7
|
||||
c0.9,0.4,5.5,1.9,6.6,2.1l1,0.2l0,35.3c0,39.7,0,38.8-2.5,44c-2.6,5.3-7.2,9.3-12.7,11.2c-3.7,1.3-6.8,1.6-10.2,1
|
||||
c-5.5-0.9-9.8-3.2-13.7-7.4l-2.2-2.4l-0.6,0.9c-3,4.3-8.6,8.1-14,9.5C218.2,398.6,213.2,398.9,211.1,398.5z"/>
|
||||
<path class="st3" d="M342.9,398.5c-5.5-0.9-9.9-3.2-14.3-7.6l-3.2-3.2l-0.7,1c-2.3,3.3-6.8,6.5-11.1,7.9c-3.7,1.2-9.2,1.4-12.6,0.3
|
||||
c-7.1-2.1-12.7-7.4-15.2-14.3l-0.9-2.6v-37.1v-37.1l1.8-0.4c1-0.2,2.7-0.8,3.9-1.2c1.1-0.5,2.1-0.8,2.2-0.7c0.1,0.1,6.5,9,14.4,19.9
|
||||
c7.8,10.9,14.7,20.1,15.2,20.5c2.2,1.9,5.4,0.4,5.4-2.6c0-1.4-1-2.9-13.8-20.5c-7.6-10.5-14.2-19.6-14.7-20.4l-0.9-1.3l1.4-1.7
|
||||
c0.8-0.9,1.9-2.5,2.5-3.4l1-1.6l34.4,11.2c18.9,6.2,35.1,11.6,35.9,12.1c6.8,4,11.1,11.3,11.1,19.1c0,4.1-0.5,6.4-2.4,10.2
|
||||
c-2,4.1-5.5,7.6-9.6,9.7c-1.6,0.8-3.2,1.5-3.4,1.5c-1,0-0.9,0.7,0.3,2.6c2.8,4.3,4,8.5,3.9,13.7c0,8.1-3.7,15.2-10.6,20.3
|
||||
C356.4,397.6,349.5,399.5,342.9,398.5z"/>
|
||||
<path class="st2" d="M53.9,341.9c-0.5-0.1-2.3-0.4-3.9-0.7c-15.6-2.6-30.4-12.6-38.8-26.2c-3.5-5.7-6.4-13.2-7.8-19.9
|
||||
c-1.2-6.1-0.8-28.1,0.8-43.1c4.5-43,19-84.3,42.2-120.7c6.5-10.2,14.9-21.5,18.2-24.6c17.8-16.6,43.1-20.5,64.8-10
|
||||
c4.3,2.1,8.8,5.1,12.7,8.6c2.8,2.4,5.8,6.1,20.9,25.5c9.7,12.5,17.8,22.8,17.9,23c0.2,0.2-0.9,0.4-3.2,0.4c-2.5,0-4.1,0.2-5.7,0.7
|
||||
c-2.1,0.7-2.6,1.1-7.9,6.3c-8.2,8.1-14.4,15.3-20.3,23.9c-15.5,22.2-25.4,47.7-28.8,74.8c-2.2,16.9-1.6,37.5,1.6,52.3
|
||||
c0.3,1.4,0.5,2.8,0.4,3c-0.1,0.2,0.2,1.3,0.8,2.4c1.1,2.4,4.3,5.7,6.5,6.8l1.5,0.8l-1.2,0.4c-0.7,0.2-13.1,3.8-27.6,8
|
||||
c-16.4,4.7-27.7,7.8-29.8,8.1C64.1,342.1,56.1,342.3,53.9,341.9z"/>
|
||||
<path class="st3" d="M494.7,341.7c-2.1-0.3-33.8-9.1-56.5-15.8l-2.5-0.7l1.6-0.8c3.4-1.7,7.2-6.6,7.3-9.6c0-0.7,0.4-3.3,0.8-5.8
|
||||
c3.9-22.7,3.1-46.1-2.5-68.4c-6.4-25.5-18.6-49.2-35.8-69.1c-4.6-5.3-14.8-15.4-16.4-16.1c-2.4-1.1-5.1-1.6-8-1.4l-2.7,0.2l1.2-1.5
|
||||
c0.7-0.8,8.5-10.8,17.5-22.3c8.9-11.5,17.2-21.8,18.5-23.1c2.6-2.7,7-6.2,10.3-8.2c19.3-11.6,43-11.1,61.6,1.2
|
||||
c5.4,3.6,8.2,6.2,12.3,11.7c26.4,34.5,44,73.7,52.3,116.2c3.4,17.6,4.9,33.3,5,52.4c0,13-0.2,14.8-2.5,21.8
|
||||
C547.8,328.6,521.7,345.2,494.7,341.7z"/>
|
||||
<path class="st4" d="M133.9,318.5c-2-0.5-4.6-1.9-6-3.3c-2.5-2.4-3.1-3.5-3.7-7.3c-4.4-27.3-2.2-54,6.7-79.3
|
||||
c5.3-15.1,13.5-30.5,23-43.1c5.8-7.8,16.6-19.5,19-20.7c4.7-2.4,11.3-1.2,15.2,2.7c5.4,5.4,5.2,13.9-0.3,19.1
|
||||
c-4.3,4-9.4,4.4-12.6,0.9c-1.7-1.9-2.2-3.9-1.7-6.4c0.2-1.1,0.3-2,0.2-2.2c-0.3-0.3-3.6,3.3-8.3,9.1c-17.6,21.8-28.5,48-31.9,76.5
|
||||
c-1.1,9.3-1,26.4,0.1,34.6c0.3,1.8,0.8,1.9,1.4,0.1c0.9-2.6,4-4.7,6.8-4.7c3,0,5.9,2.2,7.5,5.7c0.6,1.3,0.8,2.3,0.8,5.2
|
||||
c0,3.3-0.1,3.8-1.1,5.7c-1.4,2.7-4.6,5.7-7.1,6.6C139.4,318.6,135.8,318.9,133.9,318.5z"/>
|
||||
<path class="st1" d="M422.6,318.5c-3.7-0.6-7.7-3.6-9.4-7.1c-3.8-7.5,0.1-16.9,6.9-16.9c3.1,0,5.8,2,6.9,5.2
|
||||
c0.4,1.2,0.5,1.3,0.7,0.7c1.3-3.7,1.7-26.4,0.6-35.7c-3.6-29.6-14.5-55.3-33-77.9c-5.5-6.7-8.4-9.4-7.1-6.6c0.7,1.4,0.5,4.3-0.3,5.9
|
||||
c-0.9,1.7-3.2,3.5-5,3.8c-3.2,0.6-7.9-1.6-10.2-4.8c-6.5-8.8-0.5-21.2,10.4-21.4c4.6-0.1,5.2,0.3,11.2,6.4
|
||||
c12.1,12.3,21.1,24.9,28.8,40.3c13.2,26.3,18.6,54.9,16.1,84.5c-0.5,5.6-2,15.7-2.6,17.1c-1.3,2.8-4.8,5.5-8.4,6.5
|
||||
C425.9,318.9,425.1,318.9,422.6,318.5z"/>
|
||||
<path class="st0" d="M178.2,307.2c-6-1.3-12.2-6.2-14.9-11.7c-3.4-7-3.1-15.1,0.9-21.6c0.7-1.2,1.2-2.3,1.1-2.4
|
||||
c-0.1-0.1-1.1-0.6-2.1-1c-3.9-1.5-8.1-4.8-10.7-8.3c-4.6-6.2-6.1-14.6-3.9-22.1c2.9-10.3,9.4-16.8,19.1-19.3c2.8-0.7,9-0.8,11.7,0
|
||||
c1.1,0.3,2.2,0.5,2.4,0.5c0.2,0,0.3-0.7,0.3-1.5c0-2.9,0.8-5.8,2.4-9.2c5.2-10.8,18.1-15.5,29-10.5c2.7,1.2,6.2,3.8,7.8,5.8
|
||||
c0.7,0.8,10.3,14,21.5,29.4l20.3,27.9l-1.5,1.8c-0.8,1-1.9,2.6-2.5,3.5c-0.6,1-1.2,1.7-1.5,1.6c-4.5-1.7-46.7-15-47.7-15
|
||||
c-1.9,0-3.1,1.3-3.1,3.2c0,1,0.2,1.7,0.8,2.3c0.6,0.6,7.8,3.1,24.5,8.5l23.7,7.7l-0.1,4.3l-0.1,4.3L223,295.9
|
||||
c-18,5.9-33.9,10.9-35.2,11.2C184.7,307.8,181.2,307.8,178.2,307.2z"/>
|
||||
<path class="st4" d="M372.5,306.8c-1.8-0.5-17.5-5.6-35-11.3l-31.8-10.4l1-4.3v-4.3l22.6-7.7c15-4.9,24-8,24.6-8.5
|
||||
c0.7-0.6,0.9-1.1,0.9-2.2c0-2-1.2-3.3-3.1-3.3c-0.9,0-10.5,2.9-24.7,7.5c-12.8,4.1-23.4,7.5-23.6,7.5c-0.1,0-0.7-0.8-1.3-1.9
|
||||
c-0.6-1-1.6-2.5-2.2-3.2c-0.7-0.7-1.2-1.5-1.2-1.6c0-0.2,9.6-13.5,21.4-29.6c18.9-26,21.6-29.6,23.6-31.1c5.7-4.4,13.1-5.8,19.7-3.9
|
||||
c9,2.7,16.1,11.6,16.1,20.3c0,2.3-0.1,2.3,3.1,1.5c4.7-1.1,11.5-0.5,16,1.5c4.6,2,9,6,11.5,10.2c2.1,3.6,3.9,9.4,4.2,13.2
|
||||
c0.3,5.2-1.1,10.7-4,15.3c-2.6,4.1-7.8,8.3-12.1,9.8c-0.9,0.3-1.7,0.8-1.7,1c0,0.2,0.4,1,0.9,1.7c2.4,3.6,3.6,7.7,3.5,12.7
|
||||
c0,5.8-2.1,10.7-6.4,15.1c-4,4.1-8.9,6.3-14.9,6.5C376.3,307.7,375.3,307.6,372.5,306.8z"/>
|
||||
<path class="st5" d="M276.2,298.9c-6.1-1.6-11.4-6.8-13.2-12.9c-0.7-2.4-0.7-7.5,0-9.9c1.7-5.8,6.6-10.8,12.3-12.5
|
||||
c2.7-0.8,7.2-0.9,10-0.2c6.2,1.6,11.6,7.1,13.2,13.3c1.6,6-0.3,12.6-5,17.3C288.9,298.6,282.2,300.5,276.2,298.9z"/>
|
||||
<path class="st2" d="M248.3,229.8c-13.3-18.3-21.2-29.6-22-31.1c-1.4-3-1.9-5.5-1.9-9.4c0-14.1,13.1-24.4,27.1-21.4
|
||||
c1.4,0.3,2.6,0.5,2.7,0.5s0.3-1.3,0.4-2.8c0.8-10.7,8.4-19.6,18.9-22.4c3.9-1,10.6-1,14.5,0c8.9,2.3,15.9,9.3,18.2,18.2
|
||||
c0.4,1.5,0.7,3.7,0.7,4.9c0,1.2,0.1,2.1,0.3,2.1s1.5-0.3,3-0.6c7.4-1.6,15.2,0.7,20.5,6c4.3,4.3,6.6,9.6,6.6,15.6
|
||||
c0,4-0.6,6.5-2.4,10c-0.6,1.2-10.4,15-21.7,30.7c-17.8,24.5-20.8,28.5-21.4,28.3c-0.4-0.1-1.9-0.6-3.4-1.1c-1.5-0.5-2.9-0.9-3.3-0.9
|
||||
c-0.7,0-0.7-0.8-0.3-25.5v-25.5l-1.4-0.9c-1-1.1-2.5-1.5-3.8-0.9c-2,0.8-2-0.5-1.8,27.2v25.8h-1.2c-0.5-0.2-2.4,0.3-4,0.9
|
||||
s-3.1,1.1-3.2,1.1C269.2,258.5,259.8,245.6,248.3,229.8z"/>
|
||||
<path class="st3" d="M210.9,164.8c-4.1-0.9-7.7-3.6-9.6-7.4c-1.4-2.8-1.7-7.3-0.5-10.3c1.7-4.5,3.9-6.1,15.6-11.2
|
||||
c15.8-7,31.4-11.1,49.2-12.9c7.3-0.8,23.2-0.8,30.6,0c17.4,1.8,33.3,6,49.1,13c7.3,3.2,12.5,6.1,13.6,7.5c4.3,5.6,3.8,12.7-1.1,17.6
|
||||
c-5.1,5.1-12.9,5.4-18.1,0.7c-2-1.8-3-3.5-3.4-5.6c-0.7-4,2.9-8.1,7.3-8.2c1.4,0,1.5-0.1,1.1-0.5c-0.3-0.3-2.2-1.2-4.3-2.1
|
||||
c-33.2-14.5-70.5-16.4-105-5.4c-7.5,2.4-19,7.2-18.6,7.7c0.1,0.2,0.8,0.3,1.6,0.3c5.6,0,9.1,6.2,6.1,10.8
|
||||
C221.6,163.3,215.9,165.9,210.9,164.8z"/>
|
||||
<path class="st4" d="M174.7,123.4c-8.9-13.1-16.8-25.1-17.5-26.6c-1.6-3.3-3.6-9.2-4.4-13c-2.6-12.5-0.9-25.8,5-37.5
|
||||
c4.2-8.3,11.2-16.3,18.6-21.3c5-3.4,6.1-3.9,12.8-6.3c23.1-8.2,47.2-13.1,73.4-15c7.5-0.6,28.5-0.6,36.3,0
|
||||
c25.5,1.8,50.6,6.9,73,14.8c6.4,2.2,8.2,3.1,13.1,6.5c9.8,6.6,18.1,17.5,22,29.2c2.2,6.5,2.7,10,2.7,17.9c0,7.9-0.5,11.3-2.7,17.9
|
||||
c-2.3,6.8-3.7,9.1-20.3,33.6l-16.1,23.8l-0.4-2.2c-0.2-1.2-0.9-3-1.4-4c-1-1.8-4.4-5.6-4.7-5.2c-0.1,0.1-1.2-0.4-2.4-1.1
|
||||
c-9.1-5.2-21.9-10.5-33.2-13.9c-37-11-77.2-8.8-113,6.1c-4.9,2.1-17.7,8.4-19.2,9.5c-2.2,1.6-5.1,6.8-5.1,9c0,0.4-0.1,1-0.3,1.2
|
||||
C191,147,184.7,138,174.7,123.4z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 278 KiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 406 KiB |
|
After Width: | Height: | Size: 540 KiB |
|
After Width: | Height: | Size: 376 KiB |
|
After Width: | Height: | Size: 570 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 206 KiB |
@@ -0,0 +1,32 @@
|
||||
# Development Setup
|
||||
|
||||
## Lint / format extensions
|
||||
|
||||
Setting these in the IDE give a better developer experience auto-formatting code on save and providing instant feedback on lint issues.
|
||||
|
||||
### VSCode
|
||||
Install Prettier, ESLint and Svelte extensions.
|
||||
|
||||
in User `settings.json` (`cmd + shift + p` and search for Open User Settings JSON) add the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"editor.formatOnSave": true,
|
||||
"[javascript][typescript][css]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.tabSize": 2,
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"[svelte]": {
|
||||
"editor.defaultFormatter": "svelte.svelte-vscode",
|
||||
"editor.tabSize": 2
|
||||
},
|
||||
"svelte.enable-ts-plugin": true,
|
||||
"eslint.validate": ["javascript", "svelte"]
|
||||
}
|
||||
```
|
||||
|
||||
## Running tests / checks
|
||||
|
||||
In both server and web:
|
||||
`npm run check:all`
|
||||
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 30 KiB |
@@ -1,100 +0,0 @@
|
||||
## Visual Review
|
||||
|
||||
Found **12** page(s) with visual changes.
|
||||
|
||||
### admin-system-settings
|
||||
|
||||
Change: **9.0%** (186,690 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### admin-users
|
||||
|
||||
Change: **3.8%** (79,810 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### albums-list
|
||||
|
||||
Change: **6.1%** (126,081 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### archive
|
||||
|
||||
Change: **4.9%** (101,086 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### explore
|
||||
|
||||
Change: **4.8%** (100,268 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### favorites
|
||||
|
||||
Change: **31.7%** (657,589 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### map
|
||||
|
||||
Change: **62.4%** (1,293,490 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### people
|
||||
|
||||
Change: **0.4%** (7,907 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### photos-timeline
|
||||
|
||||
Change: **55.4%** (1,149,491 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### sharing
|
||||
|
||||
Change: **5.3%** (109,526 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### trash
|
||||
|
||||
Change: **5.4%** (112,470 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
### user-settings
|
||||
|
||||
Change: **6.1%** (126,625 pixels)
|
||||
|
||||
| Base | PR | Diff |
|
||||
|------|-------|------|
|
||||
|  |  |  |
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "admin-system-settings",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 186690,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 9.00318287037037,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/admin-system-settings-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/admin-system-settings.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/admin-system-settings.png"
|
||||
},
|
||||
{
|
||||
"name": "admin-users",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 79810,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 3.8488618827160495,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/admin-users-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/admin-users.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/admin-users.png"
|
||||
},
|
||||
{
|
||||
"name": "albums-list",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 126081,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 6.080295138888888,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/albums-list-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/albums-list.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/albums-list.png"
|
||||
},
|
||||
{
|
||||
"name": "archive",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 101086,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 4.874903549382716,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/archive-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/archive.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/archive.png"
|
||||
},
|
||||
{
|
||||
"name": "explore",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 100268,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 4.83545524691358,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/explore-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/explore.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/explore.png"
|
||||
},
|
||||
{
|
||||
"name": "favorites",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 657589,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 31.712432484567906,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/favorites-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/favorites.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/favorites.png"
|
||||
},
|
||||
{
|
||||
"name": "map",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 1293490,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 62.378954475308646,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/map-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/map.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/map.png"
|
||||
},
|
||||
{
|
||||
"name": "people",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 7907,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 0.38131751543209874,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/people-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/people.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/people.png"
|
||||
},
|
||||
{
|
||||
"name": "photos-timeline",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 1149491,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 55.43455825617284,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/photos-timeline-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/photos-timeline.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/photos-timeline.png"
|
||||
},
|
||||
{
|
||||
"name": "sharing",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 109526,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 5.281925154320987,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/sharing-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/sharing.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/sharing.png"
|
||||
},
|
||||
{
|
||||
"name": "trash",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 112470,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 5.423900462962963,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/trash-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/trash.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/trash.png"
|
||||
},
|
||||
{
|
||||
"name": "user-settings",
|
||||
"baseExists": true,
|
||||
"prExists": true,
|
||||
"diffPixels": 126625,
|
||||
"totalPixels": 2073600,
|
||||
"changePercent": 6.106529706790123,
|
||||
"diffImagePath": "/home/runner/work/immich/immich/screenshots/diff/user-settings-diff.png",
|
||||
"baseImagePath": "/home/runner/work/immich/immich/screenshots/base/user-settings.png",
|
||||
"prImagePath": "/home/runner/work/immich/immich/screenshots/pr/user-settings.png"
|
||||
}
|
||||
]
|
||||
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,19 @@
|
||||
# Database
|
||||
DB_HOSTNAME=immich-database-test
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=postgres
|
||||
DB_DATABASE_NAME=e2e_test
|
||||
|
||||
# Redis
|
||||
REDIS_HOSTNAME=immich-redis-test
|
||||
|
||||
# Upload File Config
|
||||
UPLOAD_LOCATION=./upload
|
||||
|
||||
# MAPBOX
|
||||
## ENABLE_MAPBOX is either true of false -> if true, you have to provide MAPBOX_KEY
|
||||
ENABLE_MAPBOX=false
|
||||
|
||||
# WEB
|
||||
MAPBOX_KEY=
|
||||
VITE_SERVER_ENDPOINT=http://localhost:2283/api
|
||||
@@ -0,0 +1 @@
|
||||
.env
|
||||
@@ -0,0 +1,128 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
immich-server:
|
||||
container_name: immich_server
|
||||
image: immich-server-dev:latest
|
||||
build:
|
||||
context: ../server
|
||||
dockerfile: Dockerfile
|
||||
target: builder
|
||||
command: npm run start:debug immich
|
||||
volumes:
|
||||
- ../server:/usr/src/app
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
- /usr/src/app/node_modules
|
||||
ports:
|
||||
- 3001:3001
|
||||
- 9230:9230
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
|
||||
immich-machine-learning:
|
||||
container_name: immich_machine_learning
|
||||
image: immich-machine-learning-dev:latest
|
||||
build:
|
||||
context: ../machine-learning
|
||||
dockerfile: Dockerfile
|
||||
target: builder
|
||||
command: npm run start:dev
|
||||
volumes:
|
||||
- ../machine-learning:/usr/src/app
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
- /usr/src/app/node_modules
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
depends_on:
|
||||
- database
|
||||
|
||||
immich-microservices:
|
||||
container_name: immich_microservices
|
||||
image: immich-microservices:latest
|
||||
build:
|
||||
context: ../server
|
||||
dockerfile: Dockerfile
|
||||
target: builder
|
||||
command: npm run start:dev microservices
|
||||
volumes:
|
||||
- ../server:/usr/src/app
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
- /usr/src/app/node_modules
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
depends_on:
|
||||
- database
|
||||
- immich-server
|
||||
|
||||
immich-web:
|
||||
container_name: immich_web
|
||||
image: immich-web-dev:1.9.0
|
||||
build:
|
||||
context: ../web
|
||||
dockerfile: Dockerfile
|
||||
target: dev
|
||||
command: npm run dev --host
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
# Rename these values for svelte public interface
|
||||
- PUBLIC_IMMICH_SERVER_URL=${IMMICH_SERVER_URL}
|
||||
- PUBLIC_IMMICH_API_URL_EXTERNAL=${IMMICH_API_URL_EXTERNAL}
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 24678:24678
|
||||
volumes:
|
||||
- ../web:/usr/src/app
|
||||
- /usr/src/app/node_modules
|
||||
restart: always
|
||||
depends_on:
|
||||
- immich-server
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: redis:6.2
|
||||
|
||||
database:
|
||||
container_name: immich_postgres
|
||||
image: postgres:14
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
PG_DATA: /var/lib/postgresql/data
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
ports:
|
||||
- 5432:5432
|
||||
|
||||
immich-proxy:
|
||||
container_name: immich_proxy
|
||||
image: immich-proxy-dev:latest
|
||||
environment:
|
||||
# Make sure these values get passed through from the env file
|
||||
- IMMICH_SERVER_URL
|
||||
- IMMICH_WEB_URL
|
||||
build:
|
||||
context: ../nginx
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- 2283:8080
|
||||
logging:
|
||||
driver: none
|
||||
depends_on:
|
||||
- immich-server
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
@@ -0,0 +1,95 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
immich-server:
|
||||
container_name: immich_server
|
||||
image: altran1502/immich-server:staging
|
||||
entrypoint: ["/bin/sh", "./start-server.sh"]
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
restart: always
|
||||
|
||||
immich-microservices:
|
||||
container_name: immich_microservices
|
||||
image: altran1502/immich-server:staging
|
||||
entrypoint: ["/bin/sh", "./start-microservices.sh"]
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
restart: always
|
||||
|
||||
immich-machine-learning:
|
||||
container_name: immich_machine_learning
|
||||
image: altran1502/immich-machine-learning:staging
|
||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
- database
|
||||
restart: always
|
||||
|
||||
immich-web:
|
||||
container_name: immich_web
|
||||
image: altran1502/immich-web:staging
|
||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
# Rename these values for svelte public interface
|
||||
- PUBLIC_IMMICH_SERVER_URL=${IMMICH_SERVER_URL}
|
||||
- PUBLIC_IMMICH_API_URL_EXTERNAL=${IMMICH_API_URL_EXTERNAL}
|
||||
restart: always
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: redis:6.2
|
||||
restart: always
|
||||
|
||||
database:
|
||||
container_name: immich_postgres
|
||||
image: postgres:14
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
PG_DATA: /var/lib/postgresql/data
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
restart: always
|
||||
|
||||
immich-proxy:
|
||||
container_name: immich_proxy
|
||||
image: altran1502/immich-proxy:staging
|
||||
environment:
|
||||
# Make sure these values get passed through from the env file
|
||||
- IMMICH_SERVER_URL
|
||||
- IMMICH_WEB_URL
|
||||
ports:
|
||||
- 2283:8080
|
||||
logging:
|
||||
driver: none
|
||||
depends_on:
|
||||
- immich-server
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
@@ -0,0 +1,46 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
immich-server-test:
|
||||
image: immich-server-test
|
||||
build:
|
||||
context: ../server
|
||||
dockerfile: Dockerfile
|
||||
target: builder
|
||||
command: npm run test:e2e
|
||||
expose:
|
||||
- '3000'
|
||||
volumes:
|
||||
- ../server:/usr/src/app
|
||||
- /usr/src/app/node_modules
|
||||
env_file:
|
||||
- .env.test
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
depends_on:
|
||||
- immich-redis-test
|
||||
- immich-database-test
|
||||
networks:
|
||||
- immich-test-network
|
||||
immich-redis-test:
|
||||
container_name: immich-redis-test
|
||||
image: redis:6.2
|
||||
networks:
|
||||
- immich-test-network
|
||||
immich-database-test:
|
||||
container_name: immich-database-test
|
||||
image: postgres:14
|
||||
env_file:
|
||||
- .env.test
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
PG_DATA: /var/lib/postgresql/data
|
||||
volumes:
|
||||
- /var/lib/postgresql/data
|
||||
networks:
|
||||
- immich-test-network
|
||||
|
||||
networks:
|
||||
immich-test-network:
|
||||
@@ -0,0 +1,91 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
immich-server:
|
||||
container_name: immich_server
|
||||
image: altran1502/immich-server:release
|
||||
entrypoint: ["/bin/sh", "./start-server.sh"]
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
restart: always
|
||||
|
||||
immich-microservices:
|
||||
container_name: immich_microservices
|
||||
image: altran1502/immich-server:release
|
||||
entrypoint: ["/bin/sh", "./start-microservices.sh"]
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
restart: always
|
||||
|
||||
immich-machine-learning:
|
||||
container_name: immich_machine_learning
|
||||
image: altran1502/immich-machine-learning:release
|
||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
- database
|
||||
restart: always
|
||||
|
||||
immich-web:
|
||||
container_name: immich_web
|
||||
image: altran1502/immich-web:release
|
||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
||||
env_file:
|
||||
- .env
|
||||
restart: always
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: redis:6.2
|
||||
restart: always
|
||||
|
||||
database:
|
||||
container_name: immich_postgres
|
||||
image: postgres:14
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
PG_DATA: /var/lib/postgresql/data
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
restart: always
|
||||
|
||||
immich-proxy:
|
||||
container_name: immich_proxy
|
||||
image: altran1502/immich-proxy:release
|
||||
environment:
|
||||
# Make sure these values get passed through from the env file
|
||||
- IMMICH_SERVER_URL
|
||||
- IMMICH_WEB_URL
|
||||
ports:
|
||||
- 2283:8080
|
||||
logging:
|
||||
driver: none
|
||||
depends_on:
|
||||
- immich-server
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
@@ -0,0 +1,79 @@
|
||||
###################################################################################
|
||||
# Database
|
||||
###################################################################################
|
||||
|
||||
DB_HOSTNAME=immich_postgres
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=postgres
|
||||
DB_DATABASE_NAME=immich
|
||||
|
||||
# Optional Database settings:
|
||||
# DB_PORT=5432
|
||||
|
||||
###################################################################################
|
||||
# Redis
|
||||
###################################################################################
|
||||
|
||||
REDIS_HOSTNAME=immich_redis
|
||||
|
||||
# Optional Redis settings:
|
||||
# REDIS_PORT=6379
|
||||
# REDIS_DBINDEX=0
|
||||
# REDIS_PASSWORD=
|
||||
# REDIS_SOCKET=
|
||||
|
||||
###################################################################################
|
||||
# Upload File Location
|
||||
#
|
||||
# This is the location where uploaded files are stored.
|
||||
###################################################################################
|
||||
|
||||
UPLOAD_LOCATION=absolute_location_on_your_machine_where_you_want_to_store_the_backup
|
||||
|
||||
###################################################################################
|
||||
# Reverse Geocoding
|
||||
#
|
||||
# Reverse geocoding is done locally which has a small impact on memory usage
|
||||
# This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable
|
||||
# This ranges from 0-3 with 3 being the most precise
|
||||
# 3 - Cities > 500 population: ~200MB RAM
|
||||
# 2 - Cities > 1000 population: ~150MB RAM
|
||||
# 1 - Cities > 5000 population: ~80MB RAM
|
||||
# 0 - Cities > 15000 population: ~40MB RAM
|
||||
####################################################################################
|
||||
|
||||
# DISABLE_REVERSE_GEOCODING=false
|
||||
# REVERSE_GEOCODING_PRECISION=3
|
||||
|
||||
####################################################################################
|
||||
# WEB - Optional
|
||||
#
|
||||
# Custom message on the login page, should be written in HTML form.
|
||||
# For example:
|
||||
# PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>"
|
||||
####################################################################################
|
||||
|
||||
PUBLIC_LOGIN_PAGE_MESSAGE=
|
||||
|
||||
####################################################################################
|
||||
# Alternative Service Addresses - Optional
|
||||
#
|
||||
# This is an advanced feature for users who may be running their immich services on different hosts.
|
||||
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
|
||||
# Note: immich-microservices is bound to 3002, but no references are made
|
||||
####################################################################################
|
||||
|
||||
IMMICH_WEB_URL=http://immich-web:3000
|
||||
IMMICH_SERVER_URL=http://immich-server:3001
|
||||
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
|
||||
|
||||
####################################################################################
|
||||
# Alternative API's External Address - Optional
|
||||
#
|
||||
# This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
|
||||
# You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
|
||||
# NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
|
||||
# Examples: http://localhost:3001, http://immich-api.example.com, etc
|
||||
####################################################################################
|
||||
|
||||
#IMMICH_API_URL_EXTERNAL=http://localhost:3001
|
||||
@@ -0,0 +1,21 @@
|
||||
# Dependencies
|
||||
/node_modules
|
||||
|
||||
# Production
|
||||
/build
|
||||
|
||||
# Generated files
|
||||
.docusaurus
|
||||
.cache-loader
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
yarn.lock
|
||||
@@ -0,0 +1,41 @@
|
||||
# Website
|
||||
|
||||
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
|
||||
|
||||
### Installation
|
||||
|
||||
```
|
||||
$ yarn
|
||||
```
|
||||
|
||||
### Local Development
|
||||
|
||||
```
|
||||
$ yarn start
|
||||
```
|
||||
|
||||
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||
|
||||
### Build
|
||||
|
||||
```
|
||||
$ yarn build
|
||||
```
|
||||
|
||||
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||
|
||||
### Deployment
|
||||
|
||||
Using SSH:
|
||||
|
||||
```
|
||||
$ USE_SSH=true yarn deploy
|
||||
```
|
||||
|
||||
Not using SSH:
|
||||
|
||||
```
|
||||
$ GIT_USER=<Your GitHub username> yarn deploy
|
||||
```
|
||||
|
||||
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
||||
@@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
alextran:
|
||||
name: Alex Tran
|
||||
title: Maintainer of Immich
|
||||
url: https://github.com/alextran1502
|
||||
image_url: https://github.com/alextran1502.png
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
slug: release-1-36
|
||||
title: Release v1.36.0
|
||||
authors: [alextran]
|
||||
tags: [release]
|
||||
date: 2022-11-10
|
||||
---
|
||||
|
||||
Hello everyone, it is my pleasure to deliver the new release of Immich to you. The team has been working hard to bring you the new features and improvements. This release includes some big features that the community has been asking since the beginning of Immich. We hope you will enjoy it.
|
||||
|
||||
Some notable features are:
|
||||
|
||||
- [OAuth integration](#livephoto-ios-support-)
|
||||
- [LivePhoto support on iOS](#oauth-integration-)
|
||||
- User config system
|
||||
|
||||
<!--truncate-->
|
||||
|
||||
## LivePhoto iOS Support 🎉
|
||||
|
||||
LivePhoto on iOS is now supported in Immich.
|
||||
|
||||
The motion part will now be uploaded and can be played on the mobile app and the web.
|
||||
|
||||
:::caution
|
||||
|
||||
- The server and the app has to be on version **1.36.x** for the application to work correctly.
|
||||
- Previous uploaded photos will not be updated automatically, you will have to remove and reupload them if you want to keep the LivePhoto functionality.
|
||||
|
||||
:::
|
||||
|
||||
<img
|
||||
src="https://media.giphy.com/media/fTrGceZd7t1ewi8ESc/giphy.gif"
|
||||
width="100%"
|
||||
style={{
|
||||
borderRadius: "10px",
|
||||
boxShadow:
|
||||
"rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px",
|
||||
}}
|
||||
title="LivePhoto playback on the web"
|
||||
/>
|
||||
|
||||
## OAuth Integration 🎉
|
||||
|
||||
I want to borrow this chance to express my gratitude to [@EnricoBilla](https://github.com/EnricoBilla), who has been the trailblazer for this feature since the beginning days of Immich. His PR has sparked ideas, suggestions, and discussion among the team member on how to integrate this feature successfully into the app. Thank you so much for your work and your time.
|
||||
|
||||
OAuth is now integrated into the system. Please follow the guide [here](https://immich.app/docs/usage/oauth) to set up your OAuth integration
|
||||
|
||||
After setting up the correct environment variables in the `.env` file, as shown below
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
| ------------------- | ------- | -------------------- | ------------------------------------------------------------------------- |
|
||||
| OAUTH_ENABLED | boolean | false | Enable/disable OAuth2 |
|
||||
| OAUTH_ISSUER_URL | URL | (required) | Required. Self-discovery URL for client |
|
||||
| OAUTH_CLIENT_ID | string | (required) | Required. Client ID |
|
||||
| OAUTH_CLIENT_SECRET | string | (required) | Required. Client Secret |
|
||||
| OAUTH_SCOPE | string | openid email profile | Full list of scopes to send with the request (space delimited) |
|
||||
| OAUTH_AUTO_REGISTER | boolean | true | When true, will automatically register a user the first time they sign in |
|
||||
| OAUTH_BUTTON_TEXT | string | Login with OAuth | Text for the OAuth button on the web |
|
||||
|
||||
```bash title="Authentik Example"
|
||||
OAUTH_ENABLED=true
|
||||
OAUTH_ISSUER_URL=http://10.1.15.216:9000/application/o/immich-test/
|
||||
OAUTH_CLIENT_ID=30596v8f78a4b6a97d5985c3076b6b4c4d12ddc33
|
||||
OAUTH_CLIENT_SECRET=50f1eafdec353b95b1c638db390db4ab67ef035a51212dbec2f56175e2eb272b5d572c099176e6fe116ecf47ffdd544bgdb9e2edc588307ee0339d25eeccd88
|
||||
OAUTH_BUTTON_TEXT=Login with Authentik
|
||||
```
|
||||
|
||||
The web will have the option to sign in with OAuth.
|
||||
|
||||
<img
|
||||
src="https://user-images.githubusercontent.com/27055614/202923726-f43fa148-47f5-4182-8f29-b0b87e4586fa.png"
|
||||
width="50%"
|
||||
title="Web Sign in with OAuth"
|
||||
style={{
|
||||
borderRadius: "10px",
|
||||
boxShadow:
|
||||
"rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px",
|
||||
}}
|
||||
/>
|
||||
|
||||
The mobile app will check if the server has OAuth enabled before displaying the OAuth
|
||||
sign-in button.
|
||||
|
||||
<img
|
||||
src="https://media.giphy.com/media/3iy3SaNkVYtlkEiw06/giphy.gif"
|
||||
title="Mobile sign in with OAuth"
|
||||
style={{
|
||||
borderRadius: "10px",
|
||||
boxShadow:
|
||||
"rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px",
|
||||
}}
|
||||
/>
|
||||
|
||||
## Support
|
||||
|
||||
<img
|
||||
src="https://media.giphy.com/media/LStqgGESXW8XnuCv5y/giphy.gif"
|
||||
width="300"
|
||||
style={{
|
||||
borderRadius: "10px",
|
||||
boxShadow:
|
||||
"rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px",
|
||||
}}
|
||||
title="Support the project"
|
||||
/>
|
||||
|
||||
If you find the project helpful and it helps you in some ways, you can support the project [one time](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) or [monthly](https://github.com/sponsors/alextran1502) from GitHub Sponsor
|
||||
|
||||
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
|
||||
|
||||
## Details
|
||||
|
||||
For more details, please check out the [release note](https://github.com/immich-app/immich/releases/tag/v1.36.0_55-dev)
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# FAQ
|
||||
|
||||
### What is the difference between the cloud icon on the mobile app?
|
||||
|
||||
| Icon | Description |
|
||||
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|  | Asset is only available in the cloud and was uploaded from some other device (like the web client) or was deleted from this device after upload |
|
||||
|  | Asset is only available locally and has not yet been backed up |
|
||||
|  | Asset was uploaded from this device and is now backed up in the cloud/server and still available in original on the device |
|
||||
|
||||
### How can I sync an existing directory with Immich's server?
|
||||
|
||||
Immich doesn't have the mechanism to sync an existing directory with the server. There is however, a helper CLI tool to help you bulk upload the existing photos and videos to the server. You can find the guide to use the CLI tool [here](/docs/features/bulk-upload.md).
|
||||
|
||||
### Why doesn't Immich watch an existing photo gallery directory?
|
||||
|
||||
The initial approach of Immich is to become a backup tool, primarily for mobile device usage. Thus, all the assets must be uploaded from the mobile client. The app was architectured to perform that job well.
|
||||
|
||||
### What happens to existing files after I choose a new [Storage Template](/docs/administration/storage-template.mdx)?
|
||||
|
||||
Template changes will only apply to new assets. To retroactively apply the template to previously uploaded assets, run the Storage Migration Job, available on the [Jobs](/docs/administration/jobs.md) page.
|
||||
|
||||
### Why is object detection not very good?
|
||||
|
||||
The model we used for machine learning is a prebuilt model, so the accuracy is not very good. It will hopefully be replaced with a better solution in the future.
|
||||
|
||||
### How can I see Immich logs?
|
||||
|
||||
Most Immich components are typically deployed using docker. To see logs for deployed docker containers, you can use the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/), specifically the `docker logs` command. For examples, see [Docker Help](/docs/guides/docker-help.md)
|
||||
|
||||
### How can I run Immich as a non-root user?
|
||||
|
||||
1. Set the `PUID`/`PGID` environment variables (in `.env`).
|
||||
2. Set the corresponding `user` argument in `docker-compose` for each service.
|
||||
3. Add an additional volume to `immich-microservices` that mounts internally to `/usr/src/app/.reverse-geocoding-dump`.
|
||||
|
||||
The non-root user/group needs read/write access to the volume mounts, including `UPLOAD_LOCATION`.
|
||||
|
||||
### How can I reset the admin password?
|
||||
|
||||
The admin password can be reset by running the [reset-admin-password](/docs/administration/server-commands.md) command on the immich-server.
|
||||
|
||||
### How can I **purge** data from Immich?
|
||||
|
||||
Data for Immich comes in two forms:
|
||||
|
||||
1. **Metadata** stored in a postgres database, persisted via the `pg_data` volume
|
||||
2. **Files** (originals, thumbs, profile, etc.), stored in the `UPLOAD_LOCATION` folder.
|
||||
|
||||
To remove the **Metadata** you can stop Immich and delete the volume.
|
||||
|
||||
```bash title="Remove Immich (containers and volumes)"
|
||||
docker-compose down -v
|
||||
```
|
||||
|
||||
After removing the the containers and volumes, the **Files** can be cleaned up (if necessary) from the `UPLOAD_LOCATION` by simply deleting an unwanted files or folders.
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"label": "Administration",
|
||||
"position": 4
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 57 KiB |