{"id":20434084,"url":"https://github.com/renpy/id","last_synced_at":"2025-03-05T06:24:51.165Z","repository":{"id":147092751,"uuid":"43622129","full_name":"renpy/id","owner":"renpy","description":"Ren'Py Interactive Director","archived":false,"fork":false,"pushed_at":"2017-04-15T04:30:22.000Z","size":6039,"stargazers_count":13,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-15T19:23:13.370Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ren'Py","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/renpy.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-10-04T02:17:46.000Z","updated_at":"2024-02-17T13:00:57.000Z","dependencies_parsed_at":"2023-04-26T09:22:34.558Z","dependency_job_id":null,"html_url":"https://github.com/renpy/id","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renpy%2Fid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renpy%2Fid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renpy%2Fid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renpy%2Fid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renpy","download_url":"https://codeload.github.com/renpy/id/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241976740,"owners_count":20051700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T08:23:59.667Z","updated_at":"2025-03-05T06:24:51.143Z","avatar_url":"https://github.com/renpy.png","language":"Ren'Py","funding_links":[],"categories":[],"sub_categories":[],"readme":"Ren'Py Interactive Director\n===========================\n\nThe Ren'Py interactive director is meant to help you direct a script. It\nisn't meant as a replacement for the text editor, which is required to add\nmost statements. The director lets you add - with a live preview - scene,\nshow, hide and with statements, directing image presentation.\n\nThe Interactive Director is now an open source project, licensed under\nthe same MIT license as Ren'Py itself.\n\nDownload and Demo\n-----------------\n\nTo try the demo, download the latest version available from:\n\n   https://www.renpy.org/dl/id/\n\nUnzip the file, and place it into either your Ren'Py SDK directory,\nor your projects directory. After restarting the Ren'Py launcher,\nthe id project will be on your list of projects. Click it, launch\nthe game, and it should walk you through a basic demo.\n\nUsage\n-----\n\nTo use the director in your own project, copy game/id.rpy into your own\nproject's game directory.\n\nWhen you run the game, an \"Interactive Director\" button will appear\nat the top of the screen. Clicking it will bring up the director window.\n\nBy default, the director window shows a list of lines that ran before the\ncurrent line. Click outside the lines window to advance the script, or\nrollback outside it to roll back. Click the + between a lines to add a line, or the ✎ before a\nline to edit that line. (Only scene, show, hide, and with statements can\ncurrently be added to the script or edited.)\n\nWhen editing a line, the statement type can be selected, along with\nappropriate parameters. Choose \"Add\" to add the new line, \"Change\" to change\nan existing line, \"Cancel\" to cancel editing, and \"Remove\" to remove an\nexisting line.\n\nClick \"Done\" when finished editing.\n\nVariables\n---------\n\nThere are a number of variables defined in the director namespace that control\nhow the interactive director functions. These may be either updated using\npython code, or hidden using the define statement.\n\n\nScene, Show, and Hide\n^^^^^^^^^^^^^^^^^^^^^\n\n``director.tag_blacklist = { \"black\", \"text\", \"vtext\" }``\n    A blacklist of tags that will not be shown for the show, scene, or hide\n    statements.\n\n``director.scene_tags = { \"bg\" }``\n    The set of tags that will be presented for the scene statement, and hidden\n    from the show statement.\n\n``director.show_tags = set()``\n    If not empty, only the tags present in this set will be presented for the\n    show statement.\n\n``director.transforms = [ \"left\", \"center\", \"right\" ]``\n    A list of transforms that will be presented as part of the editor.\n    In addition to these, any transform defined using the transform\n    statement outside of common code will be added to the list of\n    transforms, which is then sorted.\n\nWith\n^^^^\n\n``director.transitions = [ \"dissolve\", \"pixellate\" ]``\n    A list of transitions that are available to the with statement. Since\n    transitions can't be auto-detected, these must be added manually.\n\nPlay, Queue, Stop, and Voice\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n``director.audio_channels = [ \"music\", \"sound\", \"audio\" ]``\n    The name of the audio channels that can be used with the play, show\n    and stop statements.\n\n``director.voice_channel = \"voice\"``\n    The name of the audio channel used by voice.\n\n``director.audio_patterns = [ \"*.opus\", \"*.ogg\", \"*.mp3\" ]``\n    The default list of audio patterns that are used to match the files\n    available in an audio channel.\n\n``director.audio_channel_patterns = { }``\n    A map from a channel name to the list of audio patterns that are\n    available in that audio channel. For example, if this is set to\n    ``{ 'sound' : [ 'sound/*.opus' ], 'music' : [ 'music/*.opus' ] }`` the\n    music and sound channels get their own lists of patterns.\n\nAccess\n^^^^^^\n\n``director.button = True``\n    If True, the director displays a screen with a button to access the\n    director window. If False, the game can provide it's own access, by\n    making available the director.Start action.\n\nLine Spacing\n^^^^^^^^^^^^\n\n``director.spacing = 1``\n    The spacing between a director (scene, show, hide, with, play, queue, and voice) line\n    and a non-director line, or vice versa. These spacings should be 0 or 1 lines, a higher spacing\n    may not work.\n\n``director.director_spacing = 0``\n    The spacing between two consecutive director lines.\n\n``director.other_spacing = 0``\n    The spacing between two consecutive non-director lines.\n\nViewport\n^^^^^^^^\n\n``director.viewport_height = 280``\n    The maximum height of scrolling viewports used by the director.\n\nThe director can also be customized by editing its styles.\n\n\nCustom Director Button\n----------------------\n\nWhen director.button is true, the director_button screen is displayed to\nprovide access to your game. This screen can be replaced to customize\nthe button. An example replacement is::\n\n    screen director_button:\n        zorder 100\n\n        textbutton \"Interactive Director\":\n            action director.Start()\n            xalign 1.0\n            yalign 0.0\n\n\nAudio Filename Functions\n------------------------\n\nThere are a number of audio filename functions that can be used to convert\nfilenames on disk to filenames in code. This can be used to match Ren'Py\nfunctionality that maps filenames. For example, if one has::\n\n    define config.voice_filename_format = \"v/{filename}.ogg\"\n\none can define the functions::\n\n    init python in director:\n\n        def audio_code_to_filename(channel, code):\n            \"\"\"\n            This converts the name of an audio filename as seen in the code,\n            to the filename as seen on disk.\n            \"\"\"\n\n            if channel == \"voice\":\n                return \"v/\" + code + \".ogg\"\n\n            return code\n\n        def audio_filename_to_code(channel, fn):\n            \"\"\"\n            This converts the name of an audio filename on disk to the filename\n            as seen in code.\n            \"\"\"\n\n            if channel == \"voice\":\n                return fn.replace(\"v/\", \"\").replace(\".ogg\", \"\")\n\n            return fn\n\n        def audio_filename_to_display(channel, fn):\n            \"\"\"\n            This converts the audio filename as seen on disk so it can be\n            presented to the creator.\n            \"\"\"\n\n            if channel == \"voice\":\n                return fn.replace(\"v/\", \"\").replace(\".ogg\", \"\")\n\n            return fn\n\nto match it.\n\n\nLicense\n-------\n\nThis program is free for all purposes - commercial and non-commercial,\nunder the terms of the following license::\n\n    # Permission is hereby granted, free of charge, to any person\n    # obtaining a copy of this software and associated documentation files\n    # (the \"Software\"), to deal in the Software without restriction,\n    # including without limitation the rights to use, copy, modify, merge,\n    # publish, distribute, sublicense, and/or sell copies of the Software,\n    # and to permit persons to whom the Software is furnished to do so,\n    # subject to the following conditions:\n    #\n    # The above copyright notice and this permission notice shall be\n    # included in all copies or substantial portions of the Software.\n    #\n    # THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n    # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n    # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n    # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n    # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n    # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n    # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nChangelog\n---------\n\n4.0\n    This release adds support for the play, queue, stop, and voice\n    statements, which control sound, music, and voice. Several of the\n    configuration variables have been renamed to reflect the fact that not\n    all statements are display-related. Automated tests have been added to\n    the project, and some bugs have been fixed.\n\n3.0\n    This release supports screen language statements that do not not have\n    an associated image. It also determines if a scene, show, or hide\n    statement is not editable, and makes the button insensitive if that\n    is the case.\n\n2.0\n    This release required Ren'Py 6.99.12.3 to run. It adds support for\n    the behind clause, adds the director.show_tags set, and adds some\n    basic support for attribute images.\n\n1.0\n    This was the initial release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenpy%2Fid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenpy%2Fid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenpy%2Fid/lists"}