├── LICENSE
├── LICENSE-LPIPS
├── LICENSE-NVIDIA
├── LICENSE-ROSINALITY
├── README.md
├── __init__.py
├── carla_assets
├── center-building_part_11-12.npy
├── center-tree_part_1-1.npy
├── clear-afternoon_theme.npy
├── clear-evening_theme.npy
├── cloudy-evening_theme.npy
├── left-building_part_1-0.npy
├── right-building_part_1-3.npy
├── tree-left_part_1-0.npy
├── tree-right_part_1-3.npy
├── wet-afternoon_theme.npy
├── wet-clear-evening_theme.npy
└── wet-evening_theme.npy
├── carla_data_split.pkl
├── config.py
├── data
├── __init__.py
├── __pycache__
│ └── dataloader.cpython-36.pyc
├── carla
│ ├── __init__.py
│ └── carla_init_screens
│ │ ├── 0.png
│ │ ├── 10.png
│ │ └── 13.png
└── dataloader.py
├── distributed.py
├── frontend
├── demo.html
├── semanticui
│ ├── components
│ │ ├── accordion.css
│ │ ├── accordion.js
│ │ ├── accordion.min.css
│ │ ├── accordion.min.js
│ │ ├── ad.css
│ │ ├── ad.min.css
│ │ ├── api.js
│ │ ├── api.min.js
│ │ ├── breadcrumb.css
│ │ ├── breadcrumb.min.css
│ │ ├── button.css
│ │ ├── button.min.css
│ │ ├── card.css
│ │ ├── card.min.css
│ │ ├── checkbox.css
│ │ ├── checkbox.js
│ │ ├── checkbox.min.css
│ │ ├── checkbox.min.js
│ │ ├── colorize.js
│ │ ├── colorize.min.js
│ │ ├── comment.css
│ │ ├── comment.min.css
│ │ ├── container.css
│ │ ├── container.min.css
│ │ ├── dimmer.css
│ │ ├── dimmer.js
│ │ ├── dimmer.min.css
│ │ ├── dimmer.min.js
│ │ ├── divider.css
│ │ ├── divider.min.css
│ │ ├── dropdown.css
│ │ ├── dropdown.js
│ │ ├── dropdown.min.css
│ │ ├── dropdown.min.js
│ │ ├── embed.css
│ │ ├── embed.js
│ │ ├── embed.min.css
│ │ ├── embed.min.js
│ │ ├── feed.css
│ │ ├── feed.min.css
│ │ ├── flag.css
│ │ ├── flag.min.css
│ │ ├── form.css
│ │ ├── form.js
│ │ ├── form.min.css
│ │ ├── form.min.js
│ │ ├── grid.css
│ │ ├── grid.min.css
│ │ ├── header.css
│ │ ├── header.min.css
│ │ ├── icon.css
│ │ ├── icon.min.css
│ │ ├── image.css
│ │ ├── image.min.css
│ │ ├── input.css
│ │ ├── input.min.css
│ │ ├── item.css
│ │ ├── item.min.css
│ │ ├── label.css
│ │ ├── label.min.css
│ │ ├── list.css
│ │ ├── list.min.css
│ │ ├── loader.css
│ │ ├── loader.min.css
│ │ ├── menu.css
│ │ ├── menu.min.css
│ │ ├── message.css
│ │ ├── message.min.css
│ │ ├── modal.css
│ │ ├── modal.js
│ │ ├── modal.min.css
│ │ ├── modal.min.js
│ │ ├── nag.css
│ │ ├── nag.js
│ │ ├── nag.min.css
│ │ ├── nag.min.js
│ │ ├── placeholder.css
│ │ ├── placeholder.min.css
│ │ ├── popup.css
│ │ ├── popup.js
│ │ ├── popup.min.css
│ │ ├── popup.min.js
│ │ ├── progress.css
│ │ ├── progress.js
│ │ ├── progress.min.css
│ │ ├── progress.min.js
│ │ ├── rail.css
│ │ ├── rail.min.css
│ │ ├── rating.css
│ │ ├── rating.js
│ │ ├── rating.min.css
│ │ ├── rating.min.js
│ │ ├── reset.css
│ │ ├── reset.min.css
│ │ ├── reveal.css
│ │ ├── reveal.min.css
│ │ ├── search.css
│ │ ├── search.js
│ │ ├── search.min.css
│ │ ├── search.min.js
│ │ ├── segment.css
│ │ ├── segment.min.css
│ │ ├── shape.css
│ │ ├── shape.js
│ │ ├── shape.min.css
│ │ ├── shape.min.js
│ │ ├── sidebar.css
│ │ ├── sidebar.js
│ │ ├── sidebar.min.css
│ │ ├── sidebar.min.js
│ │ ├── site.css
│ │ ├── site.js
│ │ ├── site.min.css
│ │ ├── site.min.js
│ │ ├── state.js
│ │ ├── state.min.js
│ │ ├── statistic.css
│ │ ├── statistic.min.css
│ │ ├── step.css
│ │ ├── step.min.css
│ │ ├── sticky.css
│ │ ├── sticky.js
│ │ ├── sticky.min.css
│ │ ├── sticky.min.js
│ │ ├── tab.css
│ │ ├── tab.js
│ │ ├── tab.min.css
│ │ ├── tab.min.js
│ │ ├── table.css
│ │ ├── table.min.css
│ │ ├── transition.css
│ │ ├── transition.js
│ │ ├── transition.min.css
│ │ ├── transition.min.js
│ │ ├── video.css
│ │ ├── video.js
│ │ ├── video.min.css
│ │ ├── video.min.js
│ │ ├── visibility.js
│ │ ├── visibility.min.js
│ │ ├── visit.js
│ │ └── visit.min.js
│ ├── semantic.min.css
│ ├── semantic.min.js
│ └── themes
│ │ └── default
│ │ └── assets
│ │ └── fonts
│ │ ├── brand-icons.eot
│ │ ├── brand-icons.svg
│ │ ├── brand-icons.ttf
│ │ ├── brand-icons.woff
│ │ ├── brand-icons.woff2
│ │ ├── icons.eot
│ │ ├── icons.otf
│ │ ├── icons.svg
│ │ ├── icons.ttf
│ │ ├── icons.woff
│ │ ├── icons.woff2
│ │ ├── outline-icons.eot
│ │ ├── outline-icons.svg
│ │ ├── outline-icons.ttf
│ │ ├── outline-icons.woff
│ │ └── outline-icons.woff2
└── wheel2.png
├── latent_decoder_model
├── .gitignore
├── Dockerfile
├── LICENSE-NVIDIA
├── LICENSE-ROSINALITY
├── __init__.py
├── dataset.py
├── distributed.py
├── docker_build.sh
├── lpips
│ ├── LICENSE-LPIPS
│ ├── __init__.py
│ ├── base_model.py
│ ├── dist_model.py
│ ├── networks_basic.py
│ ├── pretrained_networks.py
│ └── weights
│ │ ├── v0.0
│ │ ├── alex.pth
│ │ ├── squeeze.pth
│ │ └── vgg.pth
│ │ └── v0.1
│ │ ├── alex.pth
│ │ ├── squeeze.pth
│ │ └── vgg.pth
├── main.py
├── model
│ ├── __init__.py
│ ├── model.py
│ └── operations.py
├── op
│ ├── __init__.py
│ ├── fused_act.py
│ ├── fused_bias_act.cpp
│ ├── fused_bias_act_kernel.cu
│ ├── upfirdn2d.cpp
│ ├── upfirdn2d.py
│ └── upfirdn2d_kernel.cu
├── projector_z.py
└── scripts
│ ├── encode.sh
│ └── train.sh
├── main_parallel.py
├── requirements.txt
├── scripts
├── __init__.py
├── play
│ └── server.sh
└── train.sh
├── server.py
├── simulator_model
├── __init__.py
├── discriminator.py
├── dynamics_engine.py
├── layers.py
└── model_utils.py
├── trainer.py
├── utils.py
└── visual_utils.py
/LICENSE:
--------------------------------------------------------------------------------
1 | NVIDIA Source Code License for DriveGAN
2 |
3 | 1. Definitions
4 |
5 | “Licensor” means any person or entity that distributes its Work.
6 | “Software” means the original work of authorship made available under this License.
7 | “Work” means the Software and any additions to or derivative works of the Software that are made available under this License.
8 | The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the meaning as provided under U.S. copyright law; provided, however, that for the purposes of this License, derivative works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work.
9 | Works, including the Software, are “made available” under this License by including in or with the Work either (a) a copyright notice referencing the applicability of this License to the Work, or (b) a copy of this License.
10 |
11 | 2. License Grant
12 |
13 | 2.1 Copyright Grant. Subject to the terms and conditions of this License, each Licensor grants to you a perpetual, worldwide, non-exclusive, royalty-free, copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense and distribute its Work and any resulting derivative works in any form.
14 |
15 | 3. Limitations
16 |
17 | 3.1 Redistribution. You may reproduce or distribute the Work only if (a) you do so under this License, (b) you include a complete copy of this License with your distribution, and (c) you retain without modification any copyright, patent, trademark, or attribution notices that are present in the Work.
18 |
19 | 3.2 Derivative Works. You may specify that additional or different terms apply to the use, reproduction, and distribution of your derivative works of the Work (“Your Terms”) only if (a) Your Terms provide that the use limitation in Section 3.3 applies to your derivative works, and (b) you identify the specific derivative works that are subject to Your Terms. Notwithstanding Your Terms, this License (including the redistribution requirements in Section 3.1) will continue to apply to the Work itself.
20 |
21 | 3.3 Use Limitation. The Work and any derivative works thereof only may be used or intended for use non-commercially. Notwithstanding the foregoing, NVIDIA and its affiliates may use the Work and any derivative works commercially. As used herein, “non-commercially” means for research or evaluation purposes only.
22 |
23 | 3.4 Patent Claims. If you bring or threaten to bring a patent claim against any Licensor (including any claim, cross-claim or counterclaim in a lawsuit) to enforce any patents that you allege are infringed by any Work, then your rights under this License from such Licensor (including the grant in Section 2.1) will terminate immediately.
24 |
25 | 3.5 Trademarks. This License does not grant any rights to use any Licensor’s or its affiliates’ names, logos, or trademarks, except as necessary to reproduce the notices described in this License.
26 |
27 | 3.6 Termination. If you violate any term of this License, then your rights under this License (including the grant in Section 2.1) will terminate immediately.
28 |
29 | 4. Disclaimer of Warranty.
30 |
31 | THE WORK IS PROVIDED “AS IS” WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OR CONDITIONS OF
32 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT. YOU BEAR THE RISK OF UNDERTAKING ANY ACTIVITIES UNDER THIS LICENSE.
33 |
34 | 5. Limitation of Liability.
35 |
36 | EXCEPT AS PROHIBITED BY APPLICABLE LAW, IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE SHALL ANY LICENSOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATED TO THIS LICENSE, THE USE OR INABILITY TO USE THE WORK (INCLUDING BUT NOT LIMITED TO LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOST PROFITS OR DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY OTHER COMM ERCIAL DAMAGES OR LOSSES), EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
37 |
--------------------------------------------------------------------------------
/LICENSE-LPIPS:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018, Richard Zhang, Phillip Isola, Alexei A. Efros, Eli Shechtman, Oliver Wang
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 |
25 |
--------------------------------------------------------------------------------
/LICENSE-NVIDIA:
--------------------------------------------------------------------------------
1 | Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
2 |
3 |
4 | Nvidia Source Code License-NC
5 |
6 | =======================================================================
7 |
8 | 1. Definitions
9 |
10 | "Licensor" means any person or entity that distributes its Work.
11 |
12 | "Software" means the original work of authorship made available under
13 | this License.
14 |
15 | "Work" means the Software and any additions to or derivative works of
16 | the Software that are made available under this License.
17 |
18 | "Nvidia Processors" means any central processing unit (CPU), graphics
19 | processing unit (GPU), field-programmable gate array (FPGA),
20 | application-specific integrated circuit (ASIC) or any combination
21 | thereof designed, made, sold, or provided by Nvidia or its affiliates.
22 |
23 | The terms "reproduce," "reproduction," "derivative works," and
24 | "distribution" have the meaning as provided under U.S. copyright law;
25 | provided, however, that for the purposes of this License, derivative
26 | works shall not include works that remain separable from, or merely
27 | link (or bind by name) to the interfaces of, the Work.
28 |
29 | Works, including the Software, are "made available" under this License
30 | by including in or with the Work either (a) a copyright notice
31 | referencing the applicability of this License to the Work, or (b) a
32 | copy of this License.
33 |
34 | 2. License Grants
35 |
36 | 2.1 Copyright Grant. Subject to the terms and conditions of this
37 | License, each Licensor grants to you a perpetual, worldwide,
38 | non-exclusive, royalty-free, copyright license to reproduce,
39 | prepare derivative works of, publicly display, publicly perform,
40 | sublicense and distribute its Work and any resulting derivative
41 | works in any form.
42 |
43 | 3. Limitations
44 |
45 | 3.1 Redistribution. You may reproduce or distribute the Work only
46 | if (a) you do so under this License, (b) you include a complete
47 | copy of this License with your distribution, and (c) you retain
48 | without modification any copyright, patent, trademark, or
49 | attribution notices that are present in the Work.
50 |
51 | 3.2 Derivative Works. You may specify that additional or different
52 | terms apply to the use, reproduction, and distribution of your
53 | derivative works of the Work ("Your Terms") only if (a) Your Terms
54 | provide that the use limitation in Section 3.3 applies to your
55 | derivative works, and (b) you identify the specific derivative
56 | works that are subject to Your Terms. Notwithstanding Your Terms,
57 | this License (including the redistribution requirements in Section
58 | 3.1) will continue to apply to the Work itself.
59 |
60 | 3.3 Use Limitation. The Work and any derivative works thereof only
61 | may be used or intended for use non-commercially. The Work or
62 | derivative works thereof may be used or intended for use by Nvidia
63 | or its affiliates commercially or non-commercially. As used herein,
64 | "non-commercially" means for research or evaluation purposes only.
65 |
66 | 3.4 Patent Claims. If you bring or threaten to bring a patent claim
67 | against any Licensor (including any claim, cross-claim or
68 | counterclaim in a lawsuit) to enforce any patents that you allege
69 | are infringed by any Work, then your rights under this License from
70 | such Licensor (including the grants in Sections 2.1 and 2.2) will
71 | terminate immediately.
72 |
73 | 3.5 Trademarks. This License does not grant any rights to use any
74 | Licensor's or its affiliates' names, logos, or trademarks, except
75 | as necessary to reproduce the notices described in this License.
76 |
77 | 3.6 Termination. If you violate any term of this License, then your
78 | rights under this License (including the grants in Sections 2.1 and
79 | 2.2) will terminate immediately.
80 |
81 | 4. Disclaimer of Warranty.
82 |
83 | THE WORK IS PROVIDED "AS IS" WITHOUT WARRANTIES OR CONDITIONS OF ANY
84 | KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OR CONDITIONS OF
85 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR
86 | NON-INFRINGEMENT. YOU BEAR THE RISK OF UNDERTAKING ANY ACTIVITIES UNDER
87 | THIS LICENSE.
88 |
89 | 5. Limitation of Liability.
90 |
91 | EXCEPT AS PROHIBITED BY APPLICABLE LAW, IN NO EVENT AND UNDER NO LEGAL
92 | THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE
93 | SHALL ANY LICENSOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT,
94 | INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
95 | OR RELATED TO THIS LICENSE, THE USE OR INABILITY TO USE THE WORK
96 | (INCLUDING BUT NOT LIMITED TO LOSS OF GOODWILL, BUSINESS INTERRUPTION,
97 | LOST PROFITS OR DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY OTHER
98 | COMMERCIAL DAMAGES OR LOSSES), EVEN IF THE LICENSOR HAS BEEN ADVISED OF
99 | THE POSSIBILITY OF SUCH DAMAGES.
100 |
101 | =======================================================================
102 |
--------------------------------------------------------------------------------
/LICENSE-ROSINALITY:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Kim Seonghyeon
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/__init__.py
--------------------------------------------------------------------------------
/carla_assets/center-building_part_11-12.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/center-building_part_11-12.npy
--------------------------------------------------------------------------------
/carla_assets/center-tree_part_1-1.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/center-tree_part_1-1.npy
--------------------------------------------------------------------------------
/carla_assets/clear-afternoon_theme.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/clear-afternoon_theme.npy
--------------------------------------------------------------------------------
/carla_assets/clear-evening_theme.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/clear-evening_theme.npy
--------------------------------------------------------------------------------
/carla_assets/cloudy-evening_theme.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/cloudy-evening_theme.npy
--------------------------------------------------------------------------------
/carla_assets/left-building_part_1-0.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/left-building_part_1-0.npy
--------------------------------------------------------------------------------
/carla_assets/right-building_part_1-3.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/right-building_part_1-3.npy
--------------------------------------------------------------------------------
/carla_assets/tree-left_part_1-0.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/tree-left_part_1-0.npy
--------------------------------------------------------------------------------
/carla_assets/tree-right_part_1-3.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/tree-right_part_1-3.npy
--------------------------------------------------------------------------------
/carla_assets/wet-afternoon_theme.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/wet-afternoon_theme.npy
--------------------------------------------------------------------------------
/carla_assets/wet-clear-evening_theme.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/wet-clear-evening_theme.npy
--------------------------------------------------------------------------------
/carla_assets/wet-evening_theme.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_assets/wet-evening_theme.npy
--------------------------------------------------------------------------------
/carla_data_split.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/carla_data_split.pkl
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | """
2 | Copyright (C) 2021 NVIDIA Corporation. All rights reserved.
3 | Licensed under the NVIDIA Source Code License. See LICENSE at the main github page.
4 | Authors: Seung Wook Kim, Jonah Philion, Antonio Torralba, Sanja Fidler
5 | """
6 |
7 | from optparse import OptionParser, OptionGroup
8 |
9 | def init_parser():
10 | '''
11 | '''
12 | usage = """
13 | Usage of this tool.
14 | $ python main.py [--train]
15 | """
16 | parser = OptionParser(usage=usage)
17 | parser.add_option('--play', action='store_true', default=False)
18 | parser.add_option('--port', action='store', type=int, default=8888,help='')
19 | parser.add_option('--log_dir', type=str, default='tmp')
20 | parser.add_option('--saved_model', type=str, default=None)
21 | parser.add_option('--saved_optim', type=str, default=None)
22 | parser.add_option('--data', action='store', type=str, default='pacman')
23 |
24 | train_param = OptionGroup(parser, 'training hyperparameters')
25 | train_param.add_option('--gpu', action='store', type=int, default=0)
26 | train_param.add_option('--local_rank', action='store', type=int, default=0)
27 | train_param.add_option('--num_gpu', action='store', type=int, default=1)
28 | train_param.add_option('--save_epoch', action='store', type=int, default=10)
29 | train_param.add_option('--eval_epoch', action='store', type=int, default=5)
30 |
31 | # optimizer
32 | train_param.add_option('--optimizer', action='store', type='choice', default='adam', choices=['adam', 'sgd', 'rmsprop'])
33 | train_param.add_option('--lrD', action='store', type=float, default=1e-4)
34 | train_param.add_option('--lrG_temporal', action='store', type=float, default=1e-4)
35 | train_param.add_option('--lrG_graphic', action='store', type=float, default=1e-4)
36 |
37 | # training hyperparam
38 | train_param.add_option('--standard_gan_loss', action='store_true', default=False)
39 | train_param.add_option('--warm_up', action='store', type=int, default=10)
40 | train_param.add_option('--bs', action='store', type=int, default=64, help='batch size')
41 | train_param.add_option('--nep', action='store', type=int, default=10000, help='max number of epochs')
42 | train_param.add_option('--img_size', action='store', type=int, default=128)
43 | train_param.add_option('--num_steps', action='store', type=int, default=15)
44 | train_param.add_option('--seed', action='store', type=int, default=10000, help='random seed')
45 | train_param.add_option('--disc_features', action='store_true', default=False)
46 | train_param.add_option('--warmup_decay_step', action='store', type=int, default=10000)
47 | train_param.add_option('--min_warmup', action='store', type=int, default=0)
48 |
49 | # losses
50 | train_param.add_option("--recon_loss", type=str, default="l2")
51 | train_param.add_option("--do_gan_loss", action="store_true", dest="gan_loss", default=True)
52 | train_param.add_option("--no_gan_loss", action="store_false", dest="gan_loss")
53 | train_param.add_option("--do_disc_features", action="store_true", dest="disc_features", default=True)
54 | train_param.add_option("--no_disc_features", action="store_false", dest="disc_features")
55 | train_param.add_option('--LAMBDA', action='store', type=float, default=1.0)
56 | train_param.add_option('--LAMBDA_temporal', action='store', type=float, default=10.0)
57 | train_param.add_option('--recon_loss_multiplier', action='store', type=float, default=0.05)
58 | train_param.add_option('--gen_content_loss_multiplier', action='store', type=float, default=1.0)
59 | train_param.add_option('--feature_loss_multiplier', action='store', type=float, default=10.0)
60 | train_param.add_option('--content_kl_beta', action='store', type=float, default=1.0)
61 | train_param.add_option('--theme_kl_beta', action='store', type=float, default=1.0)
62 | train_param.add_option('--style_kl_beta', action='store', type=float, default=1.0)
63 |
64 | # dynamics engine
65 | train_param.add_option("--do_input_detach", action="store_true", dest="input_detach", default=True)
66 | train_param.add_option("--no_input_detach", action="store_false", dest="input_detach")
67 | train_param.add_option('--hidden_dim', action='store', type=int, default=512)
68 | train_param.add_option('--width_mul', action='store', type=float, default=1.0)
69 | train_param.add_option('--conv_lstm_num_layer', action='store', type=int, default=2)
70 | train_param.add_option('--lstm_num_layer', action='store', type=int, default=1)
71 | train_param.add_option('--action_space', action='store', type=int, default=10)
72 | train_param.add_option('--disentangle_style', action='store_true', default=False)
73 | train_param.add_option('--continuous_action', action='store_true', default=False)
74 | train_param.add_option('--separate_holistic_style_dim', action='store', type=int, default=0)
75 | train_param.add_option('--convLSTM_hidden_dim', action='store', type=int, default=512)
76 | train_param.add_option('--spatial_dim', action='store', type=int, default=4)
77 |
78 | # discriminator
79 | train_param.add_option('--nfilterD', action='store', type=int, default=64)
80 | train_param.add_option("--do_temporal_hierarchy", action="store_true", dest="temporal_hierarchy", default=True)
81 | train_param.add_option("--no_temporal_hierarchy", action="store_false", dest="temporal_hierarchy")
82 | train_param.add_option('--nfilterD_temp', action='store', type=int, default=64)
83 | train_param.add_option('--config_temporal', type=int, default=18)
84 | train_param.add_option('--D_num_base_layer', type=int, default=3)
85 |
86 | # latent model
87 | train_param.add_option('--latent_decoder_model_path', type=str, default='')
88 | train_param.add_option('--latent_z_size', action='store', type=int, default=1024)
89 |
90 | # misc.
91 | train_param.add_option('--num_channel', action='store', type=int, default=3)
92 | train_param.add_option('--test', action='store_true', default=False)
93 | train_param.add_option('--initial_screen', type=str, default='')
94 | train_param.add_option('--recording_name', type=str, default='')
95 | train_param.add_option('--force_play_from_data', action='store_true', default=False)
96 |
97 | return parser
98 |
--------------------------------------------------------------------------------
/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/data/__init__.py
--------------------------------------------------------------------------------
/data/__pycache__/dataloader.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/data/__pycache__/dataloader.cpython-36.pyc
--------------------------------------------------------------------------------
/data/carla/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/data/carla/__init__.py
--------------------------------------------------------------------------------
/data/carla/carla_init_screens/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/data/carla/carla_init_screens/0.png
--------------------------------------------------------------------------------
/data/carla/carla_init_screens/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/data/carla/carla_init_screens/10.png
--------------------------------------------------------------------------------
/data/carla/carla_init_screens/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/data/carla/carla_init_screens/13.png
--------------------------------------------------------------------------------
/distributed.py:
--------------------------------------------------------------------------------
1 | """
2 | Copyright (C) 2021 NVIDIA Corporation. All rights reserved.
3 | Licensed under the NVIDIA Source Code License. See LICENSE at the main github page.
4 | Authors: Seung Wook Kim, Jonah Philion, Antonio Torralba, Sanja Fidler
5 | """
6 |
7 | '''
8 | This file is copied from https://github.com/rosinality/stylegan2-pytorch
9 |
10 | MIT License
11 |
12 | Copyright (c) 2019 Kim Seonghyeon
13 |
14 | Permission is hereby granted, free of charge, to any person obtaining a copy
15 | of this software and associated documentation files (the "Software"), to deal
16 | in the Software without restriction, including without limitation the rights
17 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18 | copies of the Software, and to permit persons to whom the Software is
19 | furnished to do so, subject to the following conditions:
20 |
21 | The above copyright notice and this permission notice shall be included in all
22 | copies or substantial portions of the Software.
23 |
24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 | SOFTWARE.
31 | '''
32 |
33 | import math
34 | import pickle
35 |
36 | import torch
37 | from torch import distributed as dist
38 | from torch.utils.data.sampler import Sampler
39 |
40 |
41 | def get_rank():
42 | if not dist.is_available():
43 | return 0
44 |
45 | if not dist.is_initialized():
46 | return 0
47 |
48 | return dist.get_rank()
49 |
50 |
51 | def synchronize():
52 | if not dist.is_available():
53 | return
54 |
55 | if not dist.is_initialized():
56 | return
57 |
58 | world_size = dist.get_world_size()
59 |
60 | if world_size == 1:
61 | return
62 |
63 | dist.barrier()
64 |
65 |
66 | def get_world_size():
67 | if not dist.is_available():
68 | return 1
69 |
70 | if not dist.is_initialized():
71 | return 1
72 |
73 | return dist.get_world_size()
74 |
75 |
76 | def reduce_sum(tensor):
77 | if not dist.is_available():
78 | return tensor
79 |
80 | if not dist.is_initialized():
81 | return tensor
82 |
83 | tensor = tensor.clone()
84 | dist.all_reduce(tensor, op=dist.ReduceOp.SUM)
85 |
86 | return tensor
87 |
88 |
89 | def gather_grad(params):
90 | world_size = get_world_size()
91 |
92 | if world_size == 1:
93 | return
94 |
95 | for param in params:
96 | if param.grad is not None:
97 | dist.all_reduce(param.grad.data, op=dist.ReduceOp.SUM)
98 | param.grad.data.div_(world_size)
99 |
100 |
101 | def all_gather(data):
102 | world_size = get_world_size()
103 |
104 | if world_size == 1:
105 | return [data]
106 |
107 | buffer = pickle.dumps(data)
108 | storage = torch.ByteStorage.from_buffer(buffer)
109 | tensor = torch.ByteTensor(storage).to('cuda')
110 |
111 | local_size = torch.IntTensor([tensor.numel()]).to('cuda')
112 | size_list = [torch.IntTensor([0]).to('cuda') for _ in range(world_size)]
113 | dist.all_gather(size_list, local_size)
114 | size_list = [int(size.item()) for size in size_list]
115 | max_size = max(size_list)
116 |
117 | tensor_list = []
118 | for _ in size_list:
119 | tensor_list.append(torch.ByteTensor(size=(max_size,)).to('cuda'))
120 |
121 | if local_size != max_size:
122 | padding = torch.ByteTensor(size=(max_size - local_size,)).to('cuda')
123 | tensor = torch.cat((tensor, padding), 0)
124 |
125 | dist.all_gather(tensor_list, tensor)
126 |
127 | data_list = []
128 |
129 | for size, tensor in zip(size_list, tensor_list):
130 | buffer = tensor.cpu().numpy().tobytes()[:size]
131 | data_list.append(pickle.loads(buffer))
132 |
133 | return data_list
134 |
135 |
136 | def reduce_loss_dict(loss_dict):
137 | world_size = get_world_size()
138 |
139 | if world_size < 2:
140 | return loss_dict
141 |
142 | with torch.no_grad():
143 | keys = []
144 | losses = []
145 |
146 | for k in sorted(loss_dict.keys()):
147 | keys.append(k)
148 | losses.append(loss_dict[k])
149 |
150 | losses = torch.stack(losses, 0)
151 | dist.reduce(losses, dst=0)
152 |
153 | if dist.get_rank() == 0:
154 | losses /= world_size
155 |
156 | reduced_losses = {k: v for k, v in zip(keys, losses)}
157 |
158 | return reduced_losses
159 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/ad.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Ad
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Copyright 2013 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 |
12 |
13 | /*******************************
14 | Advertisement
15 | *******************************/
16 |
17 | .ui.ad {
18 | display: block;
19 | overflow: hidden;
20 | margin: 1em 0em;
21 | }
22 | .ui.ad:first-child {
23 | margin: 0em;
24 | }
25 | .ui.ad:last-child {
26 | margin: 0em;
27 | }
28 | .ui.ad iframe {
29 | margin: 0em;
30 | padding: 0em;
31 | border: none;
32 | overflow: hidden;
33 | }
34 |
35 | /*--------------
36 | Common
37 | ---------------*/
38 |
39 |
40 | /* Leaderboard */
41 | .ui.leaderboard.ad {
42 | width: 728px;
43 | height: 90px;
44 | }
45 |
46 | /* Medium Rectangle */
47 | .ui[class*="medium rectangle"].ad {
48 | width: 300px;
49 | height: 250px;
50 | }
51 |
52 | /* Large Rectangle */
53 | .ui[class*="large rectangle"].ad {
54 | width: 336px;
55 | height: 280px;
56 | }
57 |
58 | /* Half Page */
59 | .ui[class*="half page"].ad {
60 | width: 300px;
61 | height: 600px;
62 | }
63 |
64 | /*--------------
65 | Square
66 | ---------------*/
67 |
68 |
69 | /* Square */
70 | .ui.square.ad {
71 | width: 250px;
72 | height: 250px;
73 | }
74 |
75 | /* Small Square */
76 | .ui[class*="small square"].ad {
77 | width: 200px;
78 | height: 200px;
79 | }
80 |
81 | /*--------------
82 | Rectangle
83 | ---------------*/
84 |
85 |
86 | /* Small Rectangle */
87 | .ui[class*="small rectangle"].ad {
88 | width: 180px;
89 | height: 150px;
90 | }
91 |
92 | /* Vertical Rectangle */
93 | .ui[class*="vertical rectangle"].ad {
94 | width: 240px;
95 | height: 400px;
96 | }
97 |
98 | /*--------------
99 | Button
100 | ---------------*/
101 |
102 | .ui.button.ad {
103 | width: 120px;
104 | height: 90px;
105 | }
106 | .ui[class*="square button"].ad {
107 | width: 125px;
108 | height: 125px;
109 | }
110 | .ui[class*="small button"].ad {
111 | width: 120px;
112 | height: 60px;
113 | }
114 |
115 | /*--------------
116 | Skyscrapers
117 | ---------------*/
118 |
119 |
120 | /* Skyscraper */
121 | .ui.skyscraper.ad {
122 | width: 120px;
123 | height: 600px;
124 | }
125 |
126 | /* Wide Skyscraper */
127 | .ui[class*="wide skyscraper"].ad {
128 | width: 160px;
129 | }
130 |
131 | /*--------------
132 | Banners
133 | ---------------*/
134 |
135 |
136 | /* Banner */
137 | .ui.banner.ad {
138 | width: 468px;
139 | height: 60px;
140 | }
141 |
142 | /* Vertical Banner */
143 | .ui[class*="vertical banner"].ad {
144 | width: 120px;
145 | height: 240px;
146 | }
147 |
148 | /* Top Banner */
149 | .ui[class*="top banner"].ad {
150 | width: 930px;
151 | height: 180px;
152 | }
153 |
154 | /* Half Banner */
155 | .ui[class*="half banner"].ad {
156 | width: 234px;
157 | height: 60px;
158 | }
159 |
160 | /*--------------
161 | Boards
162 | ---------------*/
163 |
164 |
165 | /* Leaderboard */
166 | .ui[class*="large leaderboard"].ad {
167 | width: 970px;
168 | height: 90px;
169 | }
170 |
171 | /* Billboard */
172 | .ui.billboard.ad {
173 | width: 970px;
174 | height: 250px;
175 | }
176 |
177 | /*--------------
178 | Panorama
179 | ---------------*/
180 |
181 |
182 | /* Panorama */
183 | .ui.panorama.ad {
184 | width: 980px;
185 | height: 120px;
186 | }
187 |
188 | /*--------------
189 | Netboard
190 | ---------------*/
191 |
192 |
193 | /* Netboard */
194 | .ui.netboard.ad {
195 | width: 580px;
196 | height: 400px;
197 | }
198 |
199 | /*--------------
200 | Mobile
201 | ---------------*/
202 |
203 |
204 | /* Large Mobile Banner */
205 | .ui[class*="large mobile banner"].ad {
206 | width: 320px;
207 | height: 100px;
208 | }
209 |
210 | /* Mobile Leaderboard */
211 | .ui[class*="mobile leaderboard"].ad {
212 | width: 320px;
213 | height: 50px;
214 | }
215 |
216 |
217 | /*******************************
218 | Types
219 | *******************************/
220 |
221 |
222 | /* Mobile Sizes */
223 | .ui.mobile.ad {
224 | display: none;
225 | }
226 | @media only screen and (max-width: 767px) {
227 | .ui.mobile.ad {
228 | display: block;
229 | }
230 | }
231 |
232 |
233 | /*******************************
234 | Variations
235 | *******************************/
236 |
237 | .ui.centered.ad {
238 | margin-left: auto;
239 | margin-right: auto;
240 | }
241 | .ui.test.ad {
242 | position: relative;
243 | background: #545454;
244 | }
245 | .ui.test.ad:after {
246 | position: absolute;
247 | top: 50%;
248 | left: 50%;
249 | width: 100%;
250 | text-align: center;
251 | -webkit-transform: translateX(-50%) translateY(-50%);
252 | transform: translateX(-50%) translateY(-50%);
253 | content: 'Ad';
254 | color: #FFFFFF;
255 | font-size: 1em;
256 | font-weight: bold;
257 | }
258 | .ui.mobile.test.ad:after {
259 | font-size: 0.85714286em;
260 | }
261 | .ui.test.ad[data-text]:after {
262 | content: attr(data-text);
263 | }
264 |
265 |
266 | /*******************************
267 | Theme Overrides
268 | *******************************/
269 |
270 |
271 |
272 | /*******************************
273 | User Variable Overrides
274 | *******************************/
275 |
276 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/ad.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Ad
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Copyright 2013 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child{margin:0}.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small rectangle"].ad{width:180px;height:150px}.ui[class*="vertical rectangle"].ad{width:240px;height:400px}.ui.button.ad{width:120px;height:90px}.ui[class*="square button"].ad{width:125px;height:125px}.ui[class*="small button"].ad{width:120px;height:60px}.ui.skyscraper.ad{width:120px;height:600px}.ui[class*="wide skyscraper"].ad{width:160px}.ui.banner.ad{width:468px;height:60px}.ui[class*="vertical banner"].ad{width:120px;height:240px}.ui[class*="top banner"].ad{width:930px;height:180px}.ui[class*="half banner"].ad{width:234px;height:60px}.ui[class*="large leaderboard"].ad{width:970px;height:90px}.ui.billboard.ad{width:970px;height:250px}.ui.panorama.ad{width:980px;height:120px}.ui.netboard.ad{width:580px;height:400px}.ui[class*="large mobile banner"].ad{width:320px;height:100px}.ui[class*="mobile leaderboard"].ad{width:320px;height:50px}.ui.mobile.ad{display:none}@media only screen and (max-width:767px){.ui.mobile.ad{display:block}}.ui.centered.ad{margin-left:auto;margin-right:auto}.ui.test.ad{position:relative;background:#545454}.ui.test.ad:after{position:absolute;top:50%;left:50%;width:100%;text-align:center;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);content:'Ad';color:#fff;font-size:1em;font-weight:700}.ui.mobile.test.ad:after{font-size:.85714286em}.ui.test.ad[data-text]:after{content:attr(data-text)}
--------------------------------------------------------------------------------
/frontend/semanticui/components/breadcrumb.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Breadcrumb
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Breadcrumb
14 | *******************************/
15 |
16 | .ui.breadcrumb {
17 | line-height: 1;
18 | display: inline-block;
19 | margin: 0em 0em;
20 | vertical-align: middle;
21 | }
22 | .ui.breadcrumb:first-child {
23 | margin-top: 0em;
24 | }
25 | .ui.breadcrumb:last-child {
26 | margin-bottom: 0em;
27 | }
28 |
29 |
30 | /*******************************
31 | Content
32 | *******************************/
33 |
34 |
35 | /* Divider */
36 | .ui.breadcrumb .divider {
37 | display: inline-block;
38 | opacity: 0.7;
39 | margin: 0em 0.21428571rem 0em;
40 | font-size: 0.92857143em;
41 | color: rgba(0, 0, 0, 0.4);
42 | vertical-align: baseline;
43 | }
44 |
45 | /* Link */
46 | .ui.breadcrumb a {
47 | color: #4183C4;
48 | }
49 | .ui.breadcrumb a:hover {
50 | color: #1e70bf;
51 | }
52 |
53 | /* Icon Divider */
54 | .ui.breadcrumb .icon.divider {
55 | font-size: 0.85714286em;
56 | vertical-align: baseline;
57 | }
58 |
59 | /* Section */
60 | .ui.breadcrumb a.section {
61 | cursor: pointer;
62 | }
63 | .ui.breadcrumb .section {
64 | display: inline-block;
65 | margin: 0em;
66 | padding: 0em;
67 | }
68 |
69 | /* Loose Coupling */
70 | .ui.breadcrumb.segment {
71 | display: inline-block;
72 | padding: 0.78571429em 1em;
73 | }
74 |
75 |
76 | /*******************************
77 | States
78 | *******************************/
79 |
80 | .ui.breadcrumb .active.section {
81 | font-weight: bold;
82 | }
83 |
84 |
85 | /*******************************
86 | Variations
87 | *******************************/
88 |
89 | .ui.mini.breadcrumb {
90 | font-size: 0.78571429rem;
91 | }
92 | .ui.tiny.breadcrumb {
93 | font-size: 0.85714286rem;
94 | }
95 | .ui.small.breadcrumb {
96 | font-size: 0.92857143rem;
97 | }
98 | .ui.breadcrumb {
99 | font-size: 1rem;
100 | }
101 | .ui.large.breadcrumb {
102 | font-size: 1.14285714rem;
103 | }
104 | .ui.big.breadcrumb {
105 | font-size: 1.28571429rem;
106 | }
107 | .ui.huge.breadcrumb {
108 | font-size: 1.42857143rem;
109 | }
110 | .ui.massive.breadcrumb {
111 | font-size: 1.71428571rem;
112 | }
113 |
114 |
115 | /*******************************
116 | Theme Overrides
117 | *******************************/
118 |
119 |
120 |
121 | /*******************************
122 | Site Overrides
123 | *******************************/
124 |
125 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/breadcrumb.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Breadcrumb
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.breadcrumb{line-height:1;display:inline-block;margin:0 0;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.7;margin:0 .21428571rem 0;font-size:.92857143em;color:rgba(0,0,0,.4);vertical-align:baseline}.ui.breadcrumb a{color:#4183c4}.ui.breadcrumb a:hover{color:#1e70bf}.ui.breadcrumb .icon.divider{font-size:.85714286em;vertical-align:baseline}.ui.breadcrumb a.section{cursor:pointer}.ui.breadcrumb .section{display:inline-block;margin:0;padding:0}.ui.breadcrumb.segment{display:inline-block;padding:.78571429em 1em}.ui.breadcrumb .active.section{font-weight:700}.ui.mini.breadcrumb{font-size:.78571429rem}.ui.tiny.breadcrumb{font-size:.85714286rem}.ui.small.breadcrumb{font-size:.92857143rem}.ui.breadcrumb{font-size:1rem}.ui.large.breadcrumb{font-size:1.14285714rem}.ui.big.breadcrumb{font-size:1.28571429rem}.ui.huge.breadcrumb{font-size:1.42857143rem}.ui.massive.breadcrumb{font-size:1.71428571rem}
--------------------------------------------------------------------------------
/frontend/semanticui/components/colorize.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.0.0 - Colorize
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Copyright 2015 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | !function(e,n,i,t){"use strict";e.fn.colorize=function(n){var i=e.isPlainObject(n)?e.extend(!0,{},e.fn.colorize.settings,n):e.extend({},e.fn.colorize.settings),o=arguments||!1;return e(this).each(function(n){var a,r,c,s,d,g,u,l,m=e(this),f=e("")[0],h=e("")[0],p=e("")[0],v=new Image,w=i.colors,b=(i.paths,i.namespace),y=i.error,C=m.data("module-"+b);return l={checkPreconditions:function(){return l.debug("Checking pre-conditions"),!e.isPlainObject(w)||e.isEmptyObject(w)?(l.error(y.undefinedColors),!1):!0},async:function(e){i.async?setTimeout(e,0):e()},getMetadata:function(){l.debug("Grabbing metadata"),s=m.data("image")||i.image||t,d=m.data("name")||i.name||n,g=i.width||m.width(),u=i.height||m.height(),(0===g||0===u)&&l.error(y.undefinedSize)},initialize:function(){l.debug("Initializing with colors",w),l.checkPreconditions()&&l.async(function(){l.getMetadata(),l.canvas.create(),l.draw.image(function(){l.draw.colors(),l.canvas.merge()}),m.data("module-"+b,l)})},redraw:function(){l.debug("Redrawing image"),l.async(function(){l.canvas.clear(),l.draw.colors(),l.canvas.merge()})},change:{color:function(e,n){return l.debug("Changing color",e),w[e]===t?(l.error(y.missingColor),!1):(w[e]=n,void l.redraw())}},canvas:{create:function(){l.debug("Creating canvases"),f.width=g,f.height=u,h.width=g,h.height=u,p.width=g,p.height=u,a=f.getContext("2d"),r=h.getContext("2d"),c=p.getContext("2d"),m.append(f),a=m.children("canvas")[0].getContext("2d")},clear:function(e){l.debug("Clearing canvas"),c.fillStyle="#FFFFFF",c.fillRect(0,0,g,u)},merge:function(){return e.isFunction(a.blendOnto)?(a.putImageData(r.getImageData(0,0,g,u),0,0),void c.blendOnto(a,"multiply")):void l.error(y.missingPlugin)}},draw:{image:function(e){l.debug("Drawing image"),e=e||function(){},s?(v.src=s,v.onload=function(){r.drawImage(v,0,0),e()}):(l.error(y.noImage),e())},colors:function(){l.debug("Drawing color overlays",w),e.each(w,function(e,n){i.onDraw(c,d,e,n)})}},debug:function(e,n){i.debug&&(n!==t?console.info(i.name+": "+e,n):console.info(i.name+": "+e))},error:function(e){console.warn(i.name+": "+e)},invoke:function(n,o,a){var r;return a=a||Array.prototype.slice.call(arguments,2),"string"==typeof n&&C!==t&&(n=n.split("."),e.each(n,function(n,t){return e.isPlainObject(C[t])?(C=C[t],!0):e.isFunction(C[t])?(r=C[t],!0):(l.error(i.error.method),!1)})),e.isFunction(r)?r.apply(o,a):!1}},C!==t&&o?("invoke"==o[0]&&(o=Array.prototype.slice.call(o,1)),l.invoke(o[0],this,Array.prototype.slice.call(o,1))):void l.initialize()}),this},e.fn.colorize.settings={name:"Image Colorizer",debug:!0,namespace:"colorize",onDraw:function(e,n,i,t){},async:!0,colors:{},metadata:{image:"image",name:"name"},error:{noImage:"No tracing image specified",undefinedColors:"No default colors specified.",missingColor:"Attempted to change color that does not exist",missingPlugin:"Blend onto plug-in must be included",undefinedHeight:"The width or height of image canvas could not be automatically determined. Please specify a height."}}}(jQuery,window,document);
--------------------------------------------------------------------------------
/frontend/semanticui/components/comment.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Comment
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Standard
14 | *******************************/
15 |
16 |
17 | /*--------------
18 | Comments
19 | ---------------*/
20 |
21 | .ui.comments {
22 | margin: 1.5em 0em;
23 | max-width: 650px;
24 | }
25 | .ui.comments:first-child {
26 | margin-top: 0em;
27 | }
28 | .ui.comments:last-child {
29 | margin-bottom: 0em;
30 | }
31 |
32 | /*--------------
33 | Comment
34 | ---------------*/
35 |
36 | .ui.comments .comment {
37 | position: relative;
38 | background: none;
39 | margin: 0.5em 0em 0em;
40 | padding: 0.5em 0em 0em;
41 | border: none;
42 | border-top: none;
43 | line-height: 1.2;
44 | }
45 | .ui.comments .comment:first-child {
46 | margin-top: 0em;
47 | padding-top: 0em;
48 | }
49 |
50 | /*--------------------
51 | Nested Comments
52 | ---------------------*/
53 |
54 | .ui.comments .comment .comments {
55 | margin: 0em 0em 0.5em 0.5em;
56 | padding: 1em 0em 1em 1em;
57 | }
58 | .ui.comments .comment .comments:before {
59 | position: absolute;
60 | top: 0px;
61 | left: 0px;
62 | }
63 | .ui.comments .comment .comments .comment {
64 | border: none;
65 | border-top: none;
66 | background: none;
67 | }
68 |
69 | /*--------------
70 | Avatar
71 | ---------------*/
72 |
73 | .ui.comments .comment .avatar {
74 | display: block;
75 | width: 2.5em;
76 | height: auto;
77 | float: left;
78 | margin: 0.2em 0em 0em;
79 | }
80 | .ui.comments .comment img.avatar,
81 | .ui.comments .comment .avatar img {
82 | display: block;
83 | margin: 0em auto;
84 | width: 100%;
85 | height: 100%;
86 | border-radius: 0.25rem;
87 | }
88 |
89 | /*--------------
90 | Content
91 | ---------------*/
92 |
93 | .ui.comments .comment > .content {
94 | display: block;
95 | }
96 |
97 | /* If there is an avatar move content over */
98 | .ui.comments .comment > .avatar ~ .content {
99 | margin-left: 3.5em;
100 | }
101 |
102 | /*--------------
103 | Author
104 | ---------------*/
105 |
106 | .ui.comments .comment .author {
107 | font-size: 1em;
108 | color: rgba(0, 0, 0, 0.87);
109 | font-weight: bold;
110 | }
111 | .ui.comments .comment a.author {
112 | cursor: pointer;
113 | }
114 | .ui.comments .comment a.author:hover {
115 | color: #1e70bf;
116 | }
117 |
118 | /*--------------
119 | Metadata
120 | ---------------*/
121 |
122 | .ui.comments .comment .metadata {
123 | display: inline-block;
124 | margin-left: 0.5em;
125 | color: rgba(0, 0, 0, 0.4);
126 | font-size: 0.875em;
127 | }
128 | .ui.comments .comment .metadata > * {
129 | display: inline-block;
130 | margin: 0em 0.5em 0em 0em;
131 | }
132 | .ui.comments .comment .metadata > :last-child {
133 | margin-right: 0em;
134 | }
135 |
136 | /*--------------------
137 | Comment Text
138 | ---------------------*/
139 |
140 | .ui.comments .comment .text {
141 | margin: 0.25em 0em 0.5em;
142 | font-size: 1em;
143 | word-wrap: break-word;
144 | color: rgba(0, 0, 0, 0.87);
145 | line-height: 1.3;
146 | }
147 |
148 | /*--------------------
149 | User Actions
150 | ---------------------*/
151 |
152 | .ui.comments .comment .actions {
153 | font-size: 0.875em;
154 | }
155 | .ui.comments .comment .actions a {
156 | cursor: pointer;
157 | display: inline-block;
158 | margin: 0em 0.75em 0em 0em;
159 | color: rgba(0, 0, 0, 0.4);
160 | }
161 | .ui.comments .comment .actions a:last-child {
162 | margin-right: 0em;
163 | }
164 | .ui.comments .comment .actions a.active,
165 | .ui.comments .comment .actions a:hover {
166 | color: rgba(0, 0, 0, 0.8);
167 | }
168 |
169 | /*--------------------
170 | Reply Form
171 | ---------------------*/
172 |
173 | .ui.comments > .reply.form {
174 | margin-top: 1em;
175 | }
176 | .ui.comments .comment .reply.form {
177 | width: 100%;
178 | margin-top: 1em;
179 | }
180 | .ui.comments .reply.form textarea {
181 | font-size: 1em;
182 | height: 12em;
183 | }
184 |
185 |
186 | /*******************************
187 | State
188 | *******************************/
189 |
190 | .ui.collapsed.comments,
191 | .ui.comments .collapsed.comments,
192 | .ui.comments .collapsed.comment {
193 | display: none;
194 | }
195 |
196 |
197 | /*******************************
198 | Variations
199 | *******************************/
200 |
201 |
202 | /*--------------------
203 | Threaded
204 | ---------------------*/
205 |
206 | .ui.threaded.comments .comment .comments {
207 | margin: -1.5em 0 -1em 1.25em;
208 | padding: 3em 0em 2em 2.25em;
209 | -webkit-box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);
210 | box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);
211 | }
212 |
213 | /*--------------------
214 | Minimal
215 | ---------------------*/
216 |
217 | .ui.minimal.comments .comment .actions {
218 | opacity: 0;
219 | position: absolute;
220 | top: 0px;
221 | right: 0px;
222 | left: auto;
223 | -webkit-transition: opacity 0.2s ease;
224 | transition: opacity 0.2s ease;
225 | -webkit-transition-delay: 0.1s;
226 | transition-delay: 0.1s;
227 | }
228 | .ui.minimal.comments .comment > .content:hover > .actions {
229 | opacity: 1;
230 | }
231 |
232 | /*-------------------
233 | Sizes
234 | --------------------*/
235 |
236 | .ui.mini.comments {
237 | font-size: 0.78571429rem;
238 | }
239 | .ui.tiny.comments {
240 | font-size: 0.85714286rem;
241 | }
242 | .ui.small.comments {
243 | font-size: 0.92857143rem;
244 | }
245 | .ui.comments {
246 | font-size: 1rem;
247 | }
248 | .ui.large.comments {
249 | font-size: 1.14285714rem;
250 | }
251 | .ui.big.comments {
252 | font-size: 1.28571429rem;
253 | }
254 | .ui.huge.comments {
255 | font-size: 1.42857143rem;
256 | }
257 | .ui.massive.comments {
258 | font-size: 1.71428571rem;
259 | }
260 |
261 |
262 | /*******************************
263 | Theme Overrides
264 | *******************************/
265 |
266 |
267 |
268 | /*******************************
269 | User Variable Overrides
270 | *******************************/
271 |
272 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/comment.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Comment
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .comments .comment{border:none;border-top:none;background:0 0}.ui.comments .comment .avatar{display:block;width:2.5em;height:auto;float:left;margin:.2em 0 0}.ui.comments .comment .avatar img,.ui.comments .comment img.avatar{display:block;margin:0 auto;width:100%;height:100%;border-radius:.25rem}.ui.comments .comment>.content{display:block}.ui.comments .comment>.avatar~.content{margin-left:3.5em}.ui.comments .comment .author{font-size:1em;color:rgba(0,0,0,.87);font-weight:700}.ui.comments .comment a.author{cursor:pointer}.ui.comments .comment a.author:hover{color:#1e70bf}.ui.comments .comment .metadata{display:inline-block;margin-left:.5em;color:rgba(0,0,0,.4);font-size:.875em}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .5em 0 0}.ui.comments .comment .metadata>:last-child{margin-right:0}.ui.comments .comment .text{margin:.25em 0 .5em;font-size:1em;word-wrap:break-word;color:rgba(0,0,0,.87);line-height:1.3}.ui.comments .comment .actions{font-size:.875em}.ui.comments .comment .actions a{cursor:pointer;display:inline-block;margin:0 .75em 0 0;color:rgba(0,0,0,.4)}.ui.comments .comment .actions a:last-child{margin-right:0}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:rgba(0,0,0,.8)}.ui.comments>.reply.form{margin-top:1em}.ui.comments .comment .reply.form{width:100%;margin-top:1em}.ui.comments .reply.form textarea{font-size:1em;height:12em}.ui.collapsed.comments,.ui.comments .collapsed.comment,.ui.comments .collapsed.comments{display:none}.ui.threaded.comments .comment .comments{margin:-1.5em 0 -1em 1.25em;padding:3em 0 2em 2.25em;-webkit-box-shadow:-1px 0 0 rgba(34,36,38,.15);box-shadow:-1px 0 0 rgba(34,36,38,.15)}.ui.minimal.comments .comment .actions{opacity:0;position:absolute;top:0;right:0;left:auto;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;-webkit-transition-delay:.1s;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.mini.comments{font-size:.78571429rem}.ui.tiny.comments{font-size:.85714286rem}.ui.small.comments{font-size:.92857143rem}.ui.comments{font-size:1rem}.ui.large.comments{font-size:1.14285714rem}.ui.big.comments{font-size:1.28571429rem}.ui.huge.comments{font-size:1.42857143rem}.ui.massive.comments{font-size:1.71428571rem}
--------------------------------------------------------------------------------
/frontend/semanticui/components/container.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Container
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Container
14 | *******************************/
15 |
16 |
17 | /* All Sizes */
18 | .ui.container {
19 | display: block;
20 | max-width: 100% !important;
21 | }
22 |
23 | /* Mobile */
24 | @media only screen and (max-width: 767px) {
25 | .ui.container {
26 | width: auto !important;
27 | margin-left: 1em !important;
28 | margin-right: 1em !important;
29 | }
30 | .ui.grid.container {
31 | width: auto !important;
32 | }
33 | .ui.relaxed.grid.container {
34 | width: auto !important;
35 | }
36 | .ui.very.relaxed.grid.container {
37 | width: auto !important;
38 | }
39 | }
40 |
41 | /* Tablet */
42 | @media only screen and (min-width: 768px) and (max-width: 991px) {
43 | .ui.container {
44 | width: 723px;
45 | margin-left: auto !important;
46 | margin-right: auto !important;
47 | }
48 | .ui.grid.container {
49 | width: calc( 723px + 2rem ) !important;
50 | }
51 | .ui.relaxed.grid.container {
52 | width: calc( 723px + 3rem ) !important;
53 | }
54 | .ui.very.relaxed.grid.container {
55 | width: calc( 723px + 5rem ) !important;
56 | }
57 | }
58 |
59 | /* Small Monitor */
60 | @media only screen and (min-width: 992px) and (max-width: 1199px) {
61 | .ui.container {
62 | width: 933px;
63 | margin-left: auto !important;
64 | margin-right: auto !important;
65 | }
66 | .ui.grid.container {
67 | width: calc( 933px + 2rem ) !important;
68 | }
69 | .ui.relaxed.grid.container {
70 | width: calc( 933px + 3rem ) !important;
71 | }
72 | .ui.very.relaxed.grid.container {
73 | width: calc( 933px + 5rem ) !important;
74 | }
75 | }
76 |
77 | /* Large Monitor */
78 | @media only screen and (min-width: 1200px) {
79 | .ui.container {
80 | width: 1127px;
81 | margin-left: auto !important;
82 | margin-right: auto !important;
83 | }
84 | .ui.grid.container {
85 | width: calc( 1127px + 2rem ) !important;
86 | }
87 | .ui.relaxed.grid.container {
88 | width: calc( 1127px + 3rem ) !important;
89 | }
90 | .ui.very.relaxed.grid.container {
91 | width: calc( 1127px + 5rem ) !important;
92 | }
93 | }
94 |
95 |
96 | /*******************************
97 | Types
98 | *******************************/
99 |
100 |
101 | /* Text Container */
102 | .ui.text.container {
103 | font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
104 | max-width: 700px !important;
105 | line-height: 1.5;
106 | }
107 | .ui.text.container {
108 | font-size: 1.14285714rem;
109 | }
110 |
111 | /* Fluid */
112 | .ui.fluid.container {
113 | width: 100%;
114 | }
115 |
116 |
117 | /*******************************
118 | Variations
119 | *******************************/
120 |
121 | .ui[class*="left aligned"].container {
122 | text-align: left;
123 | }
124 | .ui[class*="center aligned"].container {
125 | text-align: center;
126 | }
127 | .ui[class*="right aligned"].container {
128 | text-align: right;
129 | }
130 | .ui.justified.container {
131 | text-align: justify;
132 | -webkit-hyphens: auto;
133 | -ms-hyphens: auto;
134 | hyphens: auto;
135 | }
136 |
137 |
138 | /*******************************
139 | Theme Overrides
140 | *******************************/
141 |
142 |
143 |
144 | /*******************************
145 | Site Overrides
146 | *******************************/
147 |
148 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/container.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Container
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.container{display:block;max-width:100%!important}@media only screen and (max-width:767px){.ui.container{width:auto!important;margin-left:1em!important;margin-right:1em!important}.ui.grid.container{width:auto!important}.ui.relaxed.grid.container{width:auto!important}.ui.very.relaxed.grid.container{width:auto!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.container{width:723px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(723px + 2rem)!important}.ui.relaxed.grid.container{width:calc(723px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(723px + 5rem)!important}}@media only screen and (min-width:992px) and (max-width:1199px){.ui.container{width:933px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(933px + 2rem)!important}.ui.relaxed.grid.container{width:calc(933px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(933px + 5rem)!important}}@media only screen and (min-width:1200px){.ui.container{width:1127px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(1127px + 2rem)!important}.ui.relaxed.grid.container{width:calc(1127px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(1127px + 5rem)!important}}.ui.text.container{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;max-width:700px!important;line-height:1.5}.ui.text.container{font-size:1.14285714rem}.ui.fluid.container{width:100%}.ui[class*="left aligned"].container{text-align:left}.ui[class*="center aligned"].container{text-align:center}.ui[class*="right aligned"].container{text-align:right}.ui.justified.container{text-align:justify;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
--------------------------------------------------------------------------------
/frontend/semanticui/components/dimmer.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Dimmer
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.dimmable:not(body){position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;padding:1em;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:opacity;z-index:1000}.ui.dimmer>.content{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;color:#fff}.ui.segment>.ui.dimmer{border-radius:inherit!important}.ui.dimmer:not(.inverted)::-webkit-scrollbar-track{background:rgba(255,255,255,.1)}.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb{background:rgba(255,255,255,.25)}.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive{background:rgba(255,255,255,.15)}.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.35)}.animating.dimmable:not(body),.dimmed.dimmable:not(body){overflow:hidden}.dimmed.dimmable>.ui.animating.dimmer,.dimmed.dimmable>.ui.visible.dimmer,.ui.active.dimmer{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.dimmed.dimmable>.ui.animating.legacy.dimmer,.dimmed.dimmable>.ui.visible.legacy.dimmer,.ui.active.legacy.dimmer{display:block}.ui[class*="top aligned"].dimmer{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.ui[class*="bottom aligned"].dimmer{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.ui.page.dimmer{position:fixed;-webkit-transform-style:'';transform-style:'';-webkit-perspective:2000px;perspective:2000px;-webkit-transform-origin:center center;transform-origin:center center}body.animating.in.dimmable,body.dimmed.dimmable{overflow:hidden}body.dimmable>.dimmer{position:fixed}.blurring.dimmable>:not(.dimmer){-webkit-filter:blur(0) grayscale(0);filter:blur(0) grayscale(0);-webkit-transition:.8s -webkit-filter ease;transition:.8s -webkit-filter ease;transition:.8s filter ease;transition:.8s filter ease,.8s -webkit-filter ease}.blurring.dimmed.dimmable>:not(.dimmer){-webkit-filter:blur(5px) grayscale(.7);filter:blur(5px) grayscale(.7)}.blurring.dimmable>.dimmer{background-color:rgba(0,0,0,.6)}.blurring.dimmable>.inverted.dimmer{background-color:rgba(255,255,255,.6)}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.ui.inverted.dimmer{background-color:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content>*{color:#fff}.ui.simple.dimmer{display:block;overflow:hidden;opacity:1;width:0%;height:0%;z-index:-100;background-color:rgba(0,0,0,0)}.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background-color:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,0)}.dimmed.dimmable>.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,.85)}
--------------------------------------------------------------------------------
/frontend/semanticui/components/divider.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Divider
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:rgba(0,0,0,.85);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(255,255,255,.1)}.ui.grid>.column+.divider,.ui.grid>.row>.column+.divider{left:auto}.ui.horizontal.divider{display:table;white-space:nowrap;height:auto;margin:'';line-height:1;text-align:center}.ui.horizontal.divider:after,.ui.horizontal.divider:before{content:'';display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.horizontal.divider:before{background-position:right 1em top 50%}.ui.horizontal.divider:after{background-position:left 1em top 50%}.ui.vertical.divider{position:absolute;z-index:2;top:50%;left:50%;margin:0;padding:0;width:auto;height:50%;line-height:0;text-align:center;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ui.vertical.divider:after,.ui.vertical.divider:before{position:absolute;left:50%;content:'';z-index:3;border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(255,255,255,.1);width:0%;height:calc(100% - 1rem)}.ui.vertical.divider:before{top:-100%}.ui.vertical.divider:after{top:auto;bottom:0}@media only screen and (max-width:767px){.ui.grid .stackable.row .ui.vertical.divider,.ui.stackable.grid .ui.vertical.divider{display:table;white-space:nowrap;height:auto;margin:'';overflow:hidden;line-height:1;text-align:center;position:static;top:0;left:0;-webkit-transform:none;transform:none}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:before{position:static;left:0;border-left:none;border-right:none;content:'';display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:before{background-position:right 1em top 50%}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:after{background-position:left 1em top 50%}}.ui.divider>.icon{margin:0;font-size:1rem;height:1em;vertical-align:middle}.ui.hidden.divider{border-color:transparent!important}.ui.hidden.divider:after,.ui.hidden.divider:before{display:none}.ui.divider.inverted,.ui.horizontal.inverted.divider,.ui.vertical.inverted.divider{color:#fff}.ui.divider.inverted,.ui.divider.inverted:after,.ui.divider.inverted:before{border-top-color:rgba(34,36,38,.15)!important;border-left-color:rgba(34,36,38,.15)!important;border-bottom-color:rgba(255,255,255,.15)!important;border-right-color:rgba(255,255,255,.15)!important}.ui.fitted.divider{margin:0}.ui.clearing.divider{clear:both}.ui.section.divider{margin-top:2rem;margin-bottom:2rem}.ui.divider{font-size:1rem}.ui.horizontal.divider:after,.ui.horizontal.divider:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC)}@media only screen and (max-width:767px){.ui.grid .stackable.row .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC)}}
--------------------------------------------------------------------------------
/frontend/semanticui/components/embed.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Video
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Types
14 | *******************************/
15 |
16 | .ui.embed {
17 | position: relative;
18 | max-width: 100%;
19 | height: 0px;
20 | overflow: hidden;
21 | background: #DCDDDE;
22 | padding-bottom: 56.25%;
23 | }
24 |
25 | /*-----------------
26 | Embedded Content
27 | ------------------*/
28 |
29 | .ui.embed iframe,
30 | .ui.embed embed,
31 | .ui.embed object {
32 | position: absolute;
33 | border: none;
34 | width: 100%;
35 | height: 100%;
36 | top: 0px;
37 | left: 0px;
38 | margin: 0em;
39 | padding: 0em;
40 | }
41 |
42 | /*-----------------
43 | Embed
44 | ------------------*/
45 |
46 | .ui.embed > .embed {
47 | display: none;
48 | }
49 |
50 | /*--------------
51 | Placeholder
52 | ---------------*/
53 |
54 | .ui.embed > .placeholder {
55 | position: absolute;
56 | cursor: pointer;
57 | top: 0px;
58 | left: 0px;
59 | display: block;
60 | width: 100%;
61 | height: 100%;
62 | background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
63 | }
64 |
65 | /*--------------
66 | Icon
67 | ---------------*/
68 |
69 | .ui.embed > .icon {
70 | cursor: pointer;
71 | position: absolute;
72 | top: 0px;
73 | left: 0px;
74 | width: 100%;
75 | height: 100%;
76 | z-index: 2;
77 | }
78 | .ui.embed > .icon:after {
79 | position: absolute;
80 | top: 0%;
81 | left: 0%;
82 | width: 100%;
83 | height: 100%;
84 | z-index: 3;
85 | content: '';
86 | background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
87 | background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
88 | opacity: 0.5;
89 | -webkit-transition: opacity 0.5s ease;
90 | transition: opacity 0.5s ease;
91 | }
92 | .ui.embed > .icon:before {
93 | position: absolute;
94 | top: 50%;
95 | left: 50%;
96 | z-index: 4;
97 | -webkit-transform: translateX(-50%) translateY(-50%);
98 | transform: translateX(-50%) translateY(-50%);
99 | color: #FFFFFF;
100 | font-size: 6rem;
101 | text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);
102 | -webkit-transition: opacity 0.5s ease, color 0.5s ease;
103 | transition: opacity 0.5s ease, color 0.5s ease;
104 | z-index: 10;
105 | }
106 |
107 |
108 | /*******************************
109 | States
110 | *******************************/
111 |
112 |
113 | /*--------------
114 | Hover
115 | ---------------*/
116 |
117 | .ui.embed .icon:hover:after {
118 | background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
119 | background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
120 | opacity: 1;
121 | }
122 | .ui.embed .icon:hover:before {
123 | color: #FFFFFF;
124 | }
125 |
126 | /*--------------
127 | Active
128 | ---------------*/
129 |
130 | .ui.active.embed > .icon,
131 | .ui.active.embed > .placeholder {
132 | display: none;
133 | }
134 | .ui.active.embed > .embed {
135 | display: block;
136 | }
137 |
138 |
139 | /*******************************
140 | Video Overrides
141 | *******************************/
142 |
143 |
144 |
145 | /*******************************
146 | Site Overrides
147 | *******************************/
148 |
149 |
150 |
151 | /*******************************
152 | Variations
153 | *******************************/
154 |
155 | .ui.square.embed {
156 | padding-bottom: 100%;
157 | }
158 | .ui[class*="4:3"].embed {
159 | padding-bottom: 75%;
160 | }
161 | .ui[class*="16:9"].embed {
162 | padding-bottom: 56.25%;
163 | }
164 | .ui[class*="21:9"].embed {
165 | padding-bottom: 42.85714286%;
166 | }
167 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/embed.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Video
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.embed{position:relative;max-width:100%;height:0;overflow:hidden;background:#dcddde;padding-bottom:56.25%}.ui.embed embed,.ui.embed iframe,.ui.embed object{position:absolute;border:none;width:100%;height:100%;top:0;left:0;margin:0;padding:0}.ui.embed>.embed{display:none}.ui.embed>.placeholder{position:absolute;cursor:pointer;top:0;left:0;display:block;width:100%;height:100%;background-color:radial-gradient(transparent 45%,rgba(0,0,0,.3))}.ui.embed>.icon{cursor:pointer;position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.ui.embed>.icon:after{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;content:'';background:-webkit-radial-gradient(transparent 45%,rgba(0,0,0,.3));background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:.5;-webkit-transition:opacity .5s ease;transition:opacity .5s ease}.ui.embed>.icon:before{position:absolute;top:50%;left:50%;z-index:4;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:6rem;text-shadow:0 2px 10px rgba(34,36,38,.2);-webkit-transition:opacity .5s ease,color .5s ease;transition:opacity .5s ease,color .5s ease;z-index:10}.ui.embed .icon:hover:after{background:-webkit-radial-gradient(transparent 45%,rgba(0,0,0,.3));background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:1}.ui.embed .icon:hover:before{color:#fff}.ui.active.embed>.icon,.ui.active.embed>.placeholder{display:none}.ui.active.embed>.embed{display:block}.ui.square.embed{padding-bottom:100%}.ui[class*="4:3"].embed{padding-bottom:75%}.ui[class*="16:9"].embed{padding-bottom:56.25%}.ui[class*="21:9"].embed{padding-bottom:42.85714286%}
--------------------------------------------------------------------------------
/frontend/semanticui/components/feed.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Feed
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.feed{margin:1em 0}.ui.feed:first-child{margin-top:0}.ui.feed:last-child{margin-bottom:0}.ui.feed>.event{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;padding:.21428571rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:2.5em;height:auto;-ms-flex-item-align:stretch;align-self:stretch;text-align:left}.ui.feed>.event>.label .icon{opacity:1;font-size:1.5em;width:100%;padding:.25em;background:0 0;border:none;border-radius:none;color:rgba(0,0,0,.6)}.ui.feed>.event>.label img{width:100%;height:auto;border-radius:500rem}.ui.feed>.event>.label+.content{margin:.5em 0 .35714286em 1.14285714em}.ui.feed>.event>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-item-align:stretch;align-self:stretch;text-align:left;word-wrap:break-word}.ui.feed>.event:last-child>.content{padding-bottom:0}.ui.feed>.event>.content a{cursor:pointer}.ui.feed>.event>.content .date{margin:-.5rem 0 0;padding:0;font-weight:400;font-size:1em;font-style:normal;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .summary{margin:0;font-size:1em;font-weight:700;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .summary img{display:inline-block;width:auto;height:10em;margin:-.25em .25em 0 0;border-radius:.25em;vertical-align:middle}.ui.feed>.event>.content .user{display:inline-block;font-weight:700;margin-right:0;vertical-align:baseline}.ui.feed>.event>.content .user img{margin:-.25em .25em 0 0;width:auto;height:10em;vertical-align:middle}.ui.feed>.event>.content .summary>.date{display:inline-block;float:none;font-weight:400;font-size:.85714286em;font-style:normal;margin:0 0 0 .5em;padding:0;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .extra{margin:.5em 0 0;background:0 0;padding:0;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .extra.images img{display:inline-block;margin:0 .25em 0 0;width:6em}.ui.feed>.event>.content .extra.text{padding:0;border-left:none;font-size:1em;max-width:500px;line-height:1.4285em}.ui.feed>.event>.content .meta{display:inline-block;font-size:.85714286em;margin:.5em 0 0;background:0 0;border:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none;padding:0;color:rgba(0,0,0,.6)}.ui.feed>.event>.content .meta>*{position:relative;margin-left:.75em}.ui.feed>.event>.content .meta>:after{content:'';color:rgba(0,0,0,.2);top:0;left:-1em;opacity:1;position:absolute;vertical-align:top}.ui.feed>.event>.content .meta .like{color:'';-webkit-transition:.2s color ease;transition:.2s color ease}.ui.feed>.event>.content .meta .like:hover .icon{color:#ff2733}.ui.feed>.event>.content .meta .active.like .icon{color:#ef404a}.ui.feed>.event>.content .meta>:first-child{margin-left:0}.ui.feed>.event>.content .meta>:first-child::after{display:none}.ui.feed>.event>.content .meta a,.ui.feed>.event>.content .meta>.icon{cursor:pointer;opacity:1;color:rgba(0,0,0,.5);-webkit-transition:color .1s ease;transition:color .1s ease}.ui.feed>.event>.content .meta a:hover,.ui.feed>.event>.content .meta a:hover .icon,.ui.feed>.event>.content .meta>.icon:hover{color:rgba(0,0,0,.95)}.ui.small.feed{font-size:.92857143rem}.ui.feed{font-size:1rem}.ui.large.feed{font-size:1.14285714rem}
--------------------------------------------------------------------------------
/frontend/semanticui/components/image.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Image
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image img,.ui.image svg{display:block;max-width:100%;height:auto}.ui.hidden.image,.ui.hidden.images{display:none}.ui.hidden.transition.image,.ui.hidden.transition.images{display:block;visibility:hidden}.ui.images>.hidden.transition{display:inline-block;visibility:hidden}.ui.disabled.image,.ui.disabled.images{cursor:default;opacity:.45}.ui.inline.image,.ui.inline.image img,.ui.inline.image svg{display:inline-block}.ui.top.aligned.image,.ui.top.aligned.image img,.ui.top.aligned.image svg,.ui.top.aligned.images .image{display:inline-block;vertical-align:top}.ui.middle.aligned.image,.ui.middle.aligned.image img,.ui.middle.aligned.image svg,.ui.middle.aligned.images .image{display:inline-block;vertical-align:middle}.ui.bottom.aligned.image,.ui.bottom.aligned.image img,.ui.bottom.aligned.image svg,.ui.bottom.aligned.images .image{display:inline-block;vertical-align:bottom}.ui.rounded.image,.ui.rounded.image>*,.ui.rounded.images .image,.ui.rounded.images .image>*{border-radius:.3125em}.ui.bordered.image img,.ui.bordered.image svg,.ui.bordered.images .image,.ui.bordered.images img,.ui.bordered.images svg,img.ui.bordered.image{border:1px solid rgba(0,0,0,.1)}.ui.circular.image,.ui.circular.images{overflow:hidden}.ui.circular.image,.ui.circular.image>*,.ui.circular.images .image,.ui.circular.images .image>*{border-radius:500rem}.ui.fluid.image,.ui.fluid.image img,.ui.fluid.image svg,.ui.fluid.images,.ui.fluid.images img,.ui.fluid.images svg{display:block;width:100%;height:auto}.ui.avatar.image,.ui.avatar.image img,.ui.avatar.image svg,.ui.avatar.images .image,.ui.avatar.images img,.ui.avatar.images svg{margin-right:.25em;display:inline-block;width:2em;height:2em;border-radius:500rem}.ui.spaced.image{display:inline-block!important;margin-left:.5em;margin-right:.5em}.ui[class*="left spaced"].image{margin-left:.5em;margin-right:0}.ui[class*="right spaced"].image{margin-left:0;margin-right:.5em}.ui.floated.image,.ui.floated.images{float:left;margin-right:1em;margin-bottom:1em}.ui.right.floated.image,.ui.right.floated.images{float:right;margin-right:0;margin-bottom:1em;margin-left:1em}.ui.floated.image:last-child,.ui.floated.images:last-child{margin-bottom:0}.ui.centered.image,.ui.centered.images{margin-left:auto;margin-right:auto}.ui.mini.image,.ui.mini.images .image,.ui.mini.images img,.ui.mini.images svg{width:35px;height:auto;font-size:.78571429rem}.ui.tiny.image,.ui.tiny.images .image,.ui.tiny.images img,.ui.tiny.images svg{width:80px;height:auto;font-size:.85714286rem}.ui.small.image,.ui.small.images .image,.ui.small.images img,.ui.small.images svg{width:150px;height:auto;font-size:.92857143rem}.ui.medium.image,.ui.medium.images .image,.ui.medium.images img,.ui.medium.images svg{width:300px;height:auto;font-size:1rem}.ui.large.image,.ui.large.images .image,.ui.large.images img,.ui.large.images svg{width:450px;height:auto;font-size:1.14285714rem}.ui.big.image,.ui.big.images .image,.ui.big.images img,.ui.big.images svg{width:600px;height:auto;font-size:1.28571429rem}.ui.huge.image,.ui.huge.images .image,.ui.huge.images img,.ui.huge.images svg{width:800px;height:auto;font-size:1.42857143rem}.ui.massive.image,.ui.massive.images .image,.ui.massive.images img,.ui.massive.images svg{width:960px;height:auto;font-size:1.71428571rem}.ui.images{font-size:0;margin:0 -.25rem 0}.ui.images .image,.ui.images>img,.ui.images>svg{display:inline-block;margin:0 .25rem .5rem}
--------------------------------------------------------------------------------
/frontend/semanticui/components/item.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Item
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.items>.item{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:-webkit-box-shadow .1s ease;transition:-webkit-box-shadow .1s ease;transition:box-shadow .1s ease;transition:box-shadow .1s ease,-webkit-box-shadow .1s ease;z-index:''}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item:first-child{margin-top:0}.ui.items>.item:last-child{margin-bottom:0}.ui.items>.item>.image{position:relative;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:block;float:none;margin:0;padding:0;max-height:'';-ms-flex-item-align:top;align-self:top}.ui.items>.item>.image>img{display:block;width:100%;height:auto;border-radius:.125rem;border:none}.ui.items>.item>.image:only-child>img{border-radius:0}.ui.items>.item>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;background:0 0;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;font-size:1em;border:none;border-radius:0}.ui.items>.item>.content:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image+.content{min-width:0;width:auto;display:block;margin-left:0;-ms-flex-item-align:top;align-self:top;padding-left:1.5em}.ui.items>.item>.content>.header{display:inline-block;margin:-.21425em 0 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;color:rgba(0,0,0,.85)}.ui.items>.item>.content>.header:not(.ui){font-size:1.28571429em}.ui.items>.item [class*="left floated"]{float:left}.ui.items>.item [class*="right floated"]{float:right}.ui.items>.item .content img{-ms-flex-item-align:middle;align-self:middle;width:''}.ui.items>.item .avatar img,.ui.items>.item img.avatar{width:'';height:'';border-radius:500rem}.ui.items>.item>.content>.description{margin-top:.6em;max-width:auto;font-size:1em;line-height:1.4285em;color:rgba(0,0,0,.87)}.ui.items>.item>.content p{margin:0 0 .5em}.ui.items>.item>.content p:last-child{margin-bottom:0}.ui.items>.item .meta{margin:.5em 0 .5em;font-size:1em;line-height:1em;color:rgba(0,0,0,.6)}.ui.items>.item .meta *{margin-right:.3em}.ui.items>.item .meta :last-child{margin-right:0}.ui.items>.item .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.items>.item>.content a:not(.ui){color:'';-webkit-transition:color .1s ease;transition:color .1s ease}.ui.items>.item>.content a:not(.ui):hover{color:''}.ui.items>.item>.content>a.header{color:rgba(0,0,0,.85)}.ui.items>.item>.content>a.header:hover{color:#1e70bf}.ui.items>.item .meta>a:not(.ui){color:rgba(0,0,0,.4)}.ui.items>.item .meta>a:not(.ui):hover{color:rgba(0,0,0,.87)}.ui.items>.item>.content .favorite.icon{cursor:pointer;opacity:.75;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.items>.item>.content .favorite.icon:hover{opacity:1;color:#ffb70a}.ui.items>.item>.content .active.favorite.icon{color:#ffe623}.ui.items>.item>.content .like.icon{cursor:pointer;opacity:.75;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.items>.item>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.items>.item>.content .active.like.icon{color:#ff2733}.ui.items>.item .extra{display:block;position:relative;background:0 0;margin:.5rem 0 0;width:100%;padding:0 0 0;top:0;left:0;color:rgba(0,0,0,.4);-webkit-box-shadow:none;box-shadow:none;-webkit-transition:color .1s ease;transition:color .1s ease;border-top:none}.ui.items>.item .extra>*{margin:.25rem .5rem .25rem 0}.ui.items>.item .extra>[class*="right floated"]{margin:.25rem 0 .25rem .5rem}.ui.items>.item .extra:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image:not(.ui){width:175px}@media only screen and (min-width:768px) and (max-width:991px){.ui.items>.item{margin:1em 0}.ui.items>.item>.image:not(.ui){width:150px}.ui.items>.item>.image+.content{display:block;padding:0 0 0 1em}}@media only screen and (max-width:767px){.ui.items:not(.unstackable)>.item{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:2em 0}.ui.items:not(.unstackable)>.item>.image{display:block;margin-left:auto;margin-right:auto}.ui.items:not(.unstackable)>.item>.image,.ui.items:not(.unstackable)>.item>.image>img{max-width:100%!important;width:auto!important;max-height:250px!important}.ui.items:not(.unstackable)>.item>.image+.content{display:block;padding:1.5em 0 0}}.ui.items>.item>.image+[class*="top aligned"].content{-ms-flex-item-align:start;align-self:flex-start}.ui.items>.item>.image+[class*="middle aligned"].content{-ms-flex-item-align:center;align-self:center}.ui.items>.item>.image+[class*="bottom aligned"].content{-ms-flex-item-align:end;align-self:flex-end}.ui.relaxed.items>.item{margin:1.5em 0}.ui[class*="very relaxed"].items>.item{margin:2em 0}.ui.divided.items>.item{border-top:1px solid rgba(34,36,38,.15);margin:0;padding:1em 0}.ui.divided.items>.item:first-child{border-top:none;margin-top:0!important;padding-top:0!important}.ui.divided.items>.item:last-child{margin-bottom:0!important;padding-bottom:0!important}.ui.relaxed.divided.items>.item{margin:0;padding:1.5em 0}.ui[class*="very relaxed"].divided.items>.item{margin:0;padding:2em 0}.ui.items a.item:hover,.ui.link.items>.item:hover{cursor:pointer}.ui.items a.item:hover .content .header,.ui.link.items>.item:hover .content .header{color:#1e70bf}.ui.items>.item{font-size:1em}@media only screen and (max-width:767px){.ui.unstackable.items>.item>.image,.ui.unstackable.items>.item>.image>img{width:125px!important}}
--------------------------------------------------------------------------------
/frontend/semanticui/components/loader.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Loader
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent}@-webkit-keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.mini.loader:after,.ui.mini.loader:before{width:1rem;height:1rem;margin:0 0 0 -.5rem}.ui.tiny.loader:after,.ui.tiny.loader:before{width:1.14285714rem;height:1.14285714rem;margin:0 0 0 -.57142857rem}.ui.small.loader:after,.ui.small.loader:before{width:1.71428571rem;height:1.71428571rem;margin:0 0 0 -.85714286rem}.ui.loader:after,.ui.loader:before{width:2.28571429rem;height:2.28571429rem;margin:0 0 0 -1.14285714rem}.ui.large.loader:after,.ui.large.loader:before{width:3.42857143rem;height:3.42857143rem;margin:0 0 0 -1.71428571rem}.ui.big.loader:after,.ui.big.loader:before{width:3.71428571rem;height:3.71428571rem;margin:0 0 0 -1.85714286rem}.ui.huge.loader:after,.ui.huge.loader:before{width:4.14285714rem;height:4.14285714rem;margin:0 0 0 -2.07142857rem}.ui.massive.loader:after,.ui.massive.loader:before{width:4.57142857rem;height:4.57142857rem;margin:0 0 0 -2.28571429rem}.ui.dimmer .loader{display:block}.ui.dimmer .ui.loader{color:rgba(255,255,255,.9)}.ui.dimmer .ui.loader:before{border-color:rgba(255,255,255,.15)}.ui.dimmer .ui.loader:after{border-color:#fff transparent transparent}.ui.inverted.dimmer .ui.loader{color:rgba(0,0,0,.87)}.ui.inverted.dimmer .ui.loader:before{border-color:rgba(0,0,0,.1)}.ui.inverted.dimmer .ui.loader:after{border-color:#767676 transparent transparent}.ui.text.loader{width:auto!important;height:auto!important;text-align:center;font-style:normal}.ui.indeterminate.loader:after{animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.inverted.dimmer .ui.mini.loader,.ui.mini.loader{width:1rem;height:1rem;font-size:.78571429em}.ui.inverted.dimmer .ui.tiny.loader,.ui.tiny.loader{width:1.14285714rem;height:1.14285714rem;font-size:.85714286em}.ui.inverted.dimmer .ui.small.loader,.ui.small.loader{width:1.71428571rem;height:1.71428571rem;font-size:.92857143em}.ui.inverted.dimmer .ui.loader,.ui.loader{width:2.28571429rem;height:2.28571429rem;font-size:1em}.ui.inverted.dimmer .ui.large.loader,.ui.large.loader{width:3.42857143rem;height:3.42857143rem;font-size:1.14285714em}.ui.big.loader,.ui.inverted.dimmer .ui.big.loader{width:3.71428571rem;height:3.71428571rem;font-size:1.28571429em}.ui.huge.loader,.ui.inverted.dimmer .ui.huge.loader{width:4.14285714rem;height:4.14285714rem;font-size:1.42857143em}.ui.inverted.dimmer .ui.massive.loader,.ui.massive.loader{width:4.57142857rem;height:4.57142857rem;font-size:1.71428571em}.ui.mini.text.loader{min-width:1rem;padding-top:1.78571429rem}.ui.tiny.text.loader{min-width:1.14285714rem;padding-top:1.92857143rem}.ui.small.text.loader{min-width:1.71428571rem;padding-top:2.5rem}.ui.text.loader{min-width:2.28571429rem;padding-top:3.07142857rem}.ui.large.text.loader{min-width:3.42857143rem;padding-top:4.21428571rem}.ui.big.text.loader{min-width:3.71428571rem;padding-top:4.5rem}.ui.huge.text.loader{min-width:4.14285714rem;padding-top:4.92857143rem}.ui.massive.text.loader{min-width:4.57142857rem;padding-top:5.35714286rem}.ui.inverted.loader{color:rgba(255,255,255,.9)}.ui.inverted.loader:before{border-color:rgba(255,255,255,.15)}.ui.inverted.loader:after{border-top-color:#fff}.ui.inline.loader{position:relative;vertical-align:middle;margin:0;left:0;top:0;-webkit-transform:none;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}.ui.centered.inline.loader.active,.ui.centered.inline.loader.visible{display:block;margin-left:auto;margin-right:auto}
--------------------------------------------------------------------------------
/frontend/semanticui/components/nag.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Nag
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Nag
14 | *******************************/
15 |
16 | .ui.nag {
17 | display: none;
18 | opacity: 0.95;
19 | position: relative;
20 | top: 0em;
21 | left: 0px;
22 | z-index: 999;
23 | min-height: 0em;
24 | width: 100%;
25 | margin: 0em;
26 | padding: 0.75em 1em;
27 | background: #555555;
28 | -webkit-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);
29 | box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);
30 | font-size: 1rem;
31 | text-align: center;
32 | color: rgba(0, 0, 0, 0.87);
33 | border-radius: 0em 0em 0.28571429rem 0.28571429rem;
34 | -webkit-transition: 0.2s background ease;
35 | transition: 0.2s background ease;
36 | }
37 | a.ui.nag {
38 | cursor: pointer;
39 | }
40 | .ui.nag > .title {
41 | display: inline-block;
42 | margin: 0em 0.5em;
43 | color: #FFFFFF;
44 | }
45 | .ui.nag > .close.icon {
46 | cursor: pointer;
47 | opacity: 0.4;
48 | position: absolute;
49 | top: 50%;
50 | right: 1em;
51 | font-size: 1em;
52 | margin: -0.5em 0em 0em;
53 | color: #FFFFFF;
54 | -webkit-transition: opacity 0.2s ease;
55 | transition: opacity 0.2s ease;
56 | }
57 |
58 |
59 | /*******************************
60 | States
61 | *******************************/
62 |
63 |
64 | /* Hover */
65 | .ui.nag:hover {
66 | background: #555555;
67 | opacity: 1;
68 | }
69 | .ui.nag .close:hover {
70 | opacity: 1;
71 | }
72 |
73 |
74 | /*******************************
75 | Variations
76 | *******************************/
77 |
78 |
79 | /*--------------
80 | Static
81 | ---------------*/
82 |
83 | .ui.overlay.nag {
84 | position: absolute;
85 | display: block;
86 | }
87 |
88 | /*--------------
89 | Fixed
90 | ---------------*/
91 |
92 | .ui.fixed.nag {
93 | position: fixed;
94 | }
95 |
96 | /*--------------
97 | Bottom
98 | ---------------*/
99 |
100 | .ui.bottom.nags,
101 | .ui.bottom.nag {
102 | border-radius: 0.28571429rem 0.28571429rem 0em 0em;
103 | top: auto;
104 | bottom: 0em;
105 | }
106 |
107 | /*--------------
108 | White
109 | ---------------*/
110 |
111 | .ui.inverted.nags .nag,
112 | .ui.inverted.nag {
113 | background-color: #F3F4F5;
114 | color: rgba(0, 0, 0, 0.85);
115 | }
116 | .ui.inverted.nags .nag .close,
117 | .ui.inverted.nags .nag .title,
118 | .ui.inverted.nag .close,
119 | .ui.inverted.nag .title {
120 | color: rgba(0, 0, 0, 0.4);
121 | }
122 |
123 |
124 | /*******************************
125 | Groups
126 | *******************************/
127 |
128 | .ui.nags .nag {
129 | border-radius: 0em !important;
130 | }
131 | .ui.nags .nag:last-child {
132 | border-radius: 0em 0em 0.28571429rem 0.28571429rem;
133 | }
134 | .ui.bottom.nags .nag:last-child {
135 | border-radius: 0.28571429rem 0.28571429rem 0em 0em;
136 | }
137 |
138 |
139 | /*******************************
140 | Theme Overrides
141 | *******************************/
142 |
143 |
144 |
145 | /*******************************
146 | User Overrides
147 | *******************************/
148 |
149 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/nag.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Nag
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:999;min-height:0;width:100%;margin:0;padding:.75em 1em;background:#555;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.2);box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1rem;text-align:center;color:rgba(0,0,0,.87);border-radius:0 0 .28571429rem .28571429rem;-webkit-transition:.2s background ease;transition:.2s background ease}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#fff}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position:absolute;top:50%;right:1em;font-size:1em;margin:-.5em 0 0;color:#fff;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.ui.nag:hover{background:#555;opacity:1}.ui.nag .close:hover{opacity:1}.ui.overlay.nag{position:absolute;display:block}.ui.fixed.nag{position:fixed}.ui.bottom.nag,.ui.bottom.nags{border-radius:.28571429rem .28571429rem 0 0;top:auto;bottom:0}.ui.inverted.nag,.ui.inverted.nags .nag{background-color:#f3f4f5;color:rgba(0,0,0,.85)}.ui.inverted.nag .close,.ui.inverted.nag .title,.ui.inverted.nags .nag .close,.ui.inverted.nags .nag .title{color:rgba(0,0,0,.4)}.ui.nags .nag{border-radius:0!important}.ui.nags .nag:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.bottom.nags .nag:last-child{border-radius:.28571429rem .28571429rem 0 0}
--------------------------------------------------------------------------------
/frontend/semanticui/components/nag.min.js:
--------------------------------------------------------------------------------
1 | !function(y,k,e,S){"use strict";k=void 0!==k&&k.Math==Math?k:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),y.fn.nag=function(u){var d,e=y(this),m=e.selector||"",f=(new Date).getTime(),p=[],h=u,b="string"==typeof h,v=[].slice.call(arguments,1);return e.each(function(){var r,n=y.isPlainObject(u)?y.extend(!0,{},y.fn.nag.settings,u):y.extend({},y.fn.nag.settings),e=(n.className,n.selector),l=n.error,o=n.namespace,t="."+o,i=o+"-module",s=y(this),a=(s.find(e.close),n.context?y(n.context):y("body")),c=this,g=s.data(i);k.requestAnimationFrame||k.mozRequestAnimationFrame||k.webkitRequestAnimationFrame||k.msRequestAnimationFrame;r={initialize:function(){r.verbose("Initializing element"),s.on("click"+t,e.close,r.dismiss).data(i,r),n.detachable&&s.parent()[0]!==a[0]&&s.detach().prependTo(a),0:before{background-color:#fff}.ui.placeholder .image:not(.header):not(.ui){height:100px}.ui.placeholder .square.image:not(.header){height:0;overflow:hidden;padding-top:100%}.ui.placeholder .rectangular.image:not(.header){height:0;overflow:hidden;padding-top:75%}.ui.placeholder .line{position:relative;height:.85714286em}.ui.placeholder .line:after,.ui.placeholder .line:before{top:100%;position:absolute;content:'';background-color:inherit}.ui.placeholder .line:before{left:0}.ui.placeholder .line:after{right:0}.ui.placeholder .line{margin-bottom:.5em}.ui.placeholder .line:after,.ui.placeholder .line:before{height:.5em}.ui.placeholder .line:not(:first-child){margin-top:.5em}.ui.placeholder .header{position:relative;overflow:hidden}.ui.placeholder .line:nth-child(1):after{width:0%}.ui.placeholder .line:nth-child(2):after{width:50%}.ui.placeholder .line:nth-child(3):after{width:10%}.ui.placeholder .line:nth-child(4):after{width:35%}.ui.placeholder .line:nth-child(5):after{width:65%}.ui.placeholder .header .line{margin-bottom:.64285714em}.ui.placeholder .header .line:after,.ui.placeholder .header .line:before{height:.64285714em}.ui.placeholder .header .line:not(:first-child){margin-top:.64285714em}.ui.placeholder .header .line:after{width:20%}.ui.placeholder .header .line:nth-child(2):after{width:60%}.ui.placeholder .image.header .line{margin-left:3em}.ui.placeholder .image.header .line:before{width:.71428571rem}.ui.placeholder .image.header:after{display:block;height:.85714286em;content:'';margin-left:3em}.ui.placeholder .header .line:first-child,.ui.placeholder .image .line:first-child,.ui.placeholder .paragraph .line:first-child{height:.01px}.ui.placeholder .header:not(:first-child):before,.ui.placeholder .image:not(:first-child):before,.ui.placeholder .paragraph:not(:first-child):before{height:1.42857143em;content:'';display:block}.ui.inverted.placeholder{background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,.08)),color-stop(15%,rgba(255,255,255,.14)),color-stop(30%,rgba(255,255,255,.08)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.08) 0,rgba(255,255,255,.14) 15%,rgba(255,255,255,.08) 30%);background-image:linear-gradient(to right,rgba(255,255,255,.08) 0,rgba(255,255,255,.14) 15%,rgba(255,255,255,.08) 30%)}.ui.inverted.placeholder,.ui.inverted.placeholder .image.header:after,.ui.inverted.placeholder .line,.ui.inverted.placeholder .line:after,.ui.inverted.placeholder>:before{background-color:#1b1c1d}.ui.placeholder .full.line.line.line:after{width:0%}.ui.placeholder .very.long.line.line.line:after{width:10%}.ui.placeholder .long.line.line.line:after{width:35%}.ui.placeholder .medium.line.line.line:after{width:50%}.ui.placeholder .short.line.line.line:after{width:65%}.ui.placeholder .very.short.line.line.line:after{width:80%}.ui.fluid.placeholder{max-width:none}
--------------------------------------------------------------------------------
/frontend/semanticui/components/rail.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Rail
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Rails
14 | *******************************/
15 |
16 | .ui.rail {
17 | position: absolute;
18 | top: 0%;
19 | width: 300px;
20 | height: 100%;
21 | }
22 | .ui.left.rail {
23 | left: auto;
24 | right: 100%;
25 | padding: 0em 2rem 0em 0em;
26 | margin: 0em 2rem 0em 0em;
27 | }
28 | .ui.right.rail {
29 | left: 100%;
30 | right: auto;
31 | padding: 0em 0em 0em 2rem;
32 | margin: 0em 0em 0em 2rem;
33 | }
34 |
35 |
36 | /*******************************
37 | Variations
38 | *******************************/
39 |
40 |
41 | /*--------------
42 | Internal
43 | ---------------*/
44 |
45 | .ui.left.internal.rail {
46 | left: 0%;
47 | right: auto;
48 | padding: 0em 0em 0em 2rem;
49 | margin: 0em 0em 0em 2rem;
50 | }
51 | .ui.right.internal.rail {
52 | left: auto;
53 | right: 0%;
54 | padding: 0em 2rem 0em 0em;
55 | margin: 0em 2rem 0em 0em;
56 | }
57 |
58 | /*--------------
59 | Dividing
60 | ---------------*/
61 |
62 | .ui.dividing.rail {
63 | width: 302.5px;
64 | }
65 | .ui.left.dividing.rail {
66 | padding: 0em 2.5rem 0em 0em;
67 | margin: 0em 2.5rem 0em 0em;
68 | border-right: 1px solid rgba(34, 36, 38, 0.15);
69 | }
70 | .ui.right.dividing.rail {
71 | border-left: 1px solid rgba(34, 36, 38, 0.15);
72 | padding: 0em 0em 0em 2.5rem;
73 | margin: 0em 0em 0em 2.5rem;
74 | }
75 |
76 | /*--------------
77 | Distance
78 | ---------------*/
79 |
80 | .ui.close.rail {
81 | width: calc( 300px + 1em );
82 | }
83 | .ui.close.left.rail {
84 | padding: 0em 1em 0em 0em;
85 | margin: 0em 1em 0em 0em;
86 | }
87 | .ui.close.right.rail {
88 | padding: 0em 0em 0em 1em;
89 | margin: 0em 0em 0em 1em;
90 | }
91 | .ui.very.close.rail {
92 | width: calc( 300px + 0.5em );
93 | }
94 | .ui.very.close.left.rail {
95 | padding: 0em 0.5em 0em 0em;
96 | margin: 0em 0.5em 0em 0em;
97 | }
98 | .ui.very.close.right.rail {
99 | padding: 0em 0em 0em 0.5em;
100 | margin: 0em 0em 0em 0.5em;
101 | }
102 |
103 | /*--------------
104 | Attached
105 | ---------------*/
106 |
107 | .ui.attached.left.rail,
108 | .ui.attached.right.rail {
109 | padding: 0em;
110 | margin: 0em;
111 | }
112 |
113 | /*--------------
114 | Sizing
115 | ---------------*/
116 |
117 | .ui.mini.rail {
118 | font-size: 0.78571429rem;
119 | }
120 | .ui.tiny.rail {
121 | font-size: 0.85714286rem;
122 | }
123 | .ui.small.rail {
124 | font-size: 0.92857143rem;
125 | }
126 | .ui.rail {
127 | font-size: 1rem;
128 | }
129 | .ui.large.rail {
130 | font-size: 1.14285714rem;
131 | }
132 | .ui.big.rail {
133 | font-size: 1.28571429rem;
134 | }
135 | .ui.huge.rail {
136 | font-size: 1.42857143rem;
137 | }
138 | .ui.massive.rail {
139 | font-size: 1.71428571rem;
140 | }
141 |
142 |
143 | /*******************************
144 | Theme Overrides
145 | *******************************/
146 |
147 |
148 |
149 | /*******************************
150 | Site Overrides
151 | *******************************/
152 |
153 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/rail.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Rail
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.rail{position:absolute;top:0;width:300px;height:100%}.ui.left.rail{left:auto;right:100%;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.right.rail{left:100%;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.left.internal.rail{left:0;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.right.internal.rail{left:auto;right:0;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.dividing.rail{width:302.5px}.ui.left.dividing.rail{padding:0 2.5rem 0 0;margin:0 2.5rem 0 0;border-right:1px solid rgba(34,36,38,.15)}.ui.right.dividing.rail{border-left:1px solid rgba(34,36,38,.15);padding:0 0 0 2.5rem;margin:0 0 0 2.5rem}.ui.close.rail{width:calc(300px + 1em)}.ui.close.left.rail{padding:0 1em 0 0;margin:0 1em 0 0}.ui.close.right.rail{padding:0 0 0 1em;margin:0 0 0 1em}.ui.very.close.rail{width:calc(300px + .5em)}.ui.very.close.left.rail{padding:0 .5em 0 0;margin:0 .5em 0 0}.ui.very.close.right.rail{padding:0 0 0 .5em;margin:0 0 0 .5em}.ui.attached.left.rail,.ui.attached.right.rail{padding:0;margin:0}.ui.mini.rail{font-size:.78571429rem}.ui.tiny.rail{font-size:.85714286rem}.ui.small.rail{font-size:.92857143rem}.ui.rail{font-size:1rem}.ui.large.rail{font-size:1.14285714rem}.ui.big.rail{font-size:1.28571429rem}.ui.huge.rail{font-size:1.42857143rem}.ui.massive.rail{font-size:1.71428571rem}
--------------------------------------------------------------------------------
/frontend/semanticui/components/rating.min.js:
--------------------------------------------------------------------------------
1 | !function(C,e,n,T){"use strict";e=void 0!==e&&e.Math==Math?e:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),C.fn.rating=function(m){var f,v=C(this),p=v.selector||"",b=(new Date).getTime(),h=[],y=m,x="string"==typeof y,R=[].slice.call(arguments,1);return v.each(function(){var e,i,a=C.isPlainObject(m)?C.extend(!0,{},C.fn.rating.settings,m):C.extend({},C.fn.rating.settings),n=a.namespace,o=a.className,t=a.metadata,r=a.selector,s=(a.error,"."+n),l="module-"+n,c=this,u=C(this).data(l),d=C(this),g=d.find(r.icon);i={initialize:function(){i.verbose("Initializing rating module",a),0===g.length&&i.setup.layout(),a.interactive?i.enable():i.disable(),i.set.initialLoad(),i.set.rating(i.get.initialRating()),i.remove.initialLoad(),i.instantiate()},instantiate:function(){i.verbose("Instantiating module",a),u=i,d.data(l,i)},destroy:function(){i.verbose("Destroying previous instance",u),i.remove.events(),d.removeData(l)},refresh:function(){g=d.find(r.icon)},setup:{layout:function(){var e=i.get.maxRating(),n=C.fn.rating.settings.templates.icon(e);i.debug("Generating icon html dynamically"),d.html(n),i.refresh()}},event:{mouseenter:function(){var e=C(this);e.nextAll().removeClass(o.selected),d.addClass(o.selected),e.addClass(o.selected).prevAll().addClass(o.selected)},mouseleave:function(){d.removeClass(o.selected),g.removeClass(o.selected)},click:function(){var e=C(this),n=i.get.rating(),t=g.index(e)+1;("auto"==a.clearable?1===g.length:a.clearable)&&n==t?i.clearRating():i.set.rating(t)}},clearRating:function(){i.debug("Clearing current rating"),i.set.rating(0)},bind:{events:function(){i.verbose("Binding events"),d.on("mouseenter"+s,r.icon,i.event.mouseenter).on("mouseleave"+s,r.icon,i.event.mouseleave).on("click"+s,r.icon,i.event.click)}},remove:{events:function(){i.verbose("Removing events"),d.off(s)},initialLoad:function(){e=!1}},enable:function(){i.debug("Setting rating to interactive mode"),i.bind.events(),d.removeClass(o.disabled)},disable:function(){i.debug("Setting rating to read-only mode"),i.remove.events(),d.addClass(o.disabled)},is:{initialLoad:function(){return e}},get:{initialRating:function(){return d.data(t.rating)!==T?(d.removeData(t.rating),d.data(t.rating)):a.initialRating},maxRating:function(){return d.data(t.maxRating)!==T?(d.removeData(t.maxRating),d.data(t.maxRating)):a.maxRating},rating:function(){var e=g.filter("."+o.active).length;return i.verbose("Current rating retrieved",e),e}},set:{rating:function(e){var n=0<=e-1?e-1:0,t=g.eq(n);d.removeClass(o.selected),g.removeClass(o.selected).removeClass(o.active),0',n++;return t}}}}(jQuery,window,document);
--------------------------------------------------------------------------------
/frontend/semanticui/components/reset.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Reset
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box}input[type=email],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;-moz-appearance:none}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}
--------------------------------------------------------------------------------
/frontend/semanticui/components/reveal.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Reveal
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.reveal{display:inherit;position:relative!important;font-size:0!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:3!important;-webkit-transition:all .5s ease .1s;transition:all .5s ease .1s}.ui.reveal>.hidden.content{position:relative!important;z-index:2!important}.ui.active.reveal .visible.content,.ui.reveal:hover .visible.content{z-index:4!important}.ui.slide.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.slide.reveal>.content{display:block;width:100%;white-space:normal;float:left;margin:0;-webkit-transition:-webkit-transform .5s ease .1s;transition:-webkit-transform .5s ease .1s;transition:transform .5s ease .1s;transition:transform .5s ease .1s,-webkit-transform .5s ease .1s}.ui.slide.reveal>.visible.content{position:relative!important}.ui.slide.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important;-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.active.reveal>.visible.content,.ui.slide.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.active.reveal>.hidden.content,.ui.slide.reveal:hover>.hidden.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.right.reveal>.visible.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.right.reveal>.hidden.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.right.active.reveal>.visible.content,.ui.slide.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.right.active.reveal>.hidden.content,.ui.slide.right.reveal:hover>.hidden.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.up.reveal>.hidden.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.up.active.reveal>.visible.content,.ui.slide.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.up.active.reveal>.hidden.content,.ui.slide.up.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;transform:translateY(0)!important}.ui.slide.down.reveal>.hidden.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.down.active.reveal>.visible.content,.ui.slide.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.down.active.reveal>.hidden.content,.ui.slide.down.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;transform:translateY(0)!important}.ui.fade.reveal>.visible.content{opacity:1}.ui.fade.active.reveal>.visible.content,.ui.fade.reveal:hover>.visible.content{opacity:0}.ui.move.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.move.reveal>.content{display:block;float:left;white-space:normal;margin:0;-webkit-transition:-webkit-transform .5s cubic-bezier(.175,.885,.32,1) .1s;transition:-webkit-transform .5s cubic-bezier(.175,.885,.32,1) .1s;transition:transform .5s cubic-bezier(.175,.885,.32,1) .1s;transition:transform .5s cubic-bezier(.175,.885,.32,1) .1s,-webkit-transform .5s cubic-bezier(.175,.885,.32,1) .1s}.ui.move.reveal>.visible.content{position:relative!important}.ui.move.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important}.ui.move.active.reveal>.visible.content,.ui.move.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.move.right.active.reveal>.visible.content,.ui.move.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.move.up.active.reveal>.visible.content,.ui.move.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.move.down.active.reveal>.visible.content,.ui.move.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.rotate.reveal>.visible.content{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transform:rotate(0);transform:rotate(0)}.ui.rotate.reveal>.visible.content,.ui.rotate.right.reveal>.visible.content{-webkit-transform-origin:bottom right;transform-origin:bottom right}.ui.rotate.active.reveal>.visible.content,.ui.rotate.reveal:hover>.visible.content,.ui.rotate.right.active.reveal>.visible.content,.ui.rotate.right.reveal:hover>.visible.content{-webkit-transform:rotate(110deg);transform:rotate(110deg)}.ui.rotate.left.reveal>.visible.content{-webkit-transform-origin:bottom left;transform-origin:bottom left}.ui.rotate.left.active.reveal>.visible.content,.ui.rotate.left.reveal:hover>.visible.content{-webkit-transform:rotate(-110deg);transform:rotate(-110deg)}.ui.disabled.reveal:hover>.visible.visible.content{position:static!important;display:block!important;opacity:1!important;top:0!important;left:0!important;right:auto!important;bottom:auto!important;-webkit-transform:none!important;transform:none!important}.ui.disabled.reveal:hover>.hidden.hidden.content{display:none!important}.ui.reveal>.ui.ribbon.label{z-index:5}.ui.visible.reveal{overflow:visible}.ui.instant.reveal>.content{-webkit-transition-delay:0s!important;transition-delay:0s!important}.ui.reveal>.content{font-size:1rem!important}
--------------------------------------------------------------------------------
/frontend/semanticui/components/shape.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Shape
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Shape
14 | *******************************/
15 |
16 | .ui.shape {
17 | position: relative;
18 | vertical-align: top;
19 | display: inline-block;
20 | -webkit-perspective: 2000px;
21 | perspective: 2000px;
22 | -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
23 | transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
24 | transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;
25 | transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
26 | }
27 | .ui.shape .sides {
28 | -webkit-transform-style: preserve-3d;
29 | transform-style: preserve-3d;
30 | }
31 | .ui.shape .side {
32 | opacity: 1;
33 | width: 100%;
34 | margin: 0em !important;
35 | -webkit-backface-visibility: hidden;
36 | backface-visibility: hidden;
37 | }
38 | .ui.shape .side {
39 | display: none;
40 | }
41 | .ui.shape .side * {
42 | -webkit-backface-visibility: visible !important;
43 | backface-visibility: visible !important;
44 | }
45 |
46 |
47 | /*******************************
48 | Types
49 | *******************************/
50 |
51 | .ui.cube.shape .side {
52 | min-width: 15em;
53 | height: 15em;
54 | padding: 2em;
55 | background-color: #E6E6E6;
56 | color: rgba(0, 0, 0, 0.87);
57 | -webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);
58 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);
59 | }
60 | .ui.cube.shape .side > .content {
61 | width: 100%;
62 | height: 100%;
63 | display: table;
64 | text-align: center;
65 | -webkit-user-select: text;
66 | -moz-user-select: text;
67 | -ms-user-select: text;
68 | user-select: text;
69 | }
70 | .ui.cube.shape .side > .content > div {
71 | display: table-cell;
72 | vertical-align: middle;
73 | font-size: 2em;
74 | }
75 |
76 |
77 | /*******************************
78 | Variations
79 | *******************************/
80 |
81 | .ui.text.shape.animating .sides {
82 | position: static;
83 | }
84 | .ui.text.shape .side {
85 | white-space: nowrap;
86 | }
87 | .ui.text.shape .side > * {
88 | white-space: normal;
89 | }
90 |
91 |
92 | /*******************************
93 | States
94 | *******************************/
95 |
96 |
97 | /*--------------
98 | Loading
99 | ---------------*/
100 |
101 | .ui.loading.shape {
102 | position: absolute;
103 | top: -9999px;
104 | left: -9999px;
105 | }
106 |
107 | /*--------------
108 | Animating
109 | ---------------*/
110 |
111 | .ui.shape .animating.side {
112 | position: absolute;
113 | top: 0px;
114 | left: 0px;
115 | display: block;
116 | z-index: 100;
117 | }
118 | .ui.shape .hidden.side {
119 | opacity: 0.6;
120 | }
121 |
122 | /*--------------
123 | CSS
124 | ---------------*/
125 |
126 | .ui.shape.animating .sides {
127 | position: absolute;
128 | }
129 | .ui.shape.animating .sides {
130 | -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
131 | transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
132 | transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;
133 | transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
134 | }
135 | .ui.shape.animating .side {
136 | -webkit-transition: opacity 0.6s ease-in-out;
137 | transition: opacity 0.6s ease-in-out;
138 | }
139 |
140 | /*--------------
141 | Active
142 | ---------------*/
143 |
144 | .ui.shape .active.side {
145 | display: block;
146 | }
147 |
148 |
149 | /*******************************
150 | Theme Overrides
151 | *******************************/
152 |
153 |
154 |
155 | /*******************************
156 | User Overrides
157 | *******************************/
158 |
159 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/shape.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.0 - Shape
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */.ui.shape{position:relative;vertical-align:top;display:inline-block;-webkit-perspective:2000px;perspective:2000px;-webkit-transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out}.ui.shape .sides{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.ui.shape .side{opacity:1;width:100%;margin:0!important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.shape .side{display:none}.ui.shape .side *{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.ui.cube.shape .side{min-width:15em;height:15em;padding:2em;background-color:#e6e6e6;color:rgba(0,0,0,.87);-webkit-box-shadow:0 0 2px rgba(0,0,0,.3);box-shadow:0 0 2px rgba(0,0,0,.3)}.ui.cube.shape .side>.content{width:100%;height:100%;display:table;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.cube.shape .side>.content>div{display:table-cell;vertical-align:middle;font-size:2em}.ui.text.shape.animating .sides{position:static}.ui.text.shape .side{white-space:nowrap}.ui.text.shape .side>*{white-space:normal}.ui.loading.shape{position:absolute;top:-9999px;left:-9999px}.ui.shape .animating.side{position:absolute;top:0;left:0;display:block;z-index:100}.ui.shape .hidden.side{opacity:.6}.ui.shape.animating .sides{position:absolute}.ui.shape.animating .sides{-webkit-transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out}.ui.shape.animating .side{-webkit-transition:opacity .6s ease-in-out;transition:opacity .6s ease-in-out}.ui.shape .active.side{display:block}
--------------------------------------------------------------------------------
/frontend/semanticui/components/site.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Site
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */
10 |
11 |
12 | /*******************************
13 | Page
14 | *******************************/
15 |
16 | @import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin');
17 | html,
18 | body {
19 | height: 100%;
20 | }
21 | html {
22 | font-size: 14px;
23 | }
24 | body {
25 | margin: 0px;
26 | padding: 0px;
27 | overflow-x: hidden;
28 | min-width: 320px;
29 | background: #FFFFFF;
30 | font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
31 | font-size: 14px;
32 | line-height: 1.4285em;
33 | color: rgba(0, 0, 0, 0.87);
34 | font-smoothing: antialiased;
35 | }
36 |
37 |
38 | /*******************************
39 | Headers
40 | *******************************/
41 |
42 | h1,
43 | h2,
44 | h3,
45 | h4,
46 | h5 {
47 | font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
48 | line-height: 1.28571429em;
49 | margin: calc(2rem - 0.14285714em ) 0em 1rem;
50 | font-weight: bold;
51 | padding: 0em;
52 | }
53 | h1 {
54 | min-height: 1rem;
55 | font-size: 2rem;
56 | }
57 | h2 {
58 | font-size: 1.71428571rem;
59 | }
60 | h3 {
61 | font-size: 1.28571429rem;
62 | }
63 | h4 {
64 | font-size: 1.07142857rem;
65 | }
66 | h5 {
67 | font-size: 1rem;
68 | }
69 | h1:first-child,
70 | h2:first-child,
71 | h3:first-child,
72 | h4:first-child,
73 | h5:first-child {
74 | margin-top: 0em;
75 | }
76 | h1:last-child,
77 | h2:last-child,
78 | h3:last-child,
79 | h4:last-child,
80 | h5:last-child {
81 | margin-bottom: 0em;
82 | }
83 |
84 |
85 | /*******************************
86 | Text
87 | *******************************/
88 |
89 | p {
90 | margin: 0em 0em 1em;
91 | line-height: 1.4285em;
92 | }
93 | p:first-child {
94 | margin-top: 0em;
95 | }
96 | p:last-child {
97 | margin-bottom: 0em;
98 | }
99 |
100 | /*-------------------
101 | Links
102 | --------------------*/
103 |
104 | a {
105 | color: #4183C4;
106 | text-decoration: none;
107 | }
108 | a:hover {
109 | color: #1e70bf;
110 | text-decoration: none;
111 | }
112 |
113 |
114 | /*******************************
115 | Scrollbars
116 | *******************************/
117 |
118 |
119 |
120 | /*******************************
121 | Highlighting
122 | *******************************/
123 |
124 |
125 | /* Site */
126 | ::-webkit-selection {
127 | background-color: #CCE2FF;
128 | color: rgba(0, 0, 0, 0.87);
129 | }
130 | ::-moz-selection {
131 | background-color: #CCE2FF;
132 | color: rgba(0, 0, 0, 0.87);
133 | }
134 | ::selection {
135 | background-color: #CCE2FF;
136 | color: rgba(0, 0, 0, 0.87);
137 | }
138 |
139 | /* Form */
140 | textarea::-webkit-selection,
141 | input::-webkit-selection {
142 | background-color: rgba(100, 100, 100, 0.4);
143 | color: rgba(0, 0, 0, 0.87);
144 | }
145 | textarea::-moz-selection,
146 | input::-moz-selection {
147 | background-color: rgba(100, 100, 100, 0.4);
148 | color: rgba(0, 0, 0, 0.87);
149 | }
150 | textarea::selection,
151 | input::selection {
152 | background-color: rgba(100, 100, 100, 0.4);
153 | color: rgba(0, 0, 0, 0.87);
154 | }
155 |
156 | /* Force Simple Scrollbars */
157 | body ::-webkit-scrollbar {
158 | -webkit-appearance: none;
159 | width: 10px;
160 | height: 10px;
161 | }
162 | body ::-webkit-scrollbar-track {
163 | background: rgba(0, 0, 0, 0.1);
164 | border-radius: 0px;
165 | }
166 | body ::-webkit-scrollbar-thumb {
167 | cursor: pointer;
168 | border-radius: 5px;
169 | background: rgba(0, 0, 0, 0.25);
170 | -webkit-transition: color 0.2s ease;
171 | transition: color 0.2s ease;
172 | }
173 | body ::-webkit-scrollbar-thumb:window-inactive {
174 | background: rgba(0, 0, 0, 0.15);
175 | }
176 | body ::-webkit-scrollbar-thumb:hover {
177 | background: rgba(128, 135, 139, 0.8);
178 | }
179 |
180 | /* Inverted UI */
181 | body .ui.inverted::-webkit-scrollbar-track {
182 | background: rgba(255, 255, 255, 0.1);
183 | }
184 | body .ui.inverted::-webkit-scrollbar-thumb {
185 | background: rgba(255, 255, 255, 0.25);
186 | }
187 | body .ui.inverted::-webkit-scrollbar-thumb:window-inactive {
188 | background: rgba(255, 255, 255, 0.15);
189 | }
190 | body .ui.inverted::-webkit-scrollbar-thumb:hover {
191 | background: rgba(255, 255, 255, 0.35);
192 | }
193 |
194 |
195 | /*******************************
196 | Global Overrides
197 | *******************************/
198 |
199 |
200 |
201 | /*******************************
202 | Site Overrides
203 | *******************************/
204 |
205 |
--------------------------------------------------------------------------------
/frontend/semanticui/components/site.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.4.1 - Site
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Released under the MIT license
7 | * http://opensource.org/licenses/MIT
8 | *
9 | */@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin);body,html{height:100%}html{font-size:14px}body{margin:0;padding:0;overflow-x:hidden;min-width:320px;background:#fff;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:14px;line-height:1.4285em;color:rgba(0,0,0,.87);font-smoothing:antialiased}h1,h2,h3,h4,h5{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;line-height:1.28571429em;margin:calc(2rem - .14285714em) 0 1rem;font-weight:700;padding:0}h1{min-height:1rem;font-size:2rem}h2{font-size:1.71428571rem}h3{font-size:1.28571429rem}h4{font-size:1.07142857rem}h5{font-size:1rem}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child{margin-bottom:0}p{margin:0 0 1em;line-height:1.4285em}p:first-child{margin-top:0}p:last-child{margin-bottom:0}a{color:#4183c4;text-decoration:none}a:hover{color:#1e70bf;text-decoration:none}::-webkit-selection{background-color:#cce2ff;color:rgba(0,0,0,.87)}::-moz-selection{background-color:#cce2ff;color:rgba(0,0,0,.87)}::selection{background-color:#cce2ff;color:rgba(0,0,0,.87)}input::-webkit-selection,textarea::-webkit-selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.87)}input::-moz-selection,textarea::-moz-selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.87)}input::selection,textarea::selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.87)}body ::-webkit-scrollbar{-webkit-appearance:none;width:10px;height:10px}body ::-webkit-scrollbar-track{background:rgba(0,0,0,.1);border-radius:0}body ::-webkit-scrollbar-thumb{cursor:pointer;border-radius:5px;background:rgba(0,0,0,.25);-webkit-transition:color .2s ease;transition:color .2s ease}body ::-webkit-scrollbar-thumb:window-inactive{background:rgba(0,0,0,.15)}body ::-webkit-scrollbar-thumb:hover{background:rgba(128,135,139,.8)}body .ui.inverted::-webkit-scrollbar-track{background:rgba(255,255,255,.1)}body .ui.inverted::-webkit-scrollbar-thumb{background:rgba(255,255,255,.25)}body .ui.inverted::-webkit-scrollbar-thumb:window-inactive{background:rgba(255,255,255,.15)}body .ui.inverted::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.35)}
--------------------------------------------------------------------------------
/frontend/semanticui/components/site.min.js:
--------------------------------------------------------------------------------
1 | !function(b,p,v,h){b.site=b.fn.site=function(e){var a,c,i=(new Date).getTime(),t=[],n=e,o="string"==typeof n,l=[].slice.call(arguments,1),u=b.isPlainObject(e)?b.extend(!0,{},b.site.settings,e):b.extend({},b.site.settings),s=u.namespace,m=u.error,r="module-"+s,d=b(v),g=this,f=d.data(r);return a={initialize:function(){a.instantiate()},instantiate:function(){a.verbose("Storing instance of site",a),f=a,d.data(r,a)},normalize:function(){a.fix.console(),a.fix.requestAnimationFrame()},fix:{console:function(){a.debug("Normalizing window.console"),console!==h&&console.log!==h||(a.verbose("Console not available, normalizing events"),a.disable.console()),void 0!==console.group&&void 0!==console.groupEnd&&void 0!==console.groupCollapsed||(a.verbose("Console group not available, normalizing events"),p.console.group=function(){},p.console.groupEnd=function(){},p.console.groupCollapsed=function(){}),void 0===console.markTimeline&&(a.verbose("Mark timeline not available, normalizing events"),p.console.markTimeline=function(){})},consoleClear:function(){a.debug("Disabling programmatic console clearing"),p.console.clear=function(){}},requestAnimationFrame:function(){a.debug("Normalizing requestAnimationFrame"),p.requestAnimationFrame===h&&(a.debug("RequestAnimationFrame not available, normalizing event"),p.requestAnimationFrame=p.requestAnimationFrame||p.mozRequestAnimationFrame||p.webkitRequestAnimationFrame||p.msRequestAnimationFrame||function(e){setTimeout(e,0)})}},moduleExists:function(e){return b.fn[e]!==h&&b.fn[e].settings!==h},enabled:{modules:function(e){var o=[];return e=e||u.modules,b.each(e,function(e,n){a.moduleExists(n)&&o.push(n)}),o}},disabled:{modules:function(e){var o=[];return e=e||u.modules,b.each(e,function(e,n){a.moduleExists(n)||o.push(n)}),o}},change:{setting:function(t,s,e,r){e="string"==typeof e?"all"===e?u.modules:[e]:e||u.modules,r=r===h||r,b.each(e,function(e,n){var o,i=!a.moduleExists(n)||(b.fn[n].settings.namespace||!1);a.moduleExists(n)&&(a.verbose("Changing default setting",t,s,n),b.fn[n].settings[t]=s,r&&i&&0<(o=b(":data(module-"+i+")")).length&&(a.verbose("Modifying existing settings",o),o[n]("setting",t,s)))})},settings:function(i,e,t){e="string"==typeof e?[e]:e||u.modules,t=t===h||t,b.each(e,function(e,n){var o;a.moduleExists(n)&&(a.verbose("Changing default setting",i,n),b.extend(!0,b.fn[n].settings,i),t&&s&&0<(o=b(":data(module-"+s+")")).length&&(a.verbose("Modifying existing settings",o),o[n]("setting",i)))})}},enable:{console:function(){a.console(!0)},debug:function(e,n){e=e||u.modules,a.debug("Enabling debug for modules",e),a.change.setting("debug",!0,e,n)},verbose:function(e,n){e=e||u.modules,a.debug("Enabling verbose debug for modules",e),a.change.setting("verbose",!0,e,n)}},disable:{console:function(){a.console(!1)},debug:function(e,n){e=e||u.modules,a.debug("Disabling debug for modules",e),a.change.setting("debug",!1,e,n)},verbose:function(e,n){e=e||u.modules,a.debug("Disabling verbose debug for modules",e),a.change.setting("verbose",!1,e,n)}},console:function(e){if(e){if(f.cache.console===h)return void a.error(m.console);a.debug("Restoring console function"),p.console=f.cache.console}else a.debug("Disabling console function"),f.cache.console=p.console,p.console={clear:function(){},error:function(){},group:function(){},groupCollapsed:function(){},groupEnd:function(){},info:function(){},log:function(){},markTimeline:function(){},warn:function(){}}},destroy:function(){a.verbose("Destroying previous site for",d),d.removeData(r)},cache:{},setting:function(e,n){if(b.isPlainObject(e))b.extend(!0,u,e);else{if(n===h)return u[e];u[e]=n}},internal:function(e,n){if(b.isPlainObject(e))b.extend(!0,a,e);else{if(n===h)return a[e];a[e]=n}},debug:function(){u.debug&&(u.performance?a.performance.log(arguments):(a.debug=Function.prototype.bind.call(console.info,console,u.name+":"),a.debug.apply(console,arguments)))},verbose:function(){u.verbose&&u.debug&&(u.performance?a.performance.log(arguments):(a.verbose=Function.prototype.bind.call(console.info,console,u.name+":"),a.verbose.apply(console,arguments)))},error:function(){a.error=Function.prototype.bind.call(console.error,console,u.name+":"),a.error.apply(console,arguments)},performance:{log:function(e){var n,o;u.performance&&(o=(n=(new Date).getTime())-(i||n),i=n,t.push({Element:g,Name:e[0],Arguments:[].slice.call(e,1)||"","Execution Time":o})),clearTimeout(a.performance.timer),a.performance.timer=setTimeout(a.performance.display,500)},display:function(){var e=u.name+":",o=0;i=!1,clearTimeout(a.performance.timer),b.each(t,function(e,n){o+=n["Execution Time"]}),e+=" "+o+"ms",(console.group!==h||console.table!==h)&&0':"youtube"==e&&(n='')):d.error(h.noVideo),n},url:function(e){var o=p.api?1:0,t="auto"===p.autoplay?F.data("image")!==n:p.autoplay,a=p.hd?1:0,i=p.showUI?1:0,r=p.showUI?0:1,l="";return"vimeo"==e&&(l="api="+o+"&title="+i+"&byline="+i+"&portrait="+i+"&autoplay="+t,p.color&&(l+="&color="+p.color)),"ustream"==e?(l="autoplay="+t,p.color&&(l+="&color="+p.color)):"youtube"==e&&(l="enablejsapi="+o+"&autoplay="+t+"&autohide="+r+"&hq="+a+"&modestbranding=1",p.color&&(l+="&color="+p.color)),l}},setting:function(o,t){if(d.debug("Changing setting",o,t),e.isPlainObject(o))e.extend(!0,p,o);else{if(t===n)return p[o];p[o]=t}},internal:function(o,t){if(e.isPlainObject(o))e.extend(!0,d,o);else{if(t===n)return d[o];d[o]=t}},debug:function(){p.debug&&(p.performance?d.performance.log(arguments):(d.debug=Function.prototype.bind.call(console.info,console,p.name+":"),d.debug.apply(console,arguments)))},verbose:function(){p.verbose&&p.debug&&(p.performance?d.performance.log(arguments):(d.verbose=Function.prototype.bind.call(console.info,console,p.name+":"),d.verbose.apply(console,arguments)))},error:function(){d.error=Function.prototype.bind.call(console.error,console,p.name+":"),d.error.apply(console,arguments)},performance:{log:function(e){var o,t,n;p.performance&&(o=(new Date).getTime(),n=l||o,t=o-n,l=o,c.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:A,"Execution Time":t})),clearTimeout(d.performance.timer),d.performance.timer=setTimeout(d.performance.display,500)},display:function(){var o=p.name+":",t=0;l=!1,clearTimeout(d.performance.timer),e.each(c,function(e,o){t+=o["Execution Time"]}),o+=" "+t+"ms",r&&(o+=" '"+r+"'"),i.length>1&&(o+=" ("+i.length+")"),(console.group!==n||console.table!==n)&&c.length>0&&(console.groupCollapsed(o),console.table?console.table(c):e.each(c,function(e,o){console.log(o.Name+": "+o["Execution Time"]+"ms")}),console.groupEnd()),c=[]}},invoke:function(o,t,i){var r,l,c,u=P;return t=t||m,i=A||i,"string"==typeof o&&u!==n&&(o=o.split(/[\. ]/),r=o.length-1,e.each(o,function(t,a){var i=t!=r?a+o[t+1].charAt(0).toUpperCase()+o[t+1].slice(1):o;if(e.isPlainObject(u[i])&&t!=r)u=u[i];else{if(u[i]!==n)return l=u[i],!1;if(!e.isPlainObject(u[a])||t==r)return u[a]!==n?(l=u[a],!1):(d.error(h.method,o),!1);u=u[a]}})),e.isFunction(l)?c=l.apply(i,t):l!==n&&(c=l),e.isArray(a)?a.push(c):a!==n?a=[a,c]:c!==n&&(a=c),l}},s?(P===n&&d.initialize(),d.invoke(u)):(P!==n&&P.invoke("destroy"),d.initialize())}),a!==n?a:this},e.fn.video.settings={name:"Video",namespace:"video",debug:!1,verbose:!1,performance:!0,metadata:{id:"id",image:"image",source:"source",url:"url"},source:!1,url:!1,id:!1,aspectRatio:16/9,onPlay:function(){},onReset:function(){},onChange:function(){},onPause:function(){},onStop:function(){},width:"auto",height:"auto",autoplay:"auto",color:"#442359",hd:!0,showUI:!1,api:!0,regExp:{youtube:/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/,vimeo:/http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/},error:{noVideo:"No video specified",method:"The method you called is not defined"},className:{active:"active"},selector:{embed:".embed",placeholder:".placeholder",playButton:".play"}},e.fn.video.settings.templates={video:function(e){var o="";return e&&(o+='
'),o+=''}}}(jQuery,window,document);
--------------------------------------------------------------------------------
/frontend/semanticui/components/visit.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * # Semantic UI 2.0.0 - Visit
3 | * http://github.com/semantic-org/semantic-ui/
4 | *
5 | *
6 | * Copyright 2015 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | !function(e,t,i,n){"use strict";e.visit=e.fn.visit=function(i){var o,r=e(e.isFunction(this)?t:this),s=r.selector||"",a=(new Date).getTime(),c=[],u=arguments[0],l="string"==typeof u,d=[].slice.call(arguments,1);return r.each(function(){var g,m=e.isPlainObject(i)?e.extend(!0,{},e.fn.visit.settings,i):e.extend({},e.fn.visit.settings),f=m.error,p=m.namespace,v=p+"-module",h=e(this),b=e(),y=this,k=h.data(v);g={initialize:function(){m.count?g.store(m.key.count,m.count):m.id?g.add.id(m.id):m.increment&&"increment"!==l&&g.increment(),g.add.display(h),g.instantiate()},instantiate:function(){g.verbose("Storing instance of visit module",g),k=g,h.data(v,g)},destroy:function(){g.verbose("Destroying instance"),h.removeData(v)},increment:function(e){var t=g.get.count(),i=+t+1;e?g.add.id(e):(i>m.limit&&!m.surpass&&(i=m.limit),g.debug("Incrementing visits",i),g.store(m.key.count,i))},decrement:function(e){var t=g.get.count(),i=+t-1;e?g.remove.id(e):(g.debug("Removing visit"),g.store(m.key.count,i))},get:{count:function(){return+g.retrieve(m.key.count)||0},idCount:function(e){return e=e||g.get.ids(),e.length},ids:function(e){var t=[];return e=e||g.retrieve(m.key.ids),"string"==typeof e&&(t=e.split(m.delimiter)),g.verbose("Found visited ID list",t),t},storageOptions:function(e){var t={};return m.expires&&(t.expires=m.expires),m.domain&&(t.domain=m.domain),m.path&&(t.path=m.path),t}},has:{visited:function(t,i){var o=!1;return i=i||g.get.ids(),t!==n&&i&&e.each(i,function(e,i){i==t&&(o=!0)}),o}},set:{count:function(e){g.store(m.key.count,e)},ids:function(e){g.store(m.key.ids,e)}},reset:function(){g.store(m.key.count,0),g.store(m.key.ids,null)},add:{id:function(e){var t=g.retrieve(m.key.ids),i=t===n||""===t?e:t+m.delimiter+e;g.has.visited(e)?g.debug("Unique content already visited, not adding visit",e,t):e===n?g.debug("ID is not defined"):(g.debug("Adding visit to unique content",e),g.store(m.key.ids,i)),g.set.count(g.get.idCount())},display:function(t){var i=e(t);i.length>0&&!e.isWindow(i[0])&&(g.debug("Updating visit count for element",i),b=b.length>0?b.add(i):i)}},remove:{id:function(t){var i=g.get.ids(),o=[];t!==n&&i!==n&&(g.debug("Removing visit to unique content",t,i),e.each(i,function(e,i){i!==t&&o.push(i)}),o=o.join(m.delimiter),g.store(m.key.ids,o)),g.set.count(g.get.idCount())}},check:{limit:function(e){e=e||g.get.count(),m.limit&&(e>=m.limit&&(g.debug("Pages viewed exceeded limit, firing callback",e,m.limit),m.onLimit.call(y,e)),g.debug("Limit not reached",e,m.limit),m.onChange.call(y,e)),g.update.display(e)}},update:{display:function(e){e=e||g.get.count(),b.length>0&&(g.debug("Updating displayed view count",b),b.html(e))}},store:function(i,o){var r=g.get.storageOptions(o);if("localstorage"==m.storageMethod&&t.localStorage!==n)t.localStorage.setItem(i,o),g.debug("Value stored using local storage",i,o);else{if(e.cookie===n)return void g.error(f.noCookieStorage);e.cookie(i,o,r),g.debug("Value stored using cookie",i,o,r)}i==m.key.count&&g.check.limit(o)},retrieve:function(i,o){var r;return"localstorage"==m.storageMethod&&t.localStorage!==n?r=t.localStorage.getItem(i):e.cookie!==n?r=e.cookie(i):g.error(f.noCookieStorage),("undefined"==r||"null"==r||r===n||null===r)&&(r=n),r},setting:function(t,i){if(e.isPlainObject(t))e.extend(!0,m,t);else{if(i===n)return m[t];m[t]=i}},internal:function(t,i){return g.debug("Changing internal",t,i),i===n?g[t]:void(e.isPlainObject(t)?e.extend(!0,g,t):g[t]=i)},debug:function(){m.debug&&(m.performance?g.performance.log(arguments):(g.debug=Function.prototype.bind.call(console.info,console,m.name+":"),g.debug.apply(console,arguments)))},verbose:function(){m.verbose&&m.debug&&(m.performance?g.performance.log(arguments):(g.verbose=Function.prototype.bind.call(console.info,console,m.name+":"),g.verbose.apply(console,arguments)))},error:function(){g.error=Function.prototype.bind.call(console.error,console,m.name+":"),g.error.apply(console,arguments)},performance:{log:function(e){var t,i,n;m.performance&&(t=(new Date).getTime(),n=a||t,i=t-n,a=t,c.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:y,"Execution Time":i})),clearTimeout(g.performance.timer),g.performance.timer=setTimeout(g.performance.display,500)},display:function(){var t=m.name+":",i=0;a=!1,clearTimeout(g.performance.timer),e.each(c,function(e,t){i+=t["Execution Time"]}),t+=" "+i+"ms",s&&(t+=" '"+s+"'"),r.length>1&&(t+=" ("+r.length+")"),(console.group!==n||console.table!==n)&&c.length>0&&(console.groupCollapsed(t),console.table?console.table(c):e.each(c,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),c=[]}},invoke:function(t,i,r){var s,a,c,u=k;return i=i||d,r=y||r,"string"==typeof t&&u!==n&&(t=t.split(/[\. ]/),s=t.length-1,e.each(t,function(i,o){var r=i!=s?o+t[i+1].charAt(0).toUpperCase()+t[i+1].slice(1):t;if(e.isPlainObject(u[r])&&i!=s)u=u[r];else{if(u[r]!==n)return a=u[r],!1;if(!e.isPlainObject(u[o])||i==s)return u[o]!==n?(a=u[o],!1):!1;u=u[o]}})),e.isFunction(a)?c=a.apply(r,i):a!==n&&(c=a),e.isArray(o)?o.push(c):o!==n?o=[o,c]:c!==n&&(o=c),a}},l?(k===n&&g.initialize(),g.invoke(u)):(k!==n&&k.invoke("destroy"),g.initialize())}),o!==n?o:this},e.fn.visit.settings={name:"Visit",debug:!1,verbose:!1,performance:!0,namespace:"visit",increment:!1,surpass:!1,count:!1,limit:!1,delimiter:"&",storageMethod:"localstorage",key:{count:"visit-count",ids:"visit-ids"},expires:30,domain:!1,path:"/",onLimit:function(){},onChange:function(){},error:{method:"The method you called is not defined",missingPersist:"Using the persist setting requires the inclusion of PersistJS",noCookieStorage:"The default storage cookie requires $.cookie to be included."}}}(jQuery,window,document);
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/brand-icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/brand-icons.eot
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/brand-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/brand-icons.ttf
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/brand-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/brand-icons.woff
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/brand-icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/brand-icons.woff2
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/icons.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/icons.otf
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/icons.woff2
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/outline-icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/outline-icons.eot
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/outline-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/outline-icons.ttf
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/outline-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/outline-icons.woff
--------------------------------------------------------------------------------
/frontend/semanticui/themes/default/assets/fonts/outline-icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/semanticui/themes/default/assets/fonts/outline-icons.woff2
--------------------------------------------------------------------------------
/frontend/wheel2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/frontend/wheel2.png
--------------------------------------------------------------------------------
/latent_decoder_model/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
131 | wandb/
132 | *.lmdb/
133 | *.pkl
134 |
--------------------------------------------------------------------------------
/latent_decoder_model/Dockerfile:
--------------------------------------------------------------------------------
1 | # tmp
2 | FROM nvcr.io/nvidian/ct-toronto-ai/stylegan:0.4
3 | MAINTAINER seungwookk@nvidia.com
4 |
5 |
6 | WORKDIR /workspace
7 | COPY . .
8 | RUN pip install matplotlib==3.3.3
9 | #RUN pip install torch==1.7.1 torchvision==0.8.2
10 | #RUN rm -fr /tmp/torch_extensions/
11 | #RUN cd apex && pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" .
12 |
--------------------------------------------------------------------------------
/latent_decoder_model/LICENSE-NVIDIA:
--------------------------------------------------------------------------------
1 | Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
2 |
3 |
4 | Nvidia Source Code License-NC
5 |
6 | =======================================================================
7 |
8 | 1. Definitions
9 |
10 | "Licensor" means any person or entity that distributes its Work.
11 |
12 | "Software" means the original work of authorship made available under
13 | this License.
14 |
15 | "Work" means the Software and any additions to or derivative works of
16 | the Software that are made available under this License.
17 |
18 | "Nvidia Processors" means any central processing unit (CPU), graphics
19 | processing unit (GPU), field-programmable gate array (FPGA),
20 | application-specific integrated circuit (ASIC) or any combination
21 | thereof designed, made, sold, or provided by Nvidia or its affiliates.
22 |
23 | The terms "reproduce," "reproduction," "derivative works," and
24 | "distribution" have the meaning as provided under U.S. copyright law;
25 | provided, however, that for the purposes of this License, derivative
26 | works shall not include works that remain separable from, or merely
27 | link (or bind by name) to the interfaces of, the Work.
28 |
29 | Works, including the Software, are "made available" under this License
30 | by including in or with the Work either (a) a copyright notice
31 | referencing the applicability of this License to the Work, or (b) a
32 | copy of this License.
33 |
34 | 2. License Grants
35 |
36 | 2.1 Copyright Grant. Subject to the terms and conditions of this
37 | License, each Licensor grants to you a perpetual, worldwide,
38 | non-exclusive, royalty-free, copyright license to reproduce,
39 | prepare derivative works of, publicly display, publicly perform,
40 | sublicense and distribute its Work and any resulting derivative
41 | works in any form.
42 |
43 | 3. Limitations
44 |
45 | 3.1 Redistribution. You may reproduce or distribute the Work only
46 | if (a) you do so under this License, (b) you include a complete
47 | copy of this License with your distribution, and (c) you retain
48 | without modification any copyright, patent, trademark, or
49 | attribution notices that are present in the Work.
50 |
51 | 3.2 Derivative Works. You may specify that additional or different
52 | terms apply to the use, reproduction, and distribution of your
53 | derivative works of the Work ("Your Terms") only if (a) Your Terms
54 | provide that the use limitation in Section 3.3 applies to your
55 | derivative works, and (b) you identify the specific derivative
56 | works that are subject to Your Terms. Notwithstanding Your Terms,
57 | this License (including the redistribution requirements in Section
58 | 3.1) will continue to apply to the Work itself.
59 |
60 | 3.3 Use Limitation. The Work and any derivative works thereof only
61 | may be used or intended for use non-commercially. The Work or
62 | derivative works thereof may be used or intended for use by Nvidia
63 | or its affiliates commercially or non-commercially. As used herein,
64 | "non-commercially" means for research or evaluation purposes only.
65 |
66 | 3.4 Patent Claims. If you bring or threaten to bring a patent claim
67 | against any Licensor (including any claim, cross-claim or
68 | counterclaim in a lawsuit) to enforce any patents that you allege
69 | are infringed by any Work, then your rights under this License from
70 | such Licensor (including the grants in Sections 2.1 and 2.2) will
71 | terminate immediately.
72 |
73 | 3.5 Trademarks. This License does not grant any rights to use any
74 | Licensor's or its affiliates' names, logos, or trademarks, except
75 | as necessary to reproduce the notices described in this License.
76 |
77 | 3.6 Termination. If you violate any term of this License, then your
78 | rights under this License (including the grants in Sections 2.1 and
79 | 2.2) will terminate immediately.
80 |
81 | 4. Disclaimer of Warranty.
82 |
83 | THE WORK IS PROVIDED "AS IS" WITHOUT WARRANTIES OR CONDITIONS OF ANY
84 | KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OR CONDITIONS OF
85 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR
86 | NON-INFRINGEMENT. YOU BEAR THE RISK OF UNDERTAKING ANY ACTIVITIES UNDER
87 | THIS LICENSE.
88 |
89 | 5. Limitation of Liability.
90 |
91 | EXCEPT AS PROHIBITED BY APPLICABLE LAW, IN NO EVENT AND UNDER NO LEGAL
92 | THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE
93 | SHALL ANY LICENSOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT,
94 | INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
95 | OR RELATED TO THIS LICENSE, THE USE OR INABILITY TO USE THE WORK
96 | (INCLUDING BUT NOT LIMITED TO LOSS OF GOODWILL, BUSINESS INTERRUPTION,
97 | LOST PROFITS OR DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY OTHER
98 | COMMERCIAL DAMAGES OR LOSSES), EVEN IF THE LICENSOR HAS BEEN ADVISED OF
99 | THE POSSIBILITY OF SUCH DAMAGES.
100 |
101 | =======================================================================
102 |
--------------------------------------------------------------------------------
/latent_decoder_model/LICENSE-ROSINALITY:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Kim Seonghyeon
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/latent_decoder_model/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/__init__.py
--------------------------------------------------------------------------------
/latent_decoder_model/distributed.py:
--------------------------------------------------------------------------------
1 | """
2 | Copyright (C) 2021 NVIDIA Corporation. All rights reserved.
3 | Licensed under the NVIDIA Source Code License. See LICENSE at the main github page.
4 | Authors: Seung Wook Kim, Jonah Philion, Antonio Torralba, Sanja Fidler
5 | """
6 |
7 | '''
8 | This file is copied from https://github.com/rosinality/stylegan2-pytorch
9 |
10 | MIT License
11 |
12 | Copyright (c) 2019 Kim Seonghyeon
13 |
14 | Permission is hereby granted, free of charge, to any person obtaining a copy
15 | of this software and associated documentation files (the "Software"), to deal
16 | in the Software without restriction, including without limitation the rights
17 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18 | copies of the Software, and to permit persons to whom the Software is
19 | furnished to do so, subject to the following conditions:
20 |
21 | The above copyright notice and this permission notice shall be included in all
22 | copies or substantial portions of the Software.
23 |
24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 | SOFTWARE.
31 | '''
32 |
33 | import math
34 | import pickle
35 |
36 | import torch
37 | from torch import distributed as dist
38 | from torch.utils.data.sampler import Sampler
39 |
40 |
41 | def get_rank():
42 | if not dist.is_available():
43 | return 0
44 |
45 | if not dist.is_initialized():
46 | return 0
47 |
48 | return dist.get_rank()
49 |
50 |
51 | def synchronize():
52 | if not dist.is_available():
53 | return
54 |
55 | if not dist.is_initialized():
56 | return
57 |
58 | world_size = dist.get_world_size()
59 |
60 | if world_size == 1:
61 | return
62 |
63 | dist.barrier()
64 |
65 |
66 | def get_world_size():
67 | if not dist.is_available():
68 | return 1
69 |
70 | if not dist.is_initialized():
71 | return 1
72 |
73 | return dist.get_world_size()
74 |
75 |
76 | def reduce_sum(tensor):
77 | if not dist.is_available():
78 | return tensor
79 |
80 | if not dist.is_initialized():
81 | return tensor
82 |
83 | tensor = tensor.clone()
84 | dist.all_reduce(tensor, op=dist.ReduceOp.SUM)
85 |
86 | return tensor
87 |
88 |
89 | def gather_grad(params):
90 | world_size = get_world_size()
91 |
92 | if world_size == 1:
93 | return
94 |
95 | for param in params:
96 | if param.grad is not None:
97 | dist.all_reduce(param.grad.data, op=dist.ReduceOp.SUM)
98 | param.grad.data.div_(world_size)
99 |
100 |
101 | def all_gather(data):
102 | world_size = get_world_size()
103 |
104 | if world_size == 1:
105 | return [data]
106 |
107 | buffer = pickle.dumps(data)
108 | storage = torch.ByteStorage.from_buffer(buffer)
109 | tensor = torch.ByteTensor(storage).to('cuda')
110 |
111 | local_size = torch.IntTensor([tensor.numel()]).to('cuda')
112 | size_list = [torch.IntTensor([0]).to('cuda') for _ in range(world_size)]
113 | dist.all_gather(size_list, local_size)
114 | size_list = [int(size.item()) for size in size_list]
115 | max_size = max(size_list)
116 |
117 | tensor_list = []
118 | for _ in size_list:
119 | tensor_list.append(torch.ByteTensor(size=(max_size,)).to('cuda'))
120 |
121 | if local_size != max_size:
122 | padding = torch.ByteTensor(size=(max_size - local_size,)).to('cuda')
123 | tensor = torch.cat((tensor, padding), 0)
124 |
125 | dist.all_gather(tensor_list, tensor)
126 |
127 | data_list = []
128 |
129 | for size, tensor in zip(size_list, tensor_list):
130 | buffer = tensor.cpu().numpy().tobytes()[:size]
131 | data_list.append(pickle.loads(buffer))
132 |
133 | return data_list
134 |
135 |
136 | def reduce_loss_dict(loss_dict):
137 | world_size = get_world_size()
138 |
139 | if world_size < 2:
140 | return loss_dict
141 |
142 | with torch.no_grad():
143 | keys = []
144 | losses = []
145 |
146 | for k in sorted(loss_dict.keys()):
147 | keys.append(k)
148 | losses.append(loss_dict[k])
149 |
150 | losses = torch.stack(losses, 0)
151 | dist.reduce(losses, dst=0)
152 |
153 | if dist.get_rank() == 0:
154 | losses /= world_size
155 |
156 | reduced_losses = {k: v for k, v in zip(keys, losses)}
157 |
158 | return reduced_losses
159 |
--------------------------------------------------------------------------------
/latent_decoder_model/docker_build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # sudo docker build -t stylegan:0.3 .
4 | # sudo docker tag stylegan:0.3 nvcr.io/nvidian/ct-toronto-ai/stylegan:0.3
5 | # sudo docker push nvcr.io/nvidian/ct-toronto-ai/stylegan:0.3
6 |
7 | sudo docker build -t ggstylegan_release:0.1 .
8 | sudo docker tag ggstylegan_release:0.1 nvcr.io/nvidian/ct-toronto-ai/ggstylegan_release:0.1
9 | sudo docker push nvcr.io/nvidian/ct-toronto-ai/ggstylegan_release:0.1
10 |
11 | #./scripts/september/run_ngc_sep16.sh
12 |
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/LICENSE-LPIPS:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018, Richard Zhang, Phillip Isola, Alexei A. Efros, Eli Shechtman, Oliver Wang
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 |
25 |
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | from __future__ import absolute_import
3 | from __future__ import division
4 | from __future__ import print_function
5 |
6 | import numpy as np
7 | from skimage.measure import compare_ssim
8 | import torch
9 | from torch.autograd import Variable
10 |
11 | from lpips import dist_model
12 |
13 | class PerceptualLoss(torch.nn.Module):
14 | def __init__(self, model='net-lin', net='alex', colorspace='rgb', spatial=False, use_gpu=True, gpu_ids=[0], device=None): # VGG using our perceptually-learned weights (LPIPS metric)
15 | # def __init__(self, model='net', net='vgg', use_gpu=True): # "default" way of using VGG as a perceptual loss
16 | super(PerceptualLoss, self).__init__()
17 | print('Setting up Perceptual loss...')
18 | self.use_gpu = use_gpu
19 | self.spatial = spatial
20 | self.gpu_ids = gpu_ids
21 | self.model = dist_model.DistModel()
22 | self.model.initialize(model=model, net=net, use_gpu=use_gpu, colorspace=colorspace, spatial=self.spatial, gpu_ids=gpu_ids, device=device)
23 | print('...[%s] initialized'%self.model.name())
24 | print('...Done')
25 |
26 | def forward(self, pred, target, normalize=False):
27 | """
28 | Pred and target are Variables.
29 | If normalize is True, assumes the images are between [0,1] and then scales them between [-1,+1]
30 | If normalize is False, assumes the images are already between [-1,+1]
31 |
32 | Inputs pred and target are Nx3xHxW
33 | Output pytorch Variable N long
34 | """
35 |
36 | if normalize:
37 | target = 2 * target - 1
38 | pred = 2 * pred - 1
39 |
40 | return self.model.forward(target, pred)
41 |
42 | def normalize_tensor(in_feat,eps=1e-10):
43 | norm_factor = torch.sqrt(torch.sum(in_feat**2,dim=1,keepdim=True))
44 | return in_feat/(norm_factor+eps)
45 |
46 | def l2(p0, p1, range=255.):
47 | return .5*np.mean((p0 / range - p1 / range)**2)
48 |
49 | def psnr(p0, p1, peak=255.):
50 | return 10*np.log10(peak**2/np.mean((1.*p0-1.*p1)**2))
51 |
52 | def dssim(p0, p1, range=255.):
53 | return (1 - compare_ssim(p0, p1, data_range=range, multichannel=True)) / 2.
54 |
55 | def rgb2lab(in_img,mean_cent=False):
56 | from skimage import color
57 | img_lab = color.rgb2lab(in_img)
58 | if(mean_cent):
59 | img_lab[:,:,0] = img_lab[:,:,0]-50
60 | return img_lab
61 |
62 | def tensor2np(tensor_obj):
63 | # change dimension of a tensor object into a numpy array
64 | return tensor_obj[0].cpu().float().numpy().transpose((1,2,0))
65 |
66 | def np2tensor(np_obj):
67 | # change dimenion of np array into tensor array
68 | return torch.Tensor(np_obj[:, :, :, np.newaxis].transpose((3, 2, 0, 1)))
69 |
70 | def tensor2tensorlab(image_tensor,to_norm=True,mc_only=False):
71 | # image tensor to lab tensor
72 | from skimage import color
73 |
74 | img = tensor2im(image_tensor)
75 | img_lab = color.rgb2lab(img)
76 | if(mc_only):
77 | img_lab[:,:,0] = img_lab[:,:,0]-50
78 | if(to_norm and not mc_only):
79 | img_lab[:,:,0] = img_lab[:,:,0]-50
80 | img_lab = img_lab/100.
81 |
82 | return np2tensor(img_lab)
83 |
84 | def tensorlab2tensor(lab_tensor,return_inbnd=False):
85 | from skimage import color
86 | import warnings
87 | warnings.filterwarnings("ignore")
88 |
89 | lab = tensor2np(lab_tensor)*100.
90 | lab[:,:,0] = lab[:,:,0]+50
91 |
92 | rgb_back = 255.*np.clip(color.lab2rgb(lab.astype('float')),0,1)
93 | if(return_inbnd):
94 | # convert back to lab, see if we match
95 | lab_back = color.rgb2lab(rgb_back.astype('uint8'))
96 | mask = 1.*np.isclose(lab_back,lab,atol=2.)
97 | mask = np2tensor(np.prod(mask,axis=2)[:,:,np.newaxis])
98 | return (im2tensor(rgb_back),mask)
99 | else:
100 | return im2tensor(rgb_back)
101 |
102 | def rgb2lab(input):
103 | from skimage import color
104 | return color.rgb2lab(input / 255.)
105 |
106 | def tensor2im(image_tensor, imtype=np.uint8, cent=1., factor=255./2.):
107 | image_numpy = image_tensor[0].cpu().float().numpy()
108 | image_numpy = (np.transpose(image_numpy, (1, 2, 0)) + cent) * factor
109 | return image_numpy.astype(imtype)
110 |
111 | def im2tensor(image, imtype=np.uint8, cent=1., factor=255./2.):
112 | return torch.Tensor((image / factor - cent)
113 | [:, :, :, np.newaxis].transpose((3, 2, 0, 1)))
114 |
115 | def tensor2vec(vector_tensor):
116 | return vector_tensor.data.cpu().numpy()[:, :, 0, 0]
117 |
118 | def voc_ap(rec, prec, use_07_metric=False):
119 | """ ap = voc_ap(rec, prec, [use_07_metric])
120 | Compute VOC AP given precision and recall.
121 | If use_07_metric is true, uses the
122 | VOC 07 11 point method (default:False).
123 | """
124 | if use_07_metric:
125 | # 11 point metric
126 | ap = 0.
127 | for t in np.arange(0., 1.1, 0.1):
128 | if np.sum(rec >= t) == 0:
129 | p = 0
130 | else:
131 | p = np.max(prec[rec >= t])
132 | ap = ap + p / 11.
133 | else:
134 | # correct AP calculation
135 | # first append sentinel values at the end
136 | mrec = np.concatenate(([0.], rec, [1.]))
137 | mpre = np.concatenate(([0.], prec, [0.]))
138 |
139 | # compute the precision envelope
140 | for i in range(mpre.size - 1, 0, -1):
141 | mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i])
142 |
143 | # to calculate area under PR curve, look for points
144 | # where X axis (recall) changes value
145 | i = np.where(mrec[1:] != mrec[:-1])[0]
146 |
147 | # and sum (\Delta recall) * prec
148 | ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])
149 | return ap
150 |
151 | def tensor2im(image_tensor, imtype=np.uint8, cent=1., factor=255./2.):
152 | # def tensor2im(image_tensor, imtype=np.uint8, cent=1., factor=1.):
153 | image_numpy = image_tensor[0].cpu().float().numpy()
154 | image_numpy = (np.transpose(image_numpy, (1, 2, 0)) + cent) * factor
155 | return image_numpy.astype(imtype)
156 |
157 | def im2tensor(image, imtype=np.uint8, cent=1., factor=255./2.):
158 | # def im2tensor(image, imtype=np.uint8, cent=1., factor=1.):
159 | return torch.Tensor((image / factor - cent)
160 | [:, :, :, np.newaxis].transpose((3, 2, 0, 1)))
161 |
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/base_model.py:
--------------------------------------------------------------------------------
1 | import os
2 | import torch
3 | from torch.autograd import Variable
4 | from pdb import set_trace as st
5 | from IPython import embed
6 |
7 | class BaseModel():
8 | def __init__(self):
9 | pass;
10 |
11 | def name(self):
12 | return 'BaseModel'
13 |
14 | def initialize(self, use_gpu=True, gpu_ids=[0]):
15 | self.use_gpu = use_gpu
16 | self.gpu_ids = gpu_ids
17 |
18 | def forward(self):
19 | pass
20 |
21 | def get_image_paths(self):
22 | pass
23 |
24 | def optimize_parameters(self):
25 | pass
26 |
27 | def get_current_visuals(self):
28 | return self.input
29 |
30 | def get_current_errors(self):
31 | return {}
32 |
33 | def save(self, label):
34 | pass
35 |
36 | # helper saving function that can be used by subclasses
37 | def save_network(self, network, path, network_label, epoch_label):
38 | save_filename = '%s_net_%s.pth' % (epoch_label, network_label)
39 | save_path = os.path.join(path, save_filename)
40 | torch.save(network.state_dict(), save_path)
41 |
42 | # helper loading function that can be used by subclasses
43 | def load_network(self, network, network_label, epoch_label):
44 | save_filename = '%s_net_%s.pth' % (epoch_label, network_label)
45 | save_path = os.path.join(self.save_dir, save_filename)
46 | print('Loading network from %s'%save_path)
47 | network.load_state_dict(torch.load(save_path))
48 |
49 | def update_learning_rate():
50 | pass
51 |
52 | def get_image_paths(self):
53 | return self.image_paths
54 |
55 | def save_done(self, flag=False):
56 | np.save(os.path.join(self.save_dir, 'done_flag'),flag)
57 | np.savetxt(os.path.join(self.save_dir, 'done_flag'),[flag,],fmt='%i')
58 |
59 |
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/weights/v0.0/alex.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/lpips/weights/v0.0/alex.pth
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/weights/v0.0/squeeze.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/lpips/weights/v0.0/squeeze.pth
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/weights/v0.0/vgg.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/lpips/weights/v0.0/vgg.pth
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/weights/v0.1/alex.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/lpips/weights/v0.1/alex.pth
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/weights/v0.1/squeeze.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/lpips/weights/v0.1/squeeze.pth
--------------------------------------------------------------------------------
/latent_decoder_model/lpips/weights/v0.1/vgg.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/lpips/weights/v0.1/vgg.pth
--------------------------------------------------------------------------------
/latent_decoder_model/model/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/latent_decoder_model/model/__init__.py
--------------------------------------------------------------------------------
/latent_decoder_model/op/__init__.py:
--------------------------------------------------------------------------------
1 | from .fused_act import FusedLeakyReLU, fused_leaky_relu
2 | from .upfirdn2d import upfirdn2d
3 |
--------------------------------------------------------------------------------
/latent_decoder_model/op/fused_act.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import torch
4 | from torch import nn
5 | from torch.autograd import Function
6 | from torch.utils.cpp_extension import load
7 |
8 |
9 | module_path = os.path.dirname(__file__)
10 | fused = load(
11 | 'fused',
12 | sources=[
13 | os.path.join(module_path, 'fused_bias_act.cpp'),
14 | os.path.join(module_path, 'fused_bias_act_kernel.cu'),
15 | ],
16 | verbose=True
17 | )
18 |
19 |
20 |
21 | class FusedLeakyReLUFunctionBackward(Function):
22 | @staticmethod
23 | def forward(ctx, grad_output, out, negative_slope, scale):
24 | ctx.save_for_backward(out)
25 | ctx.negative_slope = negative_slope
26 | ctx.scale = scale
27 |
28 | empty = grad_output.new_empty(0)
29 |
30 | grad_input = fused.fused_bias_act(
31 | grad_output, empty, out, 3, 1, negative_slope, scale
32 | )
33 |
34 | dim = [0]
35 |
36 | if grad_input.ndim > 2:
37 | dim += list(range(2, grad_input.ndim))
38 |
39 | grad_bias = grad_input.sum(dim).detach()
40 |
41 | return grad_input, grad_bias
42 |
43 | @staticmethod
44 | def backward(ctx, gradgrad_input, gradgrad_bias):
45 | out, = ctx.saved_tensors
46 | gradgrad_out = fused.fused_bias_act(
47 | gradgrad_input, gradgrad_bias, out, 3, 1, ctx.negative_slope, ctx.scale
48 | )
49 |
50 | return gradgrad_out, None, None, None
51 |
52 |
53 | class FusedLeakyReLUFunction(Function):
54 | @staticmethod
55 | def forward(ctx, input, bias, negative_slope, scale):
56 | empty = input.new_empty(0)
57 | out = fused.fused_bias_act(input, bias, empty, 3, 0, negative_slope, scale)
58 | ctx.save_for_backward(out)
59 | ctx.negative_slope = negative_slope
60 | ctx.scale = scale
61 |
62 | return out
63 |
64 | @staticmethod
65 | def backward(ctx, grad_output):
66 | out, = ctx.saved_tensors
67 |
68 | grad_input, grad_bias = FusedLeakyReLUFunctionBackward.apply(
69 | grad_output, out, ctx.negative_slope, ctx.scale
70 | )
71 |
72 | return grad_input, grad_bias, None, None
73 |
74 |
75 | class FusedLeakyReLU(nn.Module):
76 | def __init__(self, channel, negative_slope=0.2, scale=2 ** 0.5):
77 | super().__init__()
78 |
79 | self.bias = nn.Parameter(torch.zeros(channel))
80 | self.negative_slope = negative_slope
81 | self.scale = scale
82 |
83 | def forward(self, input):
84 | return fused_leaky_relu(input, self.bias, self.negative_slope, self.scale)
85 |
86 |
87 | def fused_leaky_relu(input, bias, negative_slope=0.2, scale=2 ** 0.5):
88 | return FusedLeakyReLUFunction.apply(input, bias, negative_slope, scale)
89 |
--------------------------------------------------------------------------------
/latent_decoder_model/op/fused_bias_act.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 |
4 | torch::Tensor fused_bias_act_op(const torch::Tensor& input, const torch::Tensor& bias, const torch::Tensor& refer,
5 | int act, int grad, float alpha, float scale);
6 |
7 | #define CHECK_CUDA(x) TORCH_CHECK(x.type().is_cuda(), #x " must be a CUDA tensor")
8 | #define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be contiguous")
9 | #define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)
10 |
11 | torch::Tensor fused_bias_act(const torch::Tensor& input, const torch::Tensor& bias, const torch::Tensor& refer,
12 | int act, int grad, float alpha, float scale) {
13 | CHECK_CUDA(input);
14 | CHECK_CUDA(bias);
15 |
16 | return fused_bias_act_op(input, bias, refer, act, grad, alpha, scale);
17 | }
18 |
19 | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
20 | m.def("fused_bias_act", &fused_bias_act, "fused bias act (CUDA)");
21 | }
--------------------------------------------------------------------------------
/latent_decoder_model/op/fused_bias_act_kernel.cu:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
2 | //
3 | // This work is made available under the Nvidia Source Code License-NC.
4 | // To view a copy of this license, visit
5 | // https://nvlabs.github.io/stylegan2/license.html
6 |
7 | #include
8 |
9 | #include
10 | #include
11 | #include
12 | #include
13 |
14 | #include
15 | #include
16 |
17 |
18 | template
19 | static __global__ void fused_bias_act_kernel(scalar_t* out, const scalar_t* p_x, const scalar_t* p_b, const scalar_t* p_ref,
20 | int act, int grad, scalar_t alpha, scalar_t scale, int loop_x, int size_x, int step_b, int size_b, int use_bias, int use_ref) {
21 | int xi = blockIdx.x * loop_x * blockDim.x + threadIdx.x;
22 |
23 | scalar_t zero = 0.0;
24 |
25 | for (int loop_idx = 0; loop_idx < loop_x && xi < size_x; loop_idx++, xi += blockDim.x) {
26 | scalar_t x = p_x[xi];
27 |
28 | if (use_bias) {
29 | x += p_b[(xi / step_b) % size_b];
30 | }
31 |
32 | scalar_t ref = use_ref ? p_ref[xi] : zero;
33 |
34 | scalar_t y;
35 |
36 | switch (act * 10 + grad) {
37 | default:
38 | case 10: y = x; break;
39 | case 11: y = x; break;
40 | case 12: y = 0.0; break;
41 |
42 | case 30: y = (x > 0.0) ? x : x * alpha; break;
43 | case 31: y = (ref > 0.0) ? x : x * alpha; break;
44 | case 32: y = 0.0; break;
45 | }
46 |
47 | out[xi] = y * scale;
48 | }
49 | }
50 |
51 |
52 | torch::Tensor fused_bias_act_op(const torch::Tensor& input, const torch::Tensor& bias, const torch::Tensor& refer,
53 | int act, int grad, float alpha, float scale) {
54 | int curDevice = -1;
55 | cudaGetDevice(&curDevice);
56 | cudaStream_t stream = at::cuda::getCurrentCUDAStream(curDevice);
57 |
58 | auto x = input.contiguous();
59 | auto b = bias.contiguous();
60 | auto ref = refer.contiguous();
61 |
62 | int use_bias = b.numel() ? 1 : 0;
63 | int use_ref = ref.numel() ? 1 : 0;
64 |
65 | int size_x = x.numel();
66 | int size_b = b.numel();
67 | int step_b = 1;
68 |
69 | for (int i = 1 + 1; i < x.dim(); i++) {
70 | step_b *= x.size(i);
71 | }
72 |
73 | int loop_x = 4;
74 | int block_size = 4 * 32;
75 | int grid_size = (size_x - 1) / (loop_x * block_size) + 1;
76 |
77 | auto y = torch::empty_like(x);
78 |
79 | AT_DISPATCH_FLOATING_TYPES_AND_HALF(x.scalar_type(), "fused_bias_act_kernel", [&] {
80 | fused_bias_act_kernel<<>>(
81 | y.data_ptr(),
82 | x.data_ptr(),
83 | b.data_ptr(),
84 | ref.data_ptr(),
85 | act,
86 | grad,
87 | alpha,
88 | scale,
89 | loop_x,
90 | size_x,
91 | step_b,
92 | size_b,
93 | use_bias,
94 | use_ref
95 | );
96 | });
97 |
98 | return y;
99 | }
--------------------------------------------------------------------------------
/latent_decoder_model/op/upfirdn2d.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 |
4 | torch::Tensor upfirdn2d_op(const torch::Tensor& input, const torch::Tensor& kernel,
5 | int up_x, int up_y, int down_x, int down_y,
6 | int pad_x0, int pad_x1, int pad_y0, int pad_y1);
7 |
8 | #define CHECK_CUDA(x) TORCH_CHECK(x.type().is_cuda(), #x " must be a CUDA tensor")
9 | #define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be contiguous")
10 | #define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)
11 |
12 | torch::Tensor upfirdn2d(const torch::Tensor& input, const torch::Tensor& kernel,
13 | int up_x, int up_y, int down_x, int down_y,
14 | int pad_x0, int pad_x1, int pad_y0, int pad_y1) {
15 | CHECK_CUDA(input);
16 | CHECK_CUDA(kernel);
17 |
18 | return upfirdn2d_op(input, kernel, up_x, up_y, down_x, down_y, pad_x0, pad_x1, pad_y0, pad_y1);
19 | }
20 |
21 | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
22 | m.def("upfirdn2d", &upfirdn2d, "upfirdn2d (CUDA)");
23 | }
--------------------------------------------------------------------------------
/latent_decoder_model/op/upfirdn2d.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import torch
4 | from torch.autograd import Function
5 | from torch.utils.cpp_extension import load
6 |
7 |
8 | module_path = os.path.dirname(__file__)
9 | upfirdn2d_op = load(
10 | 'upfirdn2d',
11 | sources=[
12 | os.path.join(module_path, 'upfirdn2d.cpp'),
13 | os.path.join(module_path, 'upfirdn2d_kernel.cu'),
14 | ],
15 | )
16 |
17 |
18 | class UpFirDn2dBackward(Function):
19 | @staticmethod
20 | def forward(
21 | ctx, grad_output, kernel, grad_kernel, up, down, pad, g_pad, in_size, out_size
22 | ):
23 |
24 | up_x, up_y = up
25 | down_x, down_y = down
26 | g_pad_x0, g_pad_x1, g_pad_y0, g_pad_y1 = g_pad
27 |
28 | grad_output = grad_output.reshape(-1, out_size[0], out_size[1], 1)
29 |
30 | grad_input = upfirdn2d_op.upfirdn2d(
31 | grad_output,
32 | grad_kernel,
33 | down_x,
34 | down_y,
35 | up_x,
36 | up_y,
37 | g_pad_x0,
38 | g_pad_x1,
39 | g_pad_y0,
40 | g_pad_y1,
41 | )
42 | grad_input = grad_input.view(in_size[0], in_size[1], in_size[2], in_size[3])
43 |
44 | ctx.save_for_backward(kernel)
45 |
46 | pad_x0, pad_x1, pad_y0, pad_y1 = pad
47 |
48 | ctx.up_x = up_x
49 | ctx.up_y = up_y
50 | ctx.down_x = down_x
51 | ctx.down_y = down_y
52 | ctx.pad_x0 = pad_x0
53 | ctx.pad_x1 = pad_x1
54 | ctx.pad_y0 = pad_y0
55 | ctx.pad_y1 = pad_y1
56 | ctx.in_size = in_size
57 | ctx.out_size = out_size
58 |
59 | return grad_input
60 |
61 | @staticmethod
62 | def backward(ctx, gradgrad_input):
63 | kernel, = ctx.saved_tensors
64 |
65 | gradgrad_input = gradgrad_input.reshape(-1, ctx.in_size[2], ctx.in_size[3], 1)
66 |
67 | gradgrad_out = upfirdn2d_op.upfirdn2d(
68 | gradgrad_input,
69 | kernel,
70 | ctx.up_x,
71 | ctx.up_y,
72 | ctx.down_x,
73 | ctx.down_y,
74 | ctx.pad_x0,
75 | ctx.pad_x1,
76 | ctx.pad_y0,
77 | ctx.pad_y1,
78 | )
79 | # gradgrad_out = gradgrad_out.view(ctx.in_size[0], ctx.out_size[0], ctx.out_size[1], ctx.in_size[3])
80 | gradgrad_out = gradgrad_out.view(
81 | ctx.in_size[0], ctx.in_size[1], ctx.out_size[0], ctx.out_size[1]
82 | )
83 |
84 | return gradgrad_out, None, None, None, None, None, None, None, None
85 |
86 |
87 | class UpFirDn2d(Function):
88 | @staticmethod
89 | def forward(ctx, input, kernel, up, down, pad):
90 | up_x, up_y = up
91 | down_x, down_y = down
92 | pad_x0, pad_x1, pad_y0, pad_y1 = pad
93 |
94 | kernel_h, kernel_w = kernel.shape
95 | batch, channel, in_h, in_w = input.shape
96 | ctx.in_size = input.shape
97 |
98 | input = input.reshape(-1, in_h, in_w, 1)
99 |
100 | ctx.save_for_backward(kernel, torch.flip(kernel, [0, 1]))
101 |
102 | out_h = (in_h * up_y + pad_y0 + pad_y1 - kernel_h) // down_y + 1
103 | out_w = (in_w * up_x + pad_x0 + pad_x1 - kernel_w) // down_x + 1
104 | ctx.out_size = (out_h, out_w)
105 |
106 | ctx.up = (up_x, up_y)
107 | ctx.down = (down_x, down_y)
108 | ctx.pad = (pad_x0, pad_x1, pad_y0, pad_y1)
109 |
110 | g_pad_x0 = kernel_w - pad_x0 - 1
111 | g_pad_y0 = kernel_h - pad_y0 - 1
112 | g_pad_x1 = in_w * up_x - out_w * down_x + pad_x0 - up_x + 1
113 | g_pad_y1 = in_h * up_y - out_h * down_y + pad_y0 - up_y + 1
114 |
115 | ctx.g_pad = (g_pad_x0, g_pad_x1, g_pad_y0, g_pad_y1)
116 |
117 | out = upfirdn2d_op.upfirdn2d(
118 | input, kernel, up_x, up_y, down_x, down_y, pad_x0, pad_x1, pad_y0, pad_y1
119 | )
120 | # out = out.view(major, out_h, out_w, minor)
121 | out = out.view(-1, channel, out_h, out_w)
122 |
123 | return out
124 |
125 | @staticmethod
126 | def backward(ctx, grad_output):
127 | kernel, grad_kernel = ctx.saved_tensors
128 |
129 | grad_input = UpFirDn2dBackward.apply(
130 | grad_output,
131 | kernel,
132 | grad_kernel,
133 | ctx.up,
134 | ctx.down,
135 | ctx.pad,
136 | ctx.g_pad,
137 | ctx.in_size,
138 | ctx.out_size,
139 | )
140 |
141 | return grad_input, None, None, None, None
142 |
143 |
144 | def upfirdn2d(input, kernel, up=1, down=1, pad=(0, 0)):
145 | out = UpFirDn2d.apply(
146 | input, kernel, (up, up), (down, down), (pad[0], pad[1], pad[0], pad[1])
147 | )
148 |
149 | return out
150 |
151 |
152 | def upfirdn2d_native(
153 | input, kernel, up_x, up_y, down_x, down_y, pad_x0, pad_x1, pad_y0, pad_y1
154 | ):
155 | _, in_h, in_w, minor = input.shape
156 | kernel_h, kernel_w = kernel.shape
157 |
158 | out = input.view(-1, in_h, 1, in_w, 1, minor)
159 | out = F.pad(out, [0, 0, 0, up_x - 1, 0, 0, 0, up_y - 1])
160 | out = out.view(-1, in_h * up_y, in_w * up_x, minor)
161 |
162 | out = F.pad(
163 | out, [0, 0, max(pad_x0, 0), max(pad_x1, 0), max(pad_y0, 0), max(pad_y1, 0)]
164 | )
165 | out = out[
166 | :,
167 | max(-pad_y0, 0) : out.shape[1] - max(-pad_y1, 0),
168 | max(-pad_x0, 0) : out.shape[2] - max(-pad_x1, 0),
169 | :,
170 | ]
171 |
172 | out = out.permute(0, 3, 1, 2)
173 | out = out.reshape(
174 | [-1, 1, in_h * up_y + pad_y0 + pad_y1, in_w * up_x + pad_x0 + pad_x1]
175 | )
176 | w = torch.flip(kernel, [0, 1]).view(1, 1, kernel_h, kernel_w)
177 | out = F.conv2d(out, w)
178 | out = out.reshape(
179 | -1,
180 | minor,
181 | in_h * up_y + pad_y0 + pad_y1 - kernel_h + 1,
182 | in_w * up_x + pad_x0 + pad_x1 - kernel_w + 1,
183 | )
184 | out = out.permute(0, 2, 3, 1)
185 |
186 | return out[:, ::down_y, ::down_x, :]
187 |
--------------------------------------------------------------------------------
/latent_decoder_model/scripts/encode.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 |
5 |
6 | ckpt=$1
7 | num_chunk=$2
8 | cur_ind=$3
9 | src_dir=$4
10 | out_dir=$5
11 |
12 | common_command="
13 | python -m torch.distributed.launch --nproc_per_node=1 --master_port=6003 projector_z.py \
14 | --data_path ${src_dir} \
15 | --ckpt ${ckpt} --size 256 --dataset carla --results_path ${out_dir} \
16 | --test 1 --num_div_batch 4
17 | "
18 |
19 |
20 | CUDA_VISIBLE_DEVICES=0 ${common_command} --num_chunk ${num_chunk} --cur_ind $((cur_ind)) &
21 |
22 | ## use multiple commands to parallelize e.g.
23 | # CUDA_VISIBLE_DEVICES=0 ${common_command} --num_chunk ${num_chunk} --cur_ind $((cur_ind)) &
24 | # CUDA_VISIBLE_DEVICES=1 ${common_command} --num_chunk ${num_chunk} --cur_ind $((cur_ind+1)) &
25 | # CUDA_VISIBLE_DEVICES=2 ${common_command} --num_chunk ${num_chunk} --cur_ind $((cur_ind+2)) &
26 | # CUDA_VISIBLE_DEVICES=3 ${common_command} --num_chunk ${num_chunk} --cur_ind $((cur_ind+3)) &
27 |
--------------------------------------------------------------------------------
/latent_decoder_model/scripts/train.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | src_dir=$1
4 |
5 | python -m torch.distributed.launch --nproc_per_node=4 --master_port=6003 main.py \
6 | --path ${src_dir} \
7 | --batch 6 \
8 | --size 256 \
9 | --dataset carla \
10 | --gamma 50.0 \
11 | --theme_beta 1.0 \
12 | --spatial_beta 2.0 \
13 | --log_dir ./logs/vaegan
14 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | termcolor
2 | opencv-python
3 | moviepy
4 | scikit-image
5 | IPython
6 | tornado
7 | simplejson
8 | torch==1.7.1
9 | torchvision==0.8.2
10 | tensorboard
11 |
--------------------------------------------------------------------------------
/scripts/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/scripts/__init__.py
--------------------------------------------------------------------------------
/scripts/play/server.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 |
4 | modelPath=$1
5 | port=$2
6 | latent_decoder_model_path=$3
7 |
8 |
9 | python server.py \
10 | --saved_model ${modelPath} \
11 | --initial_screen rand \
12 | --play \
13 | --seed 222 \
14 | --gpu 0 \
15 | --port ${port} \
16 | --latent_decoder_model_path ${latent_decoder_model_path} \
17 |
--------------------------------------------------------------------------------
/scripts/train.sh:
--------------------------------------------------------------------------------
1 |
2 | src_dir=$1
3 | vae_path=$2
4 |
5 | python -m torch.distributed.launch --nproc_per_node=1 --master_port=6003 main_parallel.py \
6 | --latent_decoder_model_path ${vae_path} \
7 | --log_dir logs/carla \
8 | --save_epoch 30 \
9 | --num_gpu 1 \
10 | --img_size 128 \
11 | --num_steps 32 \
12 | --warm_up 18 \
13 | --bs 128 \
14 | --hidden_dim 1536 \
15 | --recon_loss_multiplier 0.1 \
16 | --nfilterD_temp 32 \
17 | --LAMBDA_temporal 1.0 \
18 | --continuous_action True \
19 | --gen_content_loss_multiplier 1.5 \
20 | --lstm_num_layer 4 \
21 | --eval_epoch 10 \
22 | --disentangle_style True \
23 | --latent_z_size 1152 \
24 | --convLSTM_hidden_dim 128 \
25 | --warmup_decay_step 90000 \
26 | --content_kl_beta 0.1 \
27 | --style_kl_beta 1.0 \
28 | --theme_kl_beta 1.0 \
29 | --separate_holistic_style_dim 128 \
30 | --data carla_latent:${src_dir}
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | -
49 |
--------------------------------------------------------------------------------
/simulator_model/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nv-tlabs/DriveGAN_code/25ba1cf5cd77a5e1931ce80770f7d3fd4e2796a2/simulator_model/__init__.py
--------------------------------------------------------------------------------
/simulator_model/model_utils.py:
--------------------------------------------------------------------------------
1 | """
2 | Copyright (C) 2021 NVIDIA Corporation. All rights reserved.
3 | Licensed under the NVIDIA Source Code License. See LICENSE at the main github page.
4 | Authors: Seung Wook Kim, Jonah Philion, Antonio Torralba, Sanja Fidler
5 | """
6 | import torch
7 | from torch import nn
8 | from torch.nn import functional as F
9 | from simulator_model import layers
10 | import functools
11 | import sys
12 | sys.path.append('..')
13 |
14 | class convLinearSPADE(nn.Module):
15 | def __init__(self, channel, h, w, linear_input_channel, opts):
16 | super().__init__()
17 | self.h = h
18 | self.w = w
19 | self.param_free_norm = nn.InstanceNorm2d(channel, affine=False)
20 |
21 | self.mlp_gamma = nn.Linear(linear_input_channel, channel)
22 | self.mlp_beta = nn.Linear(linear_input_channel, channel)
23 | self.activation = nn.LeakyReLU(0.2)
24 |
25 | def forward(self, x, y, resize=True):
26 | if resize:
27 | x = x.view(x.size(0), -1, self.h, self.w)
28 | normalized = self.param_free_norm(x)
29 | y = y.view(y.size(0), -1)
30 | gamma = self.mlp_gamma(y).view(y.size(0), -1, 1, 1)
31 | beta = self.mlp_beta(y).view(y.size(0), -1, 1, 1)
32 |
33 | out = normalized * (1 + gamma) + beta
34 |
35 | return self.activation(out)
36 |
37 | class View(nn.Module):
38 | def __init__(self, size):
39 | super(View, self).__init__()
40 | self.size = size
41 |
42 | def forward(self, tensor):
43 | return tensor.view(self.size)
44 |
45 |
46 | def choose_netG_encoder(input_dim=512, basechannel=512, opts=None):
47 | enc = nn.Sequential(
48 | nn.Linear(input_dim, basechannel),
49 | nn.LeakyReLU(0.2),
50 | nn.Linear(basechannel, basechannel),
51 | nn.LeakyReLU(0.2),
52 | nn.Linear(basechannel, basechannel),
53 | nn.LeakyReLU(0.2),
54 | nn.Linear(basechannel, basechannel),
55 | nn.LeakyReLU(0.2)
56 | )
57 |
58 | return enc
59 |
60 |
61 |
62 | def choose_netD_temporal(opts, conv3d_dim, window=[]):
63 | in_dim = opts.nfilterD * 16
64 | in_dim = in_dim * 2
65 | extractors, finals = [], []
66 |
67 | which_conv = functools.partial(layers.SNConv2d,
68 | kernel_size=3, padding=0,
69 | num_svs=1, num_itrs=1,
70 | eps=1e-12)
71 |
72 | net1 = nn.Sequential(
73 | which_conv(in_dim, conv3d_dim // 4, kernel_size=(3, 1), stride=(2, 1)),
74 | nn.LeakyReLU(0.2)
75 | )
76 |
77 | head1 = nn.Sequential(
78 | which_conv(conv3d_dim // 4, 1, kernel_size=(2, 1), stride=(1, 1)),
79 | )
80 | extractors.append(net1)
81 | finals.append(head1)
82 |
83 | if window >= 12:
84 | net2 = nn.Sequential(
85 | which_conv(conv3d_dim // 4, conv3d_dim // 2, kernel_size=(3, 1), stride=(1, 1)),
86 | nn.LeakyReLU(0.2),
87 | )
88 | head2 = nn.Sequential(
89 | which_conv(conv3d_dim // 2, 1, kernel_size=(3, 1)),
90 | )
91 | extractors.append(net2)
92 | finals.append(head2)
93 |
94 | if window >= 18:
95 | net3 = nn.Sequential(
96 | which_conv(conv3d_dim // 2, conv3d_dim, kernel_size=(2, 1), stride=(2, 1)),
97 | nn.LeakyReLU(0.2),
98 | )
99 | head3 = nn.Sequential(
100 | which_conv(conv3d_dim, 1, kernel_size=(3, 1)),
101 | )
102 | extractors.append(net3)
103 | finals.append(head3)
104 |
105 | if window >= 36:
106 | net4 = nn.Sequential(
107 | which_conv(conv3d_dim, conv3d_dim, kernel_size=(2, 1), stride=(2, 1)),
108 | nn.LeakyReLU(0.2),
109 | )
110 | head4 = nn.Sequential(
111 | which_conv(conv3d_dim, 1, kernel_size=(3, 1)),
112 | )
113 | extractors.append(net4)
114 | finals.append(head4)
115 |
116 | return extractors, finals
117 |
--------------------------------------------------------------------------------
/visual_utils.py:
--------------------------------------------------------------------------------
1 | """
2 | Copyright (C) 2021 NVIDIA Corporation. All rights reserved.
3 | Licensed under the NVIDIA Source Code License. See LICENSE at the main github page.
4 | Authors: Seung Wook Kim, Jonah Philion, Antonio Torralba, Sanja Fidler
5 | """
6 |
7 | import torch
8 | import utils
9 | import numpy as np
10 | import torch.nn.functional as F
11 |
12 | def rescale(x):
13 | return (x + 1) * 0.5
14 |
15 | def visualize_tensor(tensor, name, logger, vutils, it, kind='video'):
16 | tensor = rescale(tensor)
17 | tensor = torch.clamp(tensor, 0, 1.0)
18 |
19 | if kind == 'image':
20 | x = vutils.make_grid(
21 | tensor, nrow=1,
22 | normalize=True, scale_each=True
23 | )
24 | logger.add_image(name, x, it)
25 | else:
26 | logger.add_video(name, tensor.unsqueeze(0), it)
27 |
28 |
29 | def write_action(actions, name, logger, it):
30 | s = ''
31 | for a in actions:
32 | s += str(a[:1].cpu().numpy())
33 | logger.add_text(name, s, it)
34 |
35 |
36 | def draw_output(gout, actions, false_actions, states, opts, vutils, logger, it, latent_decoder=None,
37 | tag='images'):
38 | img_size = opts.img_size
39 | if states is not None and latent_decoder is not None:
40 | bs = states[0].size(0)
41 | else:
42 | bs = 0
43 |
44 | if actions is not None:
45 | write_action(actions, tag+'actions', logger, it)
46 | if false_actions is not None:
47 | write_action(false_actions, tag+'false_actions', logger, it)
48 |
49 | vis_st = []
50 | for st in states:
51 | vis_st.append(st[0:1])
52 | states_ = torch.cat(vis_st, dim=0)
53 | states_ = utils.run_latent_decoder(latent_decoder, states_, opts=opts)
54 | visualize_tensor(states_, tag + '_output/GTImage', logger, vutils, it)
55 |
56 |
57 | vis_st = []
58 | for st in gout['outputs']:
59 | vis_st.append(st[0:1])
60 |
61 | x_gen = torch.cat(vis_st, dim=0)
62 | x_gen = utils.run_latent_decoder(latent_decoder, x_gen, opts=opts)
63 |
64 | if opts.disentangle_style and 'swap_outputs' in gout:
65 | vis_st = []
66 | for st in gout['swap_outputs']:
67 | vis_st.append(st[0:1])
68 | x_gen_swap = torch.cat(vis_st, dim=0)
69 | x_gen_swap = utils.run_latent_decoder(latent_decoder, x_gen_swap, opts=opts)
70 | visualize_tensor(x_gen_swap, tag + '_output/z_aindep_SwapGenImage', logger, vutils, it)
71 | if opts.separate_holistic_style_dim > 0 and 'holistic_swap_outputs' in gout:
72 | vis_st = []
73 | for st in gout['holistic_swap_outputs']:
74 | vis_st.append(st[0:1])
75 | x_gen_swap = torch.cat(vis_st, dim=0)
76 | x_gen_swap = utils.run_latent_decoder(latent_decoder, x_gen_swap, opts=opts)
77 | visualize_tensor(x_gen_swap, tag + '_output/z_theme_SwapGenImage', logger, vutils, it)
78 |
79 | visualize_tensor(x_gen, tag + '_output/GenImage', logger, vutils, it)
80 |
--------------------------------------------------------------------------------