rp 0.1.1391__tar.gz → 0.1.1393__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rp-0.1.1391 → rp-0.1.1393}/PKG-INFO +1 -1
- rp-0.1.1393/rp/libs/kitten_tts_server.py +106 -0
- rp-0.1.1393/rp/libs/supertonic_tts_server.py +315 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/r.py +71 -8
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/path_completer_utils.py +2 -1
- rp-0.1.1393/rp/version.py +1 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp.egg-info/PKG-INFO +1 -1
- {rp-0.1.1391 → rp-0.1.1393}/rp.egg-info/SOURCES.txt +2 -0
- rp-0.1.1393/version.py +1 -0
- rp-0.1.1391/rp/version.py +0 -1
- rp-0.1.1391/version.py +0 -1
- {rp-0.1.1391 → rp-0.1.1393}/.gitignore +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/QuickPython.iml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/QuickPython.time +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/encodings.xml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/inspectionProfiles/Project_Default.xml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/misc.xml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/modules.xml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/vcs.xml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.idea/workspace.xml +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.publish.sh.un~ +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.setup.py.un~ +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/.update_module_paths.py.un~ +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/LICENSE.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/README +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/Scrap +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/aoisdasd +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/increment_version.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/oijio +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/publish.sh +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/pyqtconsoletest.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/__main__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/documentation.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/Pyperclip.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/debug_comment.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/draw_code_minimap.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/graveyard.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/_compatibility.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/cache.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/file_io.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/grammar.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/normalizer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/pgen2/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/pgen2/generator.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/pgen2/grammar_parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/diff.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/errors.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar26.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar27.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar310.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar311.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar312.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar33.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar34.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar35.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar36.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar37.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar38.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/grammar39.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/pep8.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/prefix.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/token.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/tokenize.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/python/tree.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/tree.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/parso/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/peepdis/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/peepdis/core.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/peepdis/datastructures.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/peepdis/legacy.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/peepdis/preferences.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/__main__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/convert_pptx_videos_to_gifs.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/convert_tmux.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/google_slides_upload.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/media_to_slides.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint/pptx_utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/powerpoint_converter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/profile_vim_plugins.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pw_crypt.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/bindings/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/bindings/flann_ctypes.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/exceptions.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/index.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/io/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/io/binary_dataset.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/io/dat_dataset.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/io/dataset.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/io/hdf5_dataset.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/io/npy_dataset.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/util/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyflann/util/weave_tools.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/__version__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/app.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/cli.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/cli_utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/config.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/config_error.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/config_parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/config_transformer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/validators/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/config/validators/options.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/logging.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/autocomplete/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/autocomplete/autocomplete_listener.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/common/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/common/jsonpath/JSONPathLexer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/common/jsonpath/JSONPathListener.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/common/jsonpath/JSONPathParser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/common/jsonpath/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/io/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/io/datasource.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/model/model.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/service/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/service/client.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/service/dispatcher.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/common/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/common/popup.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/common/selectable_text.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/autocomplete_popup/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup_keymapper.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/help_bar/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/help_bar/help_bar.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/help_page/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/help_page/detailed_help_page.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/json_browser/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/json_browser/json_browser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/json_browser/json_browser_keymapper.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/query_bar/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/query_bar/query_bar.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/components/query_bar/query_bar_keymapper.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/array/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/array/array_end_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/array/array_end_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/array/array_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/array/array_start_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/array/array_unexpanded_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/json_composite_end_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/json_composite_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/json_listbox.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/json_listwalker.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/json_simple_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/json_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/node_factory.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/object/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/object/object_end_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/object/object_end_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/object/object_node.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/object/object_start_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/object/object_unexpanded_widget.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/boolean.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/generic.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/integer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/null.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/numeric.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/primitive/string.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/json_lib/selector/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/keymapper/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/keymapper/abstract_component_keymapper.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/keymapper/keymapper.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/keymapper/keymapper_config.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/keymapper/keymapper_config_parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/theme/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/theme/theme.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/theme/theme_config.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/theme/theme_config_parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/view_config.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/view_frame.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pyfx/view/view_manager.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pynput_recorder.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pypi_inspection.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/pytorch_module_explorer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/refactor/string_format/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/refactor/string_format/format_to_fstring_converter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/refactor/string_format/fstring_converter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/refactor/string_format/test_format_to_fstring_converter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/refactor/string_format/test_fstring_converter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/rp_black_macchiato.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/stamp_tensor.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/stdin_python_highlighter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/__main__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/canvas.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/colors.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/console.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/funcs.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/nbinput.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/shapes.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/graphics/graphics/sprite.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/letters.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tetris/tetrisShapes.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/__main__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/argparser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/meta.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/methods/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/methods/ansi.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/methods/ansi_methods.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/methods/ascii.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/methods/method.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/methods/sixel.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/timg/renderer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/torch_hooks.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/torch_tools.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tracetraptest.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/tweenline.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/libs/webeval_dataset.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/list_of_modules.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/Todo +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/blm.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/chainsaw.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/claude_bash.sh +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/claude_panel.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/death_of_the_mind.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/flappy.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/mario.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/matrix.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/mpi_untitled.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/py2048.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/pychess.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/rp_logo.svg +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/rp_mpi.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/ryan_zshrc.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/shotgun.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/skia_trail_interactive_paint_demo.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/snake.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/sudoku.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/tetris.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/misc/trans.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/application.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/auto_suggest.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/buffer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/buffer_mapping.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/cache.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/clipboard/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/clipboard/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/clipboard/in_memory.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/clipboard/pyperclip.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/completion.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/completers/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/completers/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/completers/filesystem.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/completers/system.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/regular_languages/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/regular_languages/compiler.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/regular_languages/completion.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/regular_languages/lexer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/regular_languages/regex_parser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/regular_languages/validation.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/telnet/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/telnet/application.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/telnet/log.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/telnet/protocol.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/telnet/server.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/validators/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/contrib/validators/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/document.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/enums.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/asyncio_base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/asyncio_posix.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/asyncio_win32.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/callbacks.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/inputhook.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/posix.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/posix_utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/select.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/eventloop/win32.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/filters/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/filters/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/filters/cli.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/filters/types.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/filters/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/history.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/input.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/interface.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/basic.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/completion.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/emacs.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/named_commands.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/scroll.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/bindings/vi.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/defaults.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/digraphs.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/input_processor.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/manager.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/registry.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/key_binding/vi_state.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/keys.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/containers.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/controls.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/dimension.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/lexers.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/margins.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/menus.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/mouse_handlers.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/processors.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/prompt.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/screen.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/toolbars.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/untitled.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/layout/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/mouse_events.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/output.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/reactive.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/renderer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/search_state.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/selection.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/shortcuts.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/styles/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/styles/base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/styles/defaults.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/styles/from_dict.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/styles/from_pygments.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/styles/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/terminal/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/terminal/conemu_output.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/terminal/vt100_input.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/terminal/vt100_output.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/terminal/win32_input.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/terminal/win32_output.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/token.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/validation.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/prompt_toolkit/win32_types.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/__main__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/ast_selection.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/async_analyzer_base.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/async_jedi_highlighter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/backslash_commands.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/bash_completer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/bash_extract.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/bash_inline.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/bash_rename.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/bash_selection.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/completer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/completer_old.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/completion_ranker.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/completion_schema.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/completion_types.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/eventloop.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/filters.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/history_browser.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/ipython.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/jedi_highlighter.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/jedi_lexer.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/jedi_utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/key_bindings.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/layout.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/patch_linecache.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/prompt_style.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/python_input.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/r_iterm_comm.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/refactor_extract.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/refactor_inline.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/refactor_move.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/refactor_move_bash.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/refactor_rename.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/repl.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/__init__.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/commands.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/completers.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/completion_hints.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/grammar.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/key_bindings.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/layout.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/style.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/rp_ptpdb/toolbars.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/selection_utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/style.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/testable_keybindings.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/treesitter_selection.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/treesitter_semantic.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/unreachable_detector.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/utils.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/rp_ptpython/validator.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/ryan_vimrc.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp/web_evaluator.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp.egg-info/dependency_links.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp.egg-info/entry_points.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp.egg-info/requires.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/rp.egg-info/top_level.txt +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/setup.cfg +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/setup.py +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/untitled.c +0 -0
- {rp-0.1.1391 → rp-0.1.1393}/update_module_paths.py +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Kitten TTS server.
|
|
3
|
+
Usage: python -m rp.libs.kitten_tts_server run_server [--port=32462]
|
|
4
|
+
python -m rp.libs.kitten_tts_server ensure_server [--port=32462]
|
|
5
|
+
"""
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
TMUX_SESSION = 'KittenTTS'
|
|
9
|
+
DEFAULT_PORT = 32462
|
|
10
|
+
|
|
11
|
+
def _get_port_from_tmux():
|
|
12
|
+
"""Get port from tmux window name if session exists and server is responding."""
|
|
13
|
+
import rp
|
|
14
|
+
if TMUX_SESSION not in rp.tmux_get_all_session_names():
|
|
15
|
+
return None
|
|
16
|
+
# Window name contains port
|
|
17
|
+
window_name = rp.shell_command('tmux list-windows -t ' + TMUX_SESSION + ' -F "#{window_name}" 2>/dev/null').strip().split('\n')[0]
|
|
18
|
+
try:
|
|
19
|
+
port = int(window_name)
|
|
20
|
+
except (ValueError, IndexError):
|
|
21
|
+
return None
|
|
22
|
+
# Check if responding
|
|
23
|
+
if rp.shell_command('curl -s -o /dev/null -w "%{http_code}" http://localhost:' + str(port) + '/ 2>/dev/null').strip() == '200':
|
|
24
|
+
return port
|
|
25
|
+
return None
|
|
26
|
+
|
|
27
|
+
def ensure_server(port=DEFAULT_PORT):
|
|
28
|
+
"""Ensure server is running. Returns port."""
|
|
29
|
+
import rp
|
|
30
|
+
|
|
31
|
+
# Check if already running
|
|
32
|
+
existing_port = _get_port_from_tmux()
|
|
33
|
+
if existing_port:
|
|
34
|
+
return existing_port
|
|
35
|
+
|
|
36
|
+
# Kill stale session
|
|
37
|
+
if TMUX_SESSION in rp.tmux_get_all_session_names():
|
|
38
|
+
rp.tmux_kill_session(TMUX_SESSION)
|
|
39
|
+
|
|
40
|
+
# Find free port
|
|
41
|
+
port = rp.get_next_free_port(port)
|
|
42
|
+
|
|
43
|
+
# Start in tmux with window name = port
|
|
44
|
+
cmd = sys.executable + ' -m rp.libs.kitten_tts_server run_server --port=' + str(port)
|
|
45
|
+
rp.shell_command('tmux new-session -d -s ' + TMUX_SESSION + ' -n ' + str(port) + ' ' + rp.shlex.quote(cmd))
|
|
46
|
+
|
|
47
|
+
# Wait for ready
|
|
48
|
+
for _ in range(60):
|
|
49
|
+
if rp.shell_command('curl -s -o /dev/null -w "%{http_code}" http://localhost:' + str(port) + '/ 2>/dev/null').strip() == '200':
|
|
50
|
+
return port
|
|
51
|
+
rp.sleep(0.5)
|
|
52
|
+
|
|
53
|
+
raise RuntimeError('Kitten TTS server failed to start on port ' + str(port))
|
|
54
|
+
|
|
55
|
+
def run_server(port=DEFAULT_PORT):
|
|
56
|
+
"""Run the server (blocking)."""
|
|
57
|
+
import subprocess
|
|
58
|
+
# Install deps - need specific onnxruntime version for opset compatibility
|
|
59
|
+
subprocess.run([sys.executable, '-m', 'pip', 'install', '-q',
|
|
60
|
+
'https://github.com/KittenML/KittenTTS/releases/download/0.1/kittentts-0.1.0-py3-none-any.whl',
|
|
61
|
+
'fastapi', 'uvicorn', 'websockets', 'numpy', 'onnxruntime>=1.20'], stderr=subprocess.DEVNULL)
|
|
62
|
+
|
|
63
|
+
from fastapi import FastAPI, WebSocket, Query
|
|
64
|
+
from fastapi.responses import HTMLResponse
|
|
65
|
+
import uvicorn
|
|
66
|
+
from kittentts import KittenTTS
|
|
67
|
+
import numpy as np
|
|
68
|
+
|
|
69
|
+
app = FastAPI()
|
|
70
|
+
model = None
|
|
71
|
+
|
|
72
|
+
@app.on_event("startup")
|
|
73
|
+
async def load_model():
|
|
74
|
+
nonlocal model
|
|
75
|
+
print('[kitten_tts] Loading model...')
|
|
76
|
+
model = KittenTTS('KittenML/kitten-tts-nano-0.1')
|
|
77
|
+
print('[kitten_tts] Ready on port ' + str(port))
|
|
78
|
+
|
|
79
|
+
@app.get("/")
|
|
80
|
+
async def root():
|
|
81
|
+
return HTMLResponse('<h1>Kitten TTS</h1>')
|
|
82
|
+
|
|
83
|
+
@app.websocket("/stream")
|
|
84
|
+
async def stream_tts(
|
|
85
|
+
websocket: WebSocket,
|
|
86
|
+
text: str = Query(...),
|
|
87
|
+
voice: str = Query(default='expr-voice-3-f'),
|
|
88
|
+
speed: float = Query(default=1.0)
|
|
89
|
+
):
|
|
90
|
+
await websocket.accept()
|
|
91
|
+
try:
|
|
92
|
+
audio = model.generate(text, voice=voice, speed=speed)
|
|
93
|
+
audio_bytes = (audio * 32767).astype(np.int16).tobytes()
|
|
94
|
+
for i in range(0, len(audio_bytes), 9600):
|
|
95
|
+
await websocket.send_bytes(audio_bytes[i:i + 9600])
|
|
96
|
+
except Exception:
|
|
97
|
+
pass
|
|
98
|
+
await websocket.close()
|
|
99
|
+
|
|
100
|
+
uvicorn.run(app, host='0.0.0.0', port=port)
|
|
101
|
+
|
|
102
|
+
if __name__ == '__main__':
|
|
103
|
+
import rp
|
|
104
|
+
rp.pip_import('fire')
|
|
105
|
+
import fire
|
|
106
|
+
fire.Fire()
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SuperTonic TTS server - lightning-fast on-device TTS (66M params, 167x realtime).
|
|
3
|
+
|
|
4
|
+
USAGE:
|
|
5
|
+
python -m rp.libs.supertonic_tts_server run_server [--port=7123]
|
|
6
|
+
python -m rp.libs.supertonic_tts_server ensure_server [--port=7123]
|
|
7
|
+
|
|
8
|
+
PYTHON API:
|
|
9
|
+
import rp
|
|
10
|
+
rp.text_to_speech_via_supertonic("Hello world")
|
|
11
|
+
rp.text_to_speech_via_supertonic("Fast", speed=2.0, voice="M1", volume=1.5)
|
|
12
|
+
rp.text_to_speech_via_supertonic_set_defaults(voice="F2", speed=1.5, volume=1.0)
|
|
13
|
+
rp.text_to_speech_via_supertonic_get_defaults()
|
|
14
|
+
|
|
15
|
+
HTTP API ENDPOINTS:
|
|
16
|
+
All endpoints return JSON. Server runs on localhost:7123 by default.
|
|
17
|
+
|
|
18
|
+
GET /health
|
|
19
|
+
Health check. Returns {"status": "ok", "tts": "supertonic", "voices": [...]}
|
|
20
|
+
|
|
21
|
+
GET /defaults
|
|
22
|
+
Get current default settings.
|
|
23
|
+
Returns: {"voice": "F1", "speed": 1.5, "volume": 1.0, "steps": 5}
|
|
24
|
+
|
|
25
|
+
GET /set_defaults?voice=F1&speed=1.5&volume=1.0&steps=5
|
|
26
|
+
Set default voice, speed, volume, and/or steps (persists for all clients).
|
|
27
|
+
Parameters (all optional):
|
|
28
|
+
voice: F1-F5 (female) or M1-M5 (male)
|
|
29
|
+
speed: 0.7 to 2.0 (float)
|
|
30
|
+
volume: 0.0 to 2.0 (float, 1.0 = normal)
|
|
31
|
+
steps: 1 to 10 (int, quality - higher = better but slower)
|
|
32
|
+
Returns: {"ok": true, "defaults": {"voice": "F1", "speed": 1.5, "volume": 1.0, "steps": 5}}
|
|
33
|
+
|
|
34
|
+
GET /speak?text=Hello&voice=F1&speed=1.5&volume=1.0&steps=5
|
|
35
|
+
Synthesize and play text through speakers.
|
|
36
|
+
Parameters:
|
|
37
|
+
text: (required) Text to speak
|
|
38
|
+
voice: (optional) F1-F5 or M1-M5, defaults to server default
|
|
39
|
+
speed: (optional) 0.7-2.0, defaults to server default
|
|
40
|
+
volume: (optional) 0.0-2.0, defaults to server default
|
|
41
|
+
steps: (optional) 1-10, quality steps, defaults to server default
|
|
42
|
+
Returns: {"ok": true, "duration": 1.23, "text": "Hello", "voice": "F1", "speed": 1.5, "volume": 1.0, "steps": 5}
|
|
43
|
+
|
|
44
|
+
POST /speak
|
|
45
|
+
Same as GET but with JSON body: {"text": "Hello", "voice": "F1", "speed": 1.5, "volume": 1.0, "steps": 5}
|
|
46
|
+
|
|
47
|
+
CURL EXAMPLES:
|
|
48
|
+
# Health check
|
|
49
|
+
curl http://localhost:7123/health
|
|
50
|
+
|
|
51
|
+
# Speak text (URL-encoded)
|
|
52
|
+
curl "http://localhost:7123/speak?text=Hello%20world"
|
|
53
|
+
|
|
54
|
+
# Speak with custom voice, speed, and volume
|
|
55
|
+
curl "http://localhost:7123/speak?text=Fast%20speech&voice=M1&speed=2.0&volume=1.5"
|
|
56
|
+
|
|
57
|
+
# Set defaults for all future requests
|
|
58
|
+
curl "http://localhost:7123/set_defaults?voice=F2&speed=1.8&volume=1.0"
|
|
59
|
+
|
|
60
|
+
# Get current defaults
|
|
61
|
+
curl http://localhost:7123/defaults
|
|
62
|
+
|
|
63
|
+
# POST with JSON body
|
|
64
|
+
curl -X POST http://localhost:7123/speak -H "Content-Type: application/json" -d '{"text": "Hello"}'
|
|
65
|
+
|
|
66
|
+
VOICES:
|
|
67
|
+
Female: F1, F2, F3, F4, F5
|
|
68
|
+
Male: M1, M2, M3, M4, M5
|
|
69
|
+
|
|
70
|
+
SPEED:
|
|
71
|
+
Range: 0.7 (slow) to 2.0 (fast)
|
|
72
|
+
Default: 1.5
|
|
73
|
+
Normal speech: 1.0
|
|
74
|
+
|
|
75
|
+
VOLUME:
|
|
76
|
+
Range: 0.0 (mute) to 2.0 (loud)
|
|
77
|
+
Default: 1.0
|
|
78
|
+
Normal: 1.0
|
|
79
|
+
|
|
80
|
+
STEPS (Quality):
|
|
81
|
+
Range: 1 (fast/low quality) to 10 (slow/high quality)
|
|
82
|
+
Default: 5
|
|
83
|
+
Recommended: 3-5 for real-time, 8-10 for offline generation
|
|
84
|
+
"""
|
|
85
|
+
import sys
|
|
86
|
+
|
|
87
|
+
TMUX_SESSION = 'SuperTonicTTS'
|
|
88
|
+
DEFAULT_PORT = 7123
|
|
89
|
+
VOICES = ['F1', 'F2', 'F3', 'F4', 'F5', 'M1', 'M2', 'M3', 'M4', 'M5']
|
|
90
|
+
|
|
91
|
+
# Defaults that can be changed at runtime
|
|
92
|
+
_defaults = {
|
|
93
|
+
'voice': 'F1',
|
|
94
|
+
'speed': 1.5,
|
|
95
|
+
'volume': 1.0,
|
|
96
|
+
'steps': 5, # Quality: 1-10, higher = better quality but slower
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def set_defaults(voice=None, speed=None, volume=None, steps=None):
|
|
101
|
+
"""Set default voice, speed, volume, and steps for TTS requests."""
|
|
102
|
+
if voice is not None:
|
|
103
|
+
if voice not in VOICES:
|
|
104
|
+
raise ValueError(f'Invalid voice: {voice}. Choose from: {", ".join(VOICES)}')
|
|
105
|
+
_defaults['voice'] = voice
|
|
106
|
+
if speed is not None:
|
|
107
|
+
if not 0.7 <= speed <= 2.0:
|
|
108
|
+
raise ValueError(f'Speed must be between 0.7 and 2.0, got {speed}')
|
|
109
|
+
_defaults['speed'] = speed
|
|
110
|
+
if volume is not None:
|
|
111
|
+
if not 0.0 <= volume <= 2.0:
|
|
112
|
+
raise ValueError(f'Volume must be between 0.0 and 2.0, got {volume}')
|
|
113
|
+
_defaults['volume'] = volume
|
|
114
|
+
if steps is not None:
|
|
115
|
+
if not 1 <= steps <= 10:
|
|
116
|
+
raise ValueError(f'Steps must be between 1 and 10, got {steps}')
|
|
117
|
+
_defaults['steps'] = steps
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def get_defaults():
|
|
121
|
+
"""Get current default settings."""
|
|
122
|
+
return _defaults.copy()
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _get_port_from_tmux():
|
|
126
|
+
"""Get port from tmux window name if session exists and server is responding."""
|
|
127
|
+
import rp
|
|
128
|
+
if TMUX_SESSION not in rp.tmux_get_all_session_names():
|
|
129
|
+
return None
|
|
130
|
+
# Window name contains port
|
|
131
|
+
window_name = rp.shell_command(
|
|
132
|
+
f'tmux list-windows -t {TMUX_SESSION} -F "#{{window_name}}" 2>/dev/null'
|
|
133
|
+
).strip().split('\n')[0]
|
|
134
|
+
try:
|
|
135
|
+
port = int(window_name)
|
|
136
|
+
except (ValueError, IndexError):
|
|
137
|
+
return None
|
|
138
|
+
# Check if responding
|
|
139
|
+
if rp.shell_command(
|
|
140
|
+
f'curl -s -o /dev/null -w "%{{http_code}}" http://localhost:{port}/health 2>/dev/null'
|
|
141
|
+
).strip() == '200':
|
|
142
|
+
return port
|
|
143
|
+
return None
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def ensure_server(port=DEFAULT_PORT):
|
|
147
|
+
"""Ensure server is running. Returns port."""
|
|
148
|
+
import rp
|
|
149
|
+
|
|
150
|
+
# Check if already running
|
|
151
|
+
existing_port = _get_port_from_tmux()
|
|
152
|
+
if existing_port:
|
|
153
|
+
return existing_port
|
|
154
|
+
|
|
155
|
+
# Kill stale session
|
|
156
|
+
if TMUX_SESSION in rp.tmux_get_all_session_names():
|
|
157
|
+
rp.tmux_kill_session(TMUX_SESSION)
|
|
158
|
+
|
|
159
|
+
# Find free port
|
|
160
|
+
port = rp.get_next_free_port(port)
|
|
161
|
+
|
|
162
|
+
# Start in tmux with window name = port
|
|
163
|
+
cmd = f'{sys.executable} -m rp.libs.supertonic_tts_server run_server --port={port}'
|
|
164
|
+
rp.shell_command(f'tmux new-session -d -s {TMUX_SESSION} -n {port} {rp.shlex.quote(cmd)}')
|
|
165
|
+
|
|
166
|
+
# Wait for ready (SuperTonic takes longer to load model)
|
|
167
|
+
print(f'[supertonic_tts] Starting server on port {port}...')
|
|
168
|
+
for i in range(120): # Up to 60 seconds
|
|
169
|
+
if rp.shell_command(
|
|
170
|
+
f'curl -s -o /dev/null -w "%{{http_code}}" http://localhost:{port}/health 2>/dev/null'
|
|
171
|
+
).strip() == '200':
|
|
172
|
+
print(f'[supertonic_tts] Server ready on port {port}')
|
|
173
|
+
return port
|
|
174
|
+
rp.sleep(0.5)
|
|
175
|
+
|
|
176
|
+
raise RuntimeError(f'SuperTonic TTS server failed to start on port {port}')
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def run_server(port=DEFAULT_PORT):
|
|
180
|
+
"""Run the server (blocking)."""
|
|
181
|
+
import rp
|
|
182
|
+
|
|
183
|
+
# Ensure dependencies are installed
|
|
184
|
+
print('[supertonic_tts] Checking dependencies...')
|
|
185
|
+
rp.pip_import('supertonic', auto_yes=True)
|
|
186
|
+
rp.pip_import('sounddevice', auto_yes=True)
|
|
187
|
+
rp.pip_import('numpy', auto_yes=True)
|
|
188
|
+
|
|
189
|
+
# Now import normally
|
|
190
|
+
import http.server
|
|
191
|
+
import json
|
|
192
|
+
import socketserver
|
|
193
|
+
import urllib.parse
|
|
194
|
+
import numpy as np
|
|
195
|
+
import sounddevice as sd
|
|
196
|
+
from supertonic import TTS
|
|
197
|
+
|
|
198
|
+
print('[supertonic_tts] Loading model (~305MB on first run)...')
|
|
199
|
+
tts = TTS(auto_download=True)
|
|
200
|
+
print(f'[supertonic_tts] Model loaded. Sample rate: {tts.sample_rate}Hz')
|
|
201
|
+
print(f'[supertonic_tts] Voices: {tts.voice_style_names}')
|
|
202
|
+
|
|
203
|
+
voice_styles = {v: tts.get_voice_style(voice_name=v) for v in tts.voice_style_names}
|
|
204
|
+
|
|
205
|
+
class Handler(http.server.BaseHTTPRequestHandler):
|
|
206
|
+
def log_message(self, fmt, *args):
|
|
207
|
+
print(f'[supertonic_tts] {args[0]}')
|
|
208
|
+
|
|
209
|
+
def _send_json(self, data, status=200):
|
|
210
|
+
body = json.dumps(data).encode()
|
|
211
|
+
self.send_response(status)
|
|
212
|
+
self.send_header('Content-Type', 'application/json')
|
|
213
|
+
self.send_header('Content-Length', len(body))
|
|
214
|
+
self.end_headers()
|
|
215
|
+
self.wfile.write(body)
|
|
216
|
+
|
|
217
|
+
def do_GET(self):
|
|
218
|
+
parsed = urllib.parse.urlparse(self.path)
|
|
219
|
+
params = urllib.parse.parse_qs(parsed.query)
|
|
220
|
+
|
|
221
|
+
if parsed.path == '/health':
|
|
222
|
+
self._send_json({'status': 'ok', 'tts': 'supertonic', 'voices': VOICES})
|
|
223
|
+
return
|
|
224
|
+
|
|
225
|
+
if parsed.path == '/defaults':
|
|
226
|
+
self._send_json(_defaults)
|
|
227
|
+
return
|
|
228
|
+
|
|
229
|
+
if parsed.path == '/set_defaults':
|
|
230
|
+
voice = params.get('voice', [None])[0]
|
|
231
|
+
speed = params.get('speed', [None])[0]
|
|
232
|
+
volume = params.get('volume', [None])[0]
|
|
233
|
+
steps = params.get('steps', [None])[0]
|
|
234
|
+
try:
|
|
235
|
+
set_defaults(
|
|
236
|
+
voice=voice,
|
|
237
|
+
speed=float(speed) if speed else None,
|
|
238
|
+
volume=float(volume) if volume else None,
|
|
239
|
+
steps=int(steps) if steps else None
|
|
240
|
+
)
|
|
241
|
+
self._send_json({'ok': True, 'defaults': _defaults})
|
|
242
|
+
except ValueError as e:
|
|
243
|
+
self._send_json({'error': str(e)}, 400)
|
|
244
|
+
return
|
|
245
|
+
|
|
246
|
+
if parsed.path != '/speak':
|
|
247
|
+
self._send_json({'error': 'Use GET /speak?text=...'}, 404)
|
|
248
|
+
return
|
|
249
|
+
|
|
250
|
+
text = params.get('text', [''])[0]
|
|
251
|
+
voice = params.get('voice', [_defaults['voice']])[0]
|
|
252
|
+
speed_str = params.get('speed', [None])[0]
|
|
253
|
+
speed = float(speed_str) if speed_str else _defaults['speed']
|
|
254
|
+
volume_str = params.get('volume', [None])[0]
|
|
255
|
+
volume = float(volume_str) if volume_str else _defaults['volume']
|
|
256
|
+
steps_str = params.get('steps', [None])[0]
|
|
257
|
+
steps = int(steps_str) if steps_str else _defaults['steps']
|
|
258
|
+
|
|
259
|
+
if not text:
|
|
260
|
+
self._send_json({'error': 'Missing text parameter'}, 400)
|
|
261
|
+
return
|
|
262
|
+
|
|
263
|
+
if voice not in voice_styles:
|
|
264
|
+
self._send_json({'error': f'Invalid voice: {voice}'}, 400)
|
|
265
|
+
return
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
wav, duration = tts.synthesize(
|
|
269
|
+
text,
|
|
270
|
+
voice_style=voice_styles[voice],
|
|
271
|
+
lang='en',
|
|
272
|
+
speed=speed,
|
|
273
|
+
total_steps=steps
|
|
274
|
+
)
|
|
275
|
+
wav = np.squeeze(wav)
|
|
276
|
+
# Apply volume scaling
|
|
277
|
+
if volume != 1.0:
|
|
278
|
+
wav = wav * volume
|
|
279
|
+
sd.play(wav, samplerate=tts.sample_rate)
|
|
280
|
+
sd.wait()
|
|
281
|
+
dur = float(duration[0]) if hasattr(duration, '__getitem__') else float(duration)
|
|
282
|
+
self._send_json({'ok': True, 'duration': dur, 'text': text, 'voice': voice, 'speed': speed, 'volume': volume, 'steps': steps})
|
|
283
|
+
except Exception as e:
|
|
284
|
+
self._send_json({'error': str(e)}, 500)
|
|
285
|
+
|
|
286
|
+
def do_POST(self):
|
|
287
|
+
content_length = int(self.headers.get('Content-Length', 0))
|
|
288
|
+
body = self.rfile.read(content_length).decode()
|
|
289
|
+
|
|
290
|
+
try:
|
|
291
|
+
data = json.loads(body) if body else {}
|
|
292
|
+
except json.JSONDecodeError:
|
|
293
|
+
data = {'text': body}
|
|
294
|
+
|
|
295
|
+
# Redirect to GET handler with params
|
|
296
|
+
text = data.get('text', '')
|
|
297
|
+
voice = data.get('voice', _defaults['voice'])
|
|
298
|
+
speed = data.get('speed', _defaults['speed'])
|
|
299
|
+
|
|
300
|
+
self.path = f'/speak?text={urllib.parse.quote(text)}&voice={voice}&speed={speed}'
|
|
301
|
+
self.do_GET()
|
|
302
|
+
|
|
303
|
+
class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
|
304
|
+
allow_reuse_address = True
|
|
305
|
+
|
|
306
|
+
with ThreadedServer(('0.0.0.0', port), Handler) as server:
|
|
307
|
+
print(f'[supertonic_tts] Ready on http://localhost:{port}')
|
|
308
|
+
server.serve_forever()
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
if __name__ == '__main__':
|
|
312
|
+
import rp
|
|
313
|
+
rp.pip_import('fire')
|
|
314
|
+
import fire
|
|
315
|
+
fire.Fire()
|
|
@@ -21825,7 +21825,14 @@ def merged_dicts(*dicts, precedence='last', mutate=False):
|
|
|
21825
21825
|
first_dict = dicts[0] if len(dicts) else {}
|
|
21826
21826
|
|
|
21827
21827
|
# If mutate is True, the first dictionary is updated directly.
|
|
21828
|
-
|
|
21828
|
+
if mutate:
|
|
21829
|
+
result = first_dict
|
|
21830
|
+
else:
|
|
21831
|
+
try:
|
|
21832
|
+
result = type(first_dict)()
|
|
21833
|
+
except TypeError:
|
|
21834
|
+
# Fallback for types like FrameLocalsProxy (Python 3.13+) that can't be instantiated without arguments
|
|
21835
|
+
result = dict()
|
|
21829
21836
|
|
|
21830
21837
|
# Merge the dicts into result
|
|
21831
21838
|
for d in dicts:
|
|
@@ -51372,6 +51379,26 @@ def _ensure_shell_has_path(*, mac=None, linux=None, windows=None, unix=None):
|
|
|
51372
51379
|
elif windows and currently_running_windows():
|
|
51373
51380
|
raise NotImplementedError
|
|
51374
51381
|
|
|
51382
|
+
def _ensure_shell_has_line(line: str):
|
|
51383
|
+
"""
|
|
51384
|
+
Append a line to shell rc files if not already present.
|
|
51385
|
+
|
|
51386
|
+
Args:
|
|
51387
|
+
line: The line to add (e.g., 'export FOO="bar"').
|
|
51388
|
+
|
|
51389
|
+
Notes:
|
|
51390
|
+
- Appends to ~/.zshrc and ~/.bashrc (see _all_shell_rc_paths).
|
|
51391
|
+
- Skips if the exact line is already in the file.
|
|
51392
|
+
"""
|
|
51393
|
+
for rc_path in _all_shell_rc_paths:
|
|
51394
|
+
rc_path = os.path.expanduser(rc_path)
|
|
51395
|
+
if file_exists(rc_path):
|
|
51396
|
+
contents = text_file_to_string(rc_path)
|
|
51397
|
+
if line in contents:
|
|
51398
|
+
continue
|
|
51399
|
+
append_line_to_file(line, rc_path)
|
|
51400
|
+
fansi_print('r._ensure_shell_has_line: Wrote ' + repr(line) + ' to files: ' + repr(_all_shell_rc_paths), 'green bold')
|
|
51401
|
+
|
|
51375
51402
|
def _ensure_installed(name: str, *, windows=None, mac=None, linux=None, unix=None, force=False) -> bool:
|
|
51376
51403
|
""" Attempts to install a program on various operating systems. Returns True if we install something. """
|
|
51377
51404
|
|
|
@@ -51475,7 +51502,7 @@ def _ensure_go_installed():
|
|
|
51475
51502
|
"""go: Statically-typed compiled language by Google with strong concurrency support"""
|
|
51476
51503
|
_ensure_installed(
|
|
51477
51504
|
'go',
|
|
51478
|
-
mac = 'brew install
|
|
51505
|
+
mac = 'brew install go',
|
|
51479
51506
|
linux = 'apt install golang-go --yes',
|
|
51480
51507
|
windows='winget install --id=GoLang.Go', # https://winstall.app/apps/GoLang.Go
|
|
51481
51508
|
)
|
|
@@ -51962,6 +51989,24 @@ def _ensure_vivaldi_installed():
|
|
|
51962
51989
|
windows='winget install --id=Vivaldi.Vivaldi', #https://winstall.app/apps/Vivaldi.Vivaldi
|
|
51963
51990
|
)
|
|
51964
51991
|
|
|
51992
|
+
@_register_ensure_installed_func
|
|
51993
|
+
def _ensure_fluidsynth_installed():
|
|
51994
|
+
"""fluidsynth: Real-time software synthesizer based on SoundFont 2"""
|
|
51995
|
+
_ensure_installed(
|
|
51996
|
+
'fluidsynth',
|
|
51997
|
+
mac ='brew install fluid-synth', #https://formulae.brew.sh/formula/fluid-synth
|
|
51998
|
+
linux ='sudo apt install fluidsynth libfluidsynth-dev -y', #https://packages.ubuntu.com/fluidsynth
|
|
51999
|
+
windows='winget install --id=FluidSynth.FluidSynth', #https://winstall.app/apps/FluidSynth.FluidSynth
|
|
52000
|
+
)
|
|
52001
|
+
if currently_running_mac():
|
|
52002
|
+
# libfluidsynth needs to be findable by pyfluidsynth
|
|
52003
|
+
lib_path = '/opt/homebrew/lib'
|
|
52004
|
+
current = os.environ.get('DYLD_LIBRARY_PATH', '')
|
|
52005
|
+
if lib_path not in current:
|
|
52006
|
+
os.environ['DYLD_LIBRARY_PATH'] = lib_path + ':' + current if current else lib_path
|
|
52007
|
+
_ensure_shell_has_line('export DYLD_LIBRARY_PATH="/opt/homebrew/lib:$DYLD_LIBRARY_PATH" # Added by RP for fluidsynth')
|
|
52008
|
+
pip_import('fluidsynth')
|
|
52009
|
+
|
|
51965
52010
|
@_register_ensure_installed_func
|
|
51966
52011
|
def _ensure_linearmouse_installed():
|
|
51967
52012
|
"""linearmouse: macOS mouse/trackpad customization utility"""
|
|
@@ -53131,6 +53176,26 @@ def _get_all_tmux_clients(session):
|
|
|
53131
53176
|
clients = _run_tmux_command(['tmux', 'list-clients', '-t', session, '-F', '#{client_tty}']).split()
|
|
53132
53177
|
return list(clients)
|
|
53133
53178
|
|
|
53179
|
+
# libtmux compatibility helpers (supports both old and new APIs)
|
|
53180
|
+
def _libtmux_get_sessions(server):
|
|
53181
|
+
"""Get sessions from server. New API: server.sessions, Old API: server.list_sessions()"""
|
|
53182
|
+
if hasattr(server, 'sessions') and hasattr(server.sessions, '__iter__'):
|
|
53183
|
+
return server.sessions
|
|
53184
|
+
return server.list_sessions()
|
|
53185
|
+
|
|
53186
|
+
def _libtmux_find_session(server, session_name):
|
|
53187
|
+
"""Find session by name. New API: server.sessions.get(), Old API: server.find_where()"""
|
|
53188
|
+
if hasattr(server, 'sessions') and hasattr(server.sessions, 'get'):
|
|
53189
|
+
return server.sessions.get(session_name=session_name, default=None)
|
|
53190
|
+
return server.find_where({"session_name": session_name})
|
|
53191
|
+
|
|
53192
|
+
def _libtmux_kill_session(session):
|
|
53193
|
+
"""Kill a session. New API: session.kill(), Old API: session.kill_session()"""
|
|
53194
|
+
if hasattr(session, 'kill') and callable(session.kill):
|
|
53195
|
+
session.kill()
|
|
53196
|
+
else:
|
|
53197
|
+
session.kill_session()
|
|
53198
|
+
|
|
53134
53199
|
def tmux_get_all_session_names():
|
|
53135
53200
|
"""
|
|
53136
53201
|
Retrieve the names of all active tmux sessions.
|
|
@@ -53142,7 +53207,7 @@ def tmux_get_all_session_names():
|
|
|
53142
53207
|
import libtmux
|
|
53143
53208
|
|
|
53144
53209
|
server = libtmux.Server()
|
|
53145
|
-
return [session.name for session in server
|
|
53210
|
+
return [session.name for session in _libtmux_get_sessions(server)]
|
|
53146
53211
|
|
|
53147
53212
|
tmux_list_sessions = tmux_get_all_session_names
|
|
53148
53213
|
|
|
@@ -53203,13 +53268,10 @@ def tmux_kill_session(session_name, strict=False):
|
|
|
53203
53268
|
assert isinstance(session_name, str), "Session name must be a string."
|
|
53204
53269
|
|
|
53205
53270
|
server = libtmux.Server()
|
|
53206
|
-
|
|
53207
|
-
session = server.find_where({"session_name": session_name})
|
|
53208
|
-
else:
|
|
53209
|
-
session = server.sessions.get(session_name=session_name, default=None)
|
|
53271
|
+
session = _libtmux_find_session(server, session_name)
|
|
53210
53272
|
|
|
53211
53273
|
if session:
|
|
53212
|
-
session
|
|
53274
|
+
_libtmux_kill_session(session)
|
|
53213
53275
|
print("rp.tmux_kill_session: Session %s killed successfully."%repr(session_name))
|
|
53214
53276
|
else:
|
|
53215
53277
|
if strict:
|
|
@@ -67673,6 +67735,7 @@ known_pypi_module_package_names={
|
|
|
67673
67735
|
# 'cv2': 'opencv-python',
|
|
67674
67736
|
# 'cv2': 'opencv-contrib-python', #This one is just like opencv, but better...but does it install as reliably? (Update: so far, so good!)
|
|
67675
67737
|
'cv2': 'opencv-python opencv-contrib-python', #But that didn't work for get_edge_drawing...https://github.com/Comfy-Org/ComfyUI-Manager/discussions/708
|
|
67738
|
+
'fluidsynth' : 'pyfluidsynth',
|
|
67676
67739
|
'handy_kws':'handy-kws',
|
|
67677
67740
|
'AppKit': 'pyobjc-framework-Cocoa',
|
|
67678
67741
|
'Cocoa': 'pyobjc-framework-Cocoa',
|
|
@@ -306,8 +306,9 @@ def list_path_candidates(
|
|
|
306
306
|
[PathCandidate(name='src', ...), PathCandidate(name='tests', ...)]
|
|
307
307
|
"""
|
|
308
308
|
# Auto-detect hidden file preference from prefix
|
|
309
|
+
# BUT: always show hidden directories when listing dirs_only
|
|
309
310
|
if show_hidden is None:
|
|
310
|
-
show_hidden = prefix.startswith('.')
|
|
311
|
+
show_hidden = prefix.startswith('.') or dirs_only
|
|
311
312
|
|
|
312
313
|
candidates = []
|
|
313
314
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1393
|
|
@@ -41,6 +41,7 @@ rp/libs/__init__.py
|
|
|
41
41
|
rp/libs/debug_comment.py
|
|
42
42
|
rp/libs/draw_code_minimap.py
|
|
43
43
|
rp/libs/graveyard.py
|
|
44
|
+
rp/libs/kitten_tts_server.py
|
|
44
45
|
rp/libs/powerpoint_converter.py
|
|
45
46
|
rp/libs/profile_vim_plugins.py
|
|
46
47
|
rp/libs/pw_crypt.py
|
|
@@ -50,6 +51,7 @@ rp/libs/pytorch_module_explorer.py
|
|
|
50
51
|
rp/libs/rp_black_macchiato.py
|
|
51
52
|
rp/libs/stamp_tensor.py
|
|
52
53
|
rp/libs/stdin_python_highlighter.py
|
|
54
|
+
rp/libs/supertonic_tts_server.py
|
|
53
55
|
rp/libs/torch_hooks.py
|
|
54
56
|
rp/libs/torch_tools.py
|
|
55
57
|
rp/libs/tracetraptest.py
|
rp-0.1.1393/version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1393
|
rp-0.1.1391/rp/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1391
|
rp-0.1.1391/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1391
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|