├── .gitattributes ├── .gitignore ├── LICENSE ├── NOTICE ├── README.md ├── examples └── example.json ├── icons ├── Download.svg ├── Pause.svg └── Play.svg ├── models └── .gitignore ├── preview.png ├── requirements.txt ├── scripts ├── audioplayer.js ├── style.css ├── utils.js └── wavesurfer.esm.js ├── source ├── infer.py ├── song.py ├── ui.py └── yue │ ├── RepCodec │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── repcodec │ │ ├── RepCodec.py │ │ ├── configs │ │ │ ├── repcodec_dim1024.yaml │ │ │ ├── repcodec_dim1280.yaml │ │ │ └── repcodec_dim768.yaml │ │ ├── layers │ │ │ ├── conv_layer.py │ │ │ └── vq_module.py │ │ ├── modules │ │ │ ├── decoder.py │ │ │ ├── encoder.py │ │ │ ├── projector.py │ │ │ ├── quantizer.py │ │ │ └── residual_unit.py │ │ └── tokenize.py │ ├── setup.py │ ├── train.py │ ├── train_configs │ │ └── ex_dim768_mse.yaml │ └── trainer │ │ └── autoencoder.py │ ├── __init__.py │ ├── codecmanipulator.py │ ├── common.py │ ├── descriptaudiocodec │ └── dac │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── compare │ │ ├── __init__.py │ │ └── encodec.py │ │ ├── model │ │ ├── __init__.py │ │ ├── base.py │ │ ├── dac.py │ │ └── discriminator.py │ │ ├── nn │ │ ├── __init__.py │ │ ├── layers.py │ │ ├── loss.py │ │ └── quantize.py │ │ └── utils │ │ ├── __init__.py │ │ ├── decode.py │ │ └── encode.py │ ├── infer_postprocess.py │ ├── infer_stage1.py │ ├── infer_stage2.py │ ├── mm_tokenizer_v0.2_hf │ └── tokenizer.model │ ├── mmtokenizer.py │ ├── models │ ├── __init__.py │ └── soundstream_hubert_new.py │ ├── modules │ ├── __init__.py │ ├── conv.py │ ├── loss.py │ ├── lstm.py │ ├── norm.py │ ├── seanet.py │ └── transformer.py │ ├── post_process_audio.py │ ├── quantization │ ├── __init__.py │ ├── core_vq.py │ ├── core_vq_lsx_version.py │ ├── distrib.py │ └── vq.py │ ├── utils │ ├── __init__.py │ ├── ddp_utils.py │ └── utils.py │ ├── vocoder.py │ └── vocos │ ├── __init__.py │ ├── dataset.py │ ├── discriminators.py │ ├── experiment.py │ ├── feature_extractors.py │ ├── heads.py │ ├── helpers.py │ ├── loss.py │ ├── models.py │ ├── modules.py │ ├── pretrained.py │ └── spectral_ops.py ├── start_linux.sh ├── start_windows.bat └── top_200_tags.json /.gitattributes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/.gitattributes -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/LICENSE -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/NOTICE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/README.md -------------------------------------------------------------------------------- /examples/example.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/examples/example.json -------------------------------------------------------------------------------- /icons/Download.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/icons/Download.svg -------------------------------------------------------------------------------- /icons/Pause.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/icons/Pause.svg -------------------------------------------------------------------------------- /icons/Play.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/icons/Play.svg -------------------------------------------------------------------------------- /models/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/models/.gitignore -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/preview.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/requirements.txt -------------------------------------------------------------------------------- /scripts/audioplayer.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/scripts/audioplayer.js -------------------------------------------------------------------------------- /scripts/style.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/scripts/style.css -------------------------------------------------------------------------------- /scripts/utils.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/scripts/utils.js -------------------------------------------------------------------------------- /scripts/wavesurfer.esm.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/scripts/wavesurfer.esm.js -------------------------------------------------------------------------------- /source/infer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/infer.py -------------------------------------------------------------------------------- /source/song.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/song.py -------------------------------------------------------------------------------- /source/ui.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/ui.py -------------------------------------------------------------------------------- /source/yue/RepCodec/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/.gitignore -------------------------------------------------------------------------------- /source/yue/RepCodec/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/LICENSE -------------------------------------------------------------------------------- /source/yue/RepCodec/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/README.md -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/RepCodec.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/RepCodec.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/configs/repcodec_dim1024.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/configs/repcodec_dim1024.yaml -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/configs/repcodec_dim1280.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/configs/repcodec_dim1280.yaml -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/configs/repcodec_dim768.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/configs/repcodec_dim768.yaml -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/layers/conv_layer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/layers/conv_layer.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/layers/vq_module.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/layers/vq_module.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/modules/decoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/modules/decoder.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/modules/encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/modules/encoder.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/modules/projector.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/modules/projector.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/modules/quantizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/modules/quantizer.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/modules/residual_unit.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/modules/residual_unit.py -------------------------------------------------------------------------------- /source/yue/RepCodec/repcodec/tokenize.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/repcodec/tokenize.py -------------------------------------------------------------------------------- /source/yue/RepCodec/setup.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/setup.py -------------------------------------------------------------------------------- /source/yue/RepCodec/train.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/train.py -------------------------------------------------------------------------------- /source/yue/RepCodec/train_configs/ex_dim768_mse.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/train_configs/ex_dim768_mse.yaml -------------------------------------------------------------------------------- /source/yue/RepCodec/trainer/autoencoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/RepCodec/trainer/autoencoder.py -------------------------------------------------------------------------------- /source/yue/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/yue/codecmanipulator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/codecmanipulator.py -------------------------------------------------------------------------------- /source/yue/common.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/common.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/__init__.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/__main__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/__main__.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/compare/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/compare/encodec.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/compare/encodec.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/model/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/model/__init__.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/model/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/model/base.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/model/dac.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/model/dac.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/model/discriminator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/model/discriminator.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/nn/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/nn/__init__.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/nn/layers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/nn/layers.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/nn/loss.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/nn/loss.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/nn/quantize.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/nn/quantize.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/utils/__init__.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/utils/decode.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/utils/decode.py -------------------------------------------------------------------------------- /source/yue/descriptaudiocodec/dac/utils/encode.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/descriptaudiocodec/dac/utils/encode.py -------------------------------------------------------------------------------- /source/yue/infer_postprocess.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/infer_postprocess.py -------------------------------------------------------------------------------- /source/yue/infer_stage1.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/infer_stage1.py -------------------------------------------------------------------------------- /source/yue/infer_stage2.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/infer_stage2.py -------------------------------------------------------------------------------- /source/yue/mm_tokenizer_v0.2_hf/tokenizer.model: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/mm_tokenizer_v0.2_hf/tokenizer.model -------------------------------------------------------------------------------- /source/yue/mmtokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/mmtokenizer.py -------------------------------------------------------------------------------- /source/yue/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/yue/models/soundstream_hubert_new.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/models/soundstream_hubert_new.py -------------------------------------------------------------------------------- /source/yue/modules/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/__init__.py -------------------------------------------------------------------------------- /source/yue/modules/conv.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/conv.py -------------------------------------------------------------------------------- /source/yue/modules/loss.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/loss.py -------------------------------------------------------------------------------- /source/yue/modules/lstm.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/lstm.py -------------------------------------------------------------------------------- /source/yue/modules/norm.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/norm.py -------------------------------------------------------------------------------- /source/yue/modules/seanet.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/seanet.py -------------------------------------------------------------------------------- /source/yue/modules/transformer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/modules/transformer.py -------------------------------------------------------------------------------- /source/yue/post_process_audio.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/post_process_audio.py -------------------------------------------------------------------------------- /source/yue/quantization/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/quantization/__init__.py -------------------------------------------------------------------------------- /source/yue/quantization/core_vq.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/quantization/core_vq.py -------------------------------------------------------------------------------- /source/yue/quantization/core_vq_lsx_version.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/quantization/core_vq_lsx_version.py -------------------------------------------------------------------------------- /source/yue/quantization/distrib.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/quantization/distrib.py -------------------------------------------------------------------------------- /source/yue/quantization/vq.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/quantization/vq.py -------------------------------------------------------------------------------- /source/yue/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/yue/utils/ddp_utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/utils/ddp_utils.py -------------------------------------------------------------------------------- /source/yue/utils/utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/utils/utils.py -------------------------------------------------------------------------------- /source/yue/vocoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocoder.py -------------------------------------------------------------------------------- /source/yue/vocos/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/__init__.py -------------------------------------------------------------------------------- /source/yue/vocos/dataset.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/dataset.py -------------------------------------------------------------------------------- /source/yue/vocos/discriminators.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/discriminators.py -------------------------------------------------------------------------------- /source/yue/vocos/experiment.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/experiment.py -------------------------------------------------------------------------------- /source/yue/vocos/feature_extractors.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/feature_extractors.py -------------------------------------------------------------------------------- /source/yue/vocos/heads.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/heads.py -------------------------------------------------------------------------------- /source/yue/vocos/helpers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/helpers.py -------------------------------------------------------------------------------- /source/yue/vocos/loss.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/loss.py -------------------------------------------------------------------------------- /source/yue/vocos/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/models.py -------------------------------------------------------------------------------- /source/yue/vocos/modules.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/modules.py -------------------------------------------------------------------------------- /source/yue/vocos/pretrained.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/pretrained.py -------------------------------------------------------------------------------- /source/yue/vocos/spectral_ops.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/source/yue/vocos/spectral_ops.py -------------------------------------------------------------------------------- /start_linux.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/start_linux.sh -------------------------------------------------------------------------------- /start_windows.bat: -------------------------------------------------------------------------------- 1 | call ./venv/scripts/activate 2 | python source/ui.py -------------------------------------------------------------------------------- /top_200_tags.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeljuvel/YuE-UI/HEAD/top_200_tags.json --------------------------------------------------------------------------------