From 90a2bfa91bb328bbc11bee7a4c53efb56cd8cf53 Mon Sep 17 00:00:00 2001 From: capital-G Date: Wed, 20 Sep 2023 18:11:31 +0000 Subject: [PATCH] deploy: aec9347218d9da9fb6d8ee45045e926afb15083f --- _modules/gencaster/schema.html | 27 ++++++++++++++--------- _modules/osc_server/server.html | 1 + _modules/story_graph/engine.html | 37 +++++++++++++++++++++++++++++++- _modules/stream/models.html | 2 +- back/api/story_graph.html | 20 +++++++++++++++-- searchindex.js | 2 +- 6 files changed, 74 insertions(+), 15 deletions(-) diff --git a/_modules/gencaster/schema.html b/_modules/gencaster/schema.html index 870af6e9..5e3ec65a 100644 --- a/_modules/gencaster/schema.html +++ b/_modules/gencaster/schema.html @@ -815,7 +815,7 @@

Source code for gencaster.schema

         yield graph  # type: ignore
 
         async for graph_update in GenCasterChannel.receive_graph_updates(
-            info.context.ws, graph_uuid
+            info.context["ws"], graph_uuid
         ):
             yield await story_graph_models.Graph.objects.aget(uuid=graph_update.uuid)  # type: ignore
@@ -832,7 +832,7 @@

Source code for gencaster.schema

         yield node  # type: ignore
 
         async for node_update in GenCasterChannel.receive_node_updates(
-            info.context.ws, node_uuid
+            info.context["ws"], node_uuid
         ):
             yield await story_graph_models.Node.objects.aget(uuid=node_update.uuid)  # type: ignore
@@ -851,15 +851,15 @@

Source code for gencaster.schema

         if a given stream is free or used.
         Upon connection stop this will be decremented again.
         """
-        consumer: GraphQLWSConsumerInjector = info.context.ws
+        consumer: GraphQLWSConsumerInjector = info.context["ws"]
+
+        graph = await story_graph_models.Graph.objects.aget(uuid=graph_uuid)
 
-        graph = await story_graph_models.Graph.objects.filter(uuid=graph_uuid).afirst()
-        if not graph:
-            raise Exception("could not find graph!")
         try:
             stream = await stream_models.Stream.objects.aget_free_stream(graph)
             log.info(f"Attached to stream {stream.uuid}")
         except NoStreamAvailableException:
+            log.error(f"No stream is available for graph {graph.name}")
             yield NoStreamAvailable()
             return
 
@@ -878,16 +878,23 @@ 

Source code for gencaster.schema

                     await cleanup()
 
         with db_logging.LogContext(db_logging.LogKeyEnum.STREAM, stream):
-            await stream.increment_num_listeners()
-
             engine = Engine(
                 graph=graph,
                 stream=stream,
             )
 
+            await stream.increment_num_listeners()
+
             consumer.disconnect_callback = cleanup
             consumer.receive_callback = cleanup_on_stop
 
+            # send a first stream info response so the front-end has
+            # received information that streaming has/can be started,
+            # see https://github.com/Gencaster/gencaster/issues/483
+            # otherwise this can result in a dead end if we await
+            # a stream variable which is set from the frontend
+            yield StreamInfo(stream=stream, stream_instruction=None)  # type: ignore
+
             async for instruction in engine.start(max_steps=int(10e4)):
                 if type(instruction) == Dialog:
                     yield instruction
@@ -909,7 +916,7 @@ 

Source code for gencaster.schema

             yield stream_log  # type: ignore
 
         async for log_update in GenCasterChannel.receive_stream_log_updates(
-            info.context.ws,
+            info.context["ws"],
         ):
             if stream_uuid:
                 if str(log_update.stream_uuid) != str(stream_uuid):
@@ -933,7 +940,7 @@ 

Source code for gencaster.schema

 
         yield await get_streams()
 
-        async for _ in GenCasterChannel.receive_streams_updates(info.context.ws):
+        async for _ in GenCasterChannel.receive_streams_updates(info.context["ws"]):
             yield await get_streams()
diff --git a/_modules/osc_server/server.html b/_modules/osc_server/server.html index a22e3002..237a0ac9 100644 --- a/_modules/osc_server/server.html +++ b/_modules/osc_server/server.html @@ -450,6 +450,7 @@

Source code for osc_server.server

     port = int(os.environ.get("BACKEND_OSC_PORT", 7000))
 
     logging_level = os.environ.get("BACKEND_OSC_LOG_LEVEL", "INFO")
+    log.setLevel(logging_level)
 
     server = OSCServer()
     server.serve_blocking(port=port)
diff --git a/_modules/story_graph/engine.html b/_modules/story_graph/engine.html
index 1a662fbd..53f8c683 100644
--- a/_modules/story_graph/engine.html
+++ b/_modules/story_graph/engine.html
@@ -311,16 +311,36 @@ 

Source code for story_graph.engine

     The engine runs in an async manner so it is possible to do awaits without
     blocking the server, which means execution is halted until a specific
     condition is met.
+
+    :param graph: The graph to execute
+    :param stream: The stream where the graph should be executed on
+    :param raise_exceptions: Decides if an exception within e.g. a Python script cell
+        can bring down the execution or if it ignores it but logs it.
+        Defaults to False so an invalid Python script cell does not stop the whole graph.
+    :param run_cleanup_procedure: If ``True`` it executes ``CmdPeriod.run`` on the SuperCollider
+        server in order to clear all running sounds, patterns and any left running tasks,
+        creating a clean environment.
+        The default is ``None`` which will derive the necessary action based
+        if there are already users on the stream (in which case no reset will be executed).
     """
 
 
[docs] def __init__( - self, graph: Graph, stream: Stream, raise_exceptions: bool = False + self, + graph: Graph, + stream: Stream, + raise_exceptions: bool = False, + run_cleanup_procedure: Optional[bool] = None, ) -> None: self.graph: Graph = graph self.stream = stream self._current_node: Node self.blocking_time: int = 60 * 60 * 3 self.raise_exceptions = raise_exceptions + self.run_cleanup_procedure: bool + if run_cleanup_procedure is not None: + self.run_cleanup_procedure = run_cleanup_procedure + else: + self.run_cleanup_procedure = self.stream.num_listeners == 0 log.debug(f"Started engine for graph {self.graph.uuid}")
[docs] async def get_stream_variables(self) -> Dict[str, str]: @@ -664,6 +684,18 @@

Source code for story_graph.engine

         except AttributeError:
             raise GraphDeadEnd()
+ async def cleanup_sc_procedure(self) -> StreamInstruction: + log.debug("Run cleanup procedure on graph") + # do not wait for the execution because the OSC receiver callback + # may b down because of CmdPeriod and it takes time to recover + # from CmdPeriod + instruction = await sync_to_async( + self.stream.stream_point.send_raw_instruction + )("0.01.wait;CmdPeriod.run;0.01.wait;") + # wait for the CmdPeriod to re-init the OSC receiver callback + await asyncio.sleep(0.2) + return instruction +
[docs] async def start( self, max_steps: int = 1000 ) -> AsyncGenerator[Union[StreamInstruction, Dialog, GraphDeadEnd], None]: @@ -679,6 +711,9 @@

Source code for story_graph.engine

         """
         self._current_node = await self.graph.aget_entry_node()
 
+        if self.run_cleanup_procedure:
+            await self.cleanup_sc_procedure()
+
         for _ in range(max_steps):
             async for instruction in self.execute_node(self._current_node):
                 yield instruction
diff --git a/_modules/stream/models.html b/_modules/stream/models.html
index 8a5bff3b..ba1b86d9 100644
--- a/_modules/stream/models.html
+++ b/_modules/stream/models.html
@@ -534,7 +534,7 @@ 

Source code for stream.models

     It also allows us to trace past streams.
     """
 
-    objects = StreamManager()
+    objects: StreamManager = StreamManager()
 
     uuid = models.UUIDField(
         primary_key=True,
diff --git a/back/api/story_graph.html b/back/api/story_graph.html
index 12e167ec..10df5f41 100644
--- a/back/api/story_graph.html
+++ b/back/api/story_graph.html
@@ -392,7 +392,7 @@ 

GraphEngine#

-class story_graph.engine.Engine(graph, stream, raise_exceptions=False)[source]#
+class story_graph.engine.Engine(graph, stream, raise_exceptions=False, run_cleanup_procedure=None)[source]#

An engine executes a Graph for a given StreamPoint. Executing means to iterate over the Node @@ -400,9 +400,25 @@

Engine +
Parameters
+
    +
  • graph (Graph) – The graph to execute

  • +
  • stream (Stream) – The stream where the graph should be executed on

  • +
  • raise_exceptions (bool) – Decides if an exception within e.g. a Python script cell +can bring down the execution or if it ignores it but logs it. +Defaults to False so an invalid Python script cell does not stop the whole graph.

  • +
  • run_cleanup_procedure (Optional[bool]) – If True it executes CmdPeriod.run on the SuperCollider +server in order to clear all running sounds, patterns and any left running tasks, +creating a clean environment. +The default is None which will derive the necessary action based +if there are already users on the stream (in which case no reset will be executed).

  • +
+
+

-__init__(graph, stream, raise_exceptions=False)[source]#
+__init__(graph, stream, raise_exceptions=False, run_cleanup_procedure=None)[source]#
diff --git a/searchindex.js b/searchindex.js index 516f0528..1471d950 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["back/api/gencaster","back/api/index","back/api/story_graph","back/api/stream","back/graphql","back/index","back/osc_server","deployment","editor","front","index","quickstart","services","sound","story_graph"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["back/api/gencaster.rst","back/api/index.rst","back/api/story_graph.rst","back/api/stream.rst","back/graphql.rst","back/index.rst","back/osc_server.rst","deployment.rst","editor.rst","front.rst","index.rst","quickstart.rst","services.rst","sound.rst","story_graph.rst"],objects:{"":[[0,0,0,"-","gencaster"],[6,0,0,"-","osc_server"],[2,0,0,"-","story_graph"],[3,0,0,"-","stream"]],"gencaster.distributor":[[0,1,1,"","GenCasterChannel"],[0,1,1,"","GraphQLWSConsumerInjector"],[0,1,1,"","GraphUpdateMessage"],[0,3,1,"","MissingChannelLayer"],[0,1,1,"","NodeUpdateMessage"],[0,1,1,"","StreamLogUpdateMessage"],[0,1,1,"","StreamsUpdateMessage"],[0,4,1,"","uuid_to_group"]],"gencaster.distributor.GenCasterChannel":[[0,2,1,"","__init__"]],"gencaster.distributor.GraphQLWSConsumerInjector":[[0,2,1,"","__init__"],[0,2,1,"","receive"],[0,2,1,"","websocket_disconnect"]],"gencaster.distributor.GraphUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.distributor.NodeUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.distributor.StreamLogUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.distributor.StreamsUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.schema":[[0,1,1,"","AuthStrawberryDjangoField"],[0,1,1,"","IsAuthenticated"],[0,1,1,"","LoginError"],[0,1,1,"","Mutation"],[0,1,1,"","Query"],[0,1,1,"","Subscription"],[0,1,1,"","User"],[0,4,1,"","graphql_check_authenticated"],[0,4,1,"","update_or_create_audio_cell"]],"gencaster.schema.LoginError":[[0,2,1,"","__init__"]],"gencaster.schema.Mutation":[[0,2,1,"","__init__"],[0,2,1,"","add_edge"],[0,2,1,"","add_node"],[0,2,1,"","create_script_cells"],[0,2,1,"","delete_edge"],[0,2,1,"","delete_node"],[0,2,1,"","delete_node_door"],[0,2,1,"","delete_script_cell"],[0,2,1,"","update_audio_file"],[0,2,1,"","update_node"]],"gencaster.schema.Query":[[0,2,1,"","__init__"]],"gencaster.schema.Subscription":[[0,2,1,"","__init__"],[0,2,1,"","graph"],[0,2,1,"","node"],[0,2,1,"","stream_info"]],"gencaster.schema.User":[[0,2,1,"","__init__"]],"gencaster.settings":[[0,0,0,"-","base"],[0,0,0,"-","deploy_dev"],[0,0,0,"-","dev"],[0,0,0,"-","dev_local"],[0,0,0,"-","test"]],"osc_server.exceptions":[[6,3,1,"","MalformedOscMessage"],[6,3,1,"","OscBackendAuthException"]],"osc_server.server":[[6,1,1,"","OSCServer"]],"osc_server.server.OSCServer":[[6,2,1,"","__init__"],[6,2,1,"","acknowledge_handler"],[6,2,1,"","beacon_handler"],[6,2,1,"","remote_action_handler"]],"story_graph.engine":[[2,1,1,"","Engine"],[2,3,1,"","GraphDeadEnd"],[2,3,1,"","InvalidPythonCode"],[2,3,1,"","ScriptCellTimeout"]],"story_graph.engine.Engine":[[2,2,1,"","__init__"],[2,2,1,"","execute_audio_cell"],[2,2,1,"","execute_markdown_code"],[2,2,1,"","execute_node"],[2,2,1,"","execute_python_cell"],[2,2,1,"","execute_sc_code"],[2,2,1,"","get_engine_global_vars"],[2,2,1,"","get_next_node"],[2,2,1,"","get_stream_variables"],[2,2,1,"","start"],[2,2,1,"","wait_for_stream_variable"]],"story_graph.markdown_parser":[[2,1,1,"","GencasterRenderer"],[2,1,1,"","GencasterToken"],[2,4,1,"","md_to_ssml"]],"story_graph.markdown_parser.GencasterRenderer":[[2,2,1,"","__init__"],[2,2,1,"","add_break"],[2,2,1,"","chars"],[2,2,1,"","eval_python"],[2,2,1,"","exec_python"],[2,2,1,"","female"],[2,2,1,"","male"],[2,2,1,"","moderate"],[2,2,1,"","raw_ssml"],[2,2,1,"","validate_gencaster_tokens"],[2,2,1,"","var"]],"story_graph.markdown_parser.GencasterToken":[[2,2,1,"","__init__"]],"story_graph.models":[[2,1,1,"","AudioCell"],[2,1,1,"","CellType"],[2,1,1,"","Edge"],[2,1,1,"","Graph"],[2,1,1,"","Node"],[2,1,1,"","NodeDoor"],[2,3,1,"","NodeDoorMissing"],[2,1,1,"","ScriptCell"]],"story_graph.models.AudioCell":[[2,1,1,"","PlaybackChoices"]],"story_graph.models.Edge":[[2,2,1,"","save"]],"story_graph.models.Graph":[[2,1,1,"","GraphDetailTemplate"],[2,1,1,"","StreamAssignmentPolicy"],[2,2,1,"","acreate_entry_node"],[2,2,1,"","aget_entry_node"]],"story_graph.models.Node":[[2,2,1,"","save"]],"story_graph.models.NodeDoor":[[2,1,1,"","DoorType"],[2,2,1,"","save"]],"stream.exceptions":[[3,3,1,"","InvalidAudioFileException"],[3,3,1,"","NoStreamAvailableException"]],"stream.frontend_types":[[3,1,1,"","Button"],[3,1,1,"","ButtonType"],[3,1,1,"","CallbackAction"],[3,1,1,"","Checkbox"],[3,1,1,"","Dialog"],[3,1,1,"","Input"],[3,1,1,"","Text"]],"stream.frontend_types.Button":[[3,2,1,"","__init__"],[3,2,1,"","cancel"],[3,2,1,"","ok"]],"stream.frontend_types.Checkbox":[[3,2,1,"","__init__"]],"stream.frontend_types.Dialog":[[3,2,1,"","__init__"]],"stream.frontend_types.Input":[[3,2,1,"","__init__"]],"stream.frontend_types.Text":[[3,2,1,"","__init__"]],"stream.models":[[3,1,1,"","AudioFile"],[3,1,1,"","Stream"],[3,1,1,"","StreamInstruction"],[3,1,1,"","StreamLog"],[3,1,1,"","StreamPoint"],[3,1,1,"","StreamVariable"],[3,1,1,"","TextToSpeech"]],"stream.models.StreamInstruction":[[3,1,1,"","InstructionState"]],"stream.models.StreamInstruction.InstructionState":[[3,2,1,"","from_sc_string"]],"stream.models.StreamLog":[[3,1,1,"","LogLevel"],[3,1,1,"","Origin"]],"stream.models.StreamPoint":[[3,2,1,"","send_stream_instruction"],[3,2,1,"","speak_on_stream"]],"stream.models.StreamVariable":[[3,2,1,"","send_to_sc"]],"stream.models.TextToSpeech":[[3,1,1,"","VoiceNameChoices"],[3,2,1,"","create_from_text"]],gencaster:[[0,0,0,"-","asgi"],[0,0,0,"-","distributor"],[0,0,0,"-","schema"],[0,0,0,"-","settings"]],osc_server:[[6,0,0,"-","exceptions"],[6,0,0,"-","models"],[6,0,0,"-","server"]],story_graph:[[2,0,0,"-","engine"],[2,0,0,"-","markdown_parser"],[2,0,0,"-","models"]],stream:[[3,0,0,"-","exceptions"],[3,0,0,"-","frontend_types"],[3,0,0,"-","models"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:function"},terms:{"0":[2,3,7,8],"1":[2,7,8],"10":8,"100":[2,8],"1000":2,"10000":[2,7],"10200":7,"127":7,"150m":10,"2":[2,8],"20":8,"22":7,"2430":0,"255m":7,"3000":7,"3001":7,"300m":2,"301":7,"4":2,"400":8,"404":7,"443":7,"4g":7,"5":[2,3],"50":14,"50000":7,"5432":7,"57120":7,"57130":7,"60000":7,"8":[7,8],"80":7,"8081":7,"8088":7,"8089":7,"8090":7,"abstract":0,"boolean":[2,3,6],"break":2,"case":[2,3],"char":2,"class":[0,2,3,6],"default":[0,2,3],"do":[2,8],"enum":6,"float":3,"function":[0,2,3,5,10],"import":2,"int":3,"long":6,"new":[0,3,6,7],"public":[2,3,6],"return":[0,2,3,6,7,8],"static":[2,6],"super":0,"switch":[0,2],"true":[0,3],"var":[7,8],"while":7,A:[0,2,3,6,7,8,9,14],As:[0,3,6,7],For:[0,7,8],If:[0,2,3,14],In:[0,2,6,7,8,14],Is:2,It:[0,2,3,5,7,8,14],No:3,ONE:7,The:[2,3,5,6,7,8,9,10,14],There:[2,14],These:[2,3],To:[7,8],Will:[2,6],_:[0,3],__init__:[0,2,3,6],abl:6,about:[2,10,14],about_text:2,accept:[3,6],access:[0,2,7,8,9],access_log:7,accord:2,acknowledg:6,acknowledge_handl:6,acreate_entry_nod:2,across:0,act:[2,3,7,14],action:[0,6,7,10],activ:[2,3,7],activate_gps_stream:3,ad:2,add:[2,3,5,8],add_break:2,add_edg:0,add_head:7,add_nod:0,addit:[2,3,4],additional_channel:0,address:6,adjust:7,after:[2,10],again:0,aget_entry_nod:2,all:[0,2,3,5,7,8,10],allow:[0,2,3,5,6,7,8,9,10,14],along:14,also:[0,2,3,5,7,10],although:0,amp:8,an:[0,2,3,5,6,7,8,14],ani:[0,2,3,6,7,10],anoth:14,anymor:2,anyth:2,anywher:7,api:[3,12],app:[0,2,3,6],applic:6,ar:[0,2,3,6,7,8,14],arbitrari:2,arg:[0,2,3],argument:8,asav:2,asgi:0,ask:8,asset:0,assign:[2,3],associ:[0,2,3,6],assum:2,async:[0,2,3,6,8],asyncgener:[0,2],asynchron:2,asyncio:2,attach:[0,3],audio:[0,2,3,10,12,14],audio_cel:[2,3],audio_cell_input:0,audio_fil:[0,2,3],audiobridg:3,audiocel:[0,2,3],audiofil:[0,2,3,8],authent:6,authstrawberrydjangofield:0,auto:3,auto_gener:3,autocomplet:2,automat:3,avail:[0,2,3,6],avoid:2,await:[2,8],back:[0,2,4,6,7,8,9,10,12],backend:[0,2,3,5,6,7,10],backend_osc_password:7,background:[2,8],base:[1,5,10],beacon:[3,6,8],beacon_handl:6,becaus:[2,3,7],becom:2,been:[2,8,10],befor:2,behavior:3,behind:14,better:0,between:[2,4,14],bit:2,block:[2,8],blocking_sleep_tim:2,bool:[0,2,3],booleanfield:[2,3],both:2,bracket:3,branch:2,browser:10,build:9,bulk:2,button:[3,8],button_typ:3,buttontyp:3,c:2,cach:3,calcul:2,call:[0,2,3,10],callabl:2,callback:[0,3,6],callback_act:3,callbackact:3,can:[0,2,3,6,7,8,9,10,14],cancel:[3,8],canva:[0,2],care:[3,5],caster:[4,7,10,12,14],cell:[0,3,12,14],cell_cod:2,cell_ord:2,cell_typ:2,celltyp:2,central:14,certain:0,certbot:7,challeng:7,chanc:14,chang:[0,2,14],changem:7,channel:0,charact:[2,3],charfield:[2,3],charset:7,check:[2,3,6],checkbox:3,choic:[3,8],choos:2,citizen:2,classic:3,classmethod:3,clear:8,click:3,client:[3,6],client_address:6,client_max_body_s:7,close:[0,3],cloud:3,clump:2,cluster:6,cmd:6,code:[2,3,5,6,8],collect:[0,2,3],color:2,com:3,command:8,comment:[2,7,12],commentari:8,commun:[3,4,5,6,7],compon:3,concept:[2,8,14],concern:0,condit:2,conf:7,config:[0,7],configur:0,connect:[0,2,5,7,12,14],consid:[0,2,3,8],consist:[2,10,14],constraint:3,construct:14,constructor:3,contain:[0,2,7,14],content:[0,2,3,8],context:2,continu:[2,8],control:[2,3,7,8],convers:[2,3],convert:[2,3,8],coordin:3,copi:3,core:2,could:[2,7],count:3,counter:3,cover:[2,8,14],cpu:7,creat:[0,2,3,6,7,8,10,14],create_entry_nod:2,create_from_text:3,create_script_cel:0,created_d:3,creator:2,curli:3,current:[2,3,14],cycl:2,dai:8,data:[2,3,9],databas:[0,2,3,5,6,7],date:3,datetim:8,datetimefield:3,de_neural2_c__femal:3,de_standard_a__femal:2,de_standard_b__mal:2,decid:2,decod:0,decor:0,decrement:0,defin:[0,2,3],definit:6,delet:0,delete_edg:0,delete_nod:0,delete_node_door:0,delete_script_cel:0,deploi:[5,7],deploy:[5,10],deriv:3,describ:[2,3,4,14],descript:[2,3],design:6,detail:[0,2],determin:[0,14],determinist:2,dev:[5,7],develop:[2,5,7],dhparam:7,dialect:[2,8],dialog:[2,3,8,14],dict:2,dictionari:[2,8],differ:[0,2],difficult:[0,2],direct:[2,14],directli:[7,8],disable_optim:0,disconnect:0,discov:6,displai:[2,3],display_nam:2,distribut:10,distributor:[1,5],django:[3,5,6,7,10],django_su_pass:7,django_su_us:7,doc:[2,3],docker:[0,10],document:[7,8,9,14],doe:[2,6],domain:8,don:0,door:0,door_typ:2,doortyp:2,drone:8,due:3,dure:2,dynam:[8,10],e:[0,2,3,8],each:[2,3,6,14],easi:8,easier:7,easili:2,edg:[0,2,10],edge_uuid:0,edit:[2,8,10,14],editor:[0,2,4,5,7,10,12,14],eithor:2,element:[3,14],elementplu:3,email:0,emphasi:2,empti:[2,3],en:3,encount:2,end:[2,14],end_text:2,endpoint:[0,3],engin:[0,3,5],enter:2,entranc:2,entri:2,entrypoint:2,enumer:2,environ:0,equival:2,error:[3,7],error_log:7,error_messag:0,establish:14,etc:7,eval:2,eval_python:2,evalu:2,even:10,everi:[2,3],everyth:2,exact:[3,8],exampl:[2,3],except:[0,1,2,5,6],exec:2,exec_python:2,execut:[2,8,14],execute_audio_cel:2,execute_markdown_cod:2,execute_nod:2,execute_python_cel:2,execute_sc_cod:2,exist:[2,3],exit:2,experi:[10,14],explicit:2,explicitli:2,exprang:8,extend:2,extens:8,extern:3,factori:[0,3],fade:8,fadetime_:8,fail:[2,6],failur:6,fallback:2,fals:[0,2,3],fatal:3,favicon:7,femal:2,fetch:2,field:[2,3],file:[2,3,5,8,14],filefield:3,filter:3,find:[0,3],fine:8,finish:[2,3,6,8],firewal:7,first:[2,3],first_nam:0,fit:2,floatfield:2,flow:[2,12],follow:[2,14],foo:[2,3],foobar:2,forc:2,force_insert:2,force_new:3,force_upd:2,foreignkei:[2,3],form:[3,6],format:[2,3,8],forward:[3,7],found:[2,14],frame:0,framework:[3,10],free:[0,7],from:[0,2,3,6,7,8,9,14],from_sc_str:3,front:[4,7,10,12],frontend:[0,1,2,5,7,8,9,10],frontend_typ:3,fullchain:7,fulli:8,further:14,futur:2,g:[0,2,3,8],gain:5,garbag:3,gc:2,gcp:7,gencast:[1,2,3,5,6,7,14],gencasterchannel:0,gencasterrender:[2,8],gencasterstatusenum:6,gencastertoken:2,gener:[0,2,3,5,10,14],get:[2,3,6,8,9],get_engine_global_var:2,get_next_nod:2,get_stream_vari:2,getter:2,given:[0,2,3,6,10],global:12,go:2,goal:6,googl:3,google_application_credenti:7,gp:[3,10],gql:5,grant:10,graph:[0,1,7,8,10,12],graph_uuid:0,graphdeadend:2,graphdetailtempl:2,graphiql:0,graphql:[0,5,9,12],graphql_check_authent:0,graphqlwsconsumerinjector:0,graphsess:2,graphupdatemessag:0,group:[0,14],gstreamer:3,gunicorn:6,ha:[0,2,3,6,8],halt:2,hand:0,handel:5,handl:[0,2,3,5,6,8,10],happen:[2,3,8],have:[0,2,6,10],headlin:8,hello:[2,8],help:[3,8],helper:0,here:[0,2,3],hex:2,hit:6,hold:2,hope:8,host:[3,6,7],hostnam:3,hour:8,how:[0,2,3],html:3,http:[3,7],http_upgrad:7,human:[2,3],i:8,ico:7,id:3,identifi:3,ignor:8,immedi:2,implement:[2,3],implicit:2,in_edg:2,in_node_door:2,includ:[6,7],incom:14,increment:0,indefinit:[2,14],indic:0,info:[0,2],inform:[2,7],initi:7,inject:[0,2],inlin:2,inptut:3,input:[2,3,6,8,10,14],insert:[2,7,8],insist:2,instanc:[2,3,6,7,8],instead:3,instruct:[2,3],instruction_text:3,instructionreceiv:3,instructionst:3,integ:6,integerfield:[2,3],interact:[3,7,8],intern:3,introduc:[3,7],invalid:[2,3],invalidaudiofileexcept:3,invalidpythoncod:2,io:7,ip:[3,6,7],is_act:0,is_blocking_nod:2,is_default:2,is_entry_nod:2,is_staff:0,isauthent:0,iter:[0,2],its:[0,2,3,6],janu:[3,6,10],janus_in_port:[3,6],janus_in_room:[3,6],janus_out_port:[3,6],janus_out_room:[3,6],janus_public_ip:[3,6],jaun:3,javascript:[3,9],jitlib:8,job:3,json:[2,7],jump:[2,14],just:2,kei:[2,3,8],kind:2,know:3,known:2,kr:8,kwarg:[0,2,3],label:[3,8],lack:7,lai:2,lang:6,lang_port:6,languag:[2,3,8],last:3,last_liv:3,last_nam:0,latenc:10,layer:0,layout:6,least:[2,14],less:5,letsencrypt:7,level:[0,2,3],lfdnoise1:8,like:[2,3,7],linear:[10,14],list:[0,2],listen:[3,7,10,14],littl:2,live:[3,6,7,10],local:[3,5,6,7],locat:7,log:[0,3,7],log_not_found:7,loggin:0,logic:2,loginerror:0,loglevel:3,look:7,loop:[2,14],low:10,machin:7,macro:8,made:[0,2],mai:2,make:[2,3,5,6,8],male:2,malformedoscmessag:6,manag:[2,3,5,6,7,10],manner:[0,2,6,8],manual_finish:3,map:6,markdown:[5,12],markdown_pars:2,match_obj:2,max_step:2,md:2,md_to_ssml:2,me:2,mean:[2,14],measur:2,media:0,memori:7,messag:[0,3,6,7],met:2,metadata:[0,3],method:[2,6],microphon:10,miss:2,missingchannellay:0,mode:[2,7],model:[0,1,12],moder:2,modern:10,modifi:3,modified_d:3,modul:[0,2,3],more:[0,5,7,14],most:3,mount:3,move:0,movement:0,mozilla:7,much:14,multipl:[2,3,10,14],multitud:2,music:[2,10,14],must:2,mutat:0,n:2,naiv:6,name:[0,2,3,6,8,10],namespac:2,nat:7,nativ:[2,6],ndef:[3,8],necessari:[2,3,4,6,7,14],need:[0,2,3,7],network:7,new_edg:0,new_nod:0,next:[2,8],ngingx:10,nginx:7,nice:0,nicer:2,node:[0,2,8,10],node_door:2,node_door_uuid:0,node_upd:0,node_uuid:0,nodedoor:[0,2],nodedoormiss:2,nodeupdatemessag:0,nois:3,non:[0,2,3,10,14],none:[0,2,3,6,8],normal:2,nostreamavailableexcept:3,note:2,notion:2,now:[0,2,8],num_listen:3,num_of_listen:0,number:3,object:[2,3,6],obsolet:0,obtain:[2,9],occur:3,off:[2,7],offlin:8,ok:[3,8],older:6,omit:3,onc:2,one:[2,3,14],ones:0,onetoonefield:2,onli:[0,2,6,7,14],oper:[2,5],option:[0,2,7],order:[2,6,7,8,14],org:[3,7],origin:[3,7],orm:6,os:3,osc:[2,3,5,7,12],osc_arg:6,osc_backend:7,osc_backend_host:6,osc_backend_port:6,osc_serv:6,oscauthmixin:5,oscbackendauthexcept:6,oscserv:6,other:2,otherwis:[0,7],our:[0,2,3,6],ourselv:3,out:[2,3,6,7,8],out_edg:2,out_node_door:2,outgo:14,output:2,over:[0,2],overflow:0,overrid:2,own:[2,6],page:[0,3],pair:3,paramet:[2,3],pars:[2,3],parser:5,part:[0,7],pass:3,password:[6,7],past:3,path:[2,7],paus:8,peer:7,pem:7,per:2,period:2,permiss:10,perspect:2,pick:2,placehold:3,plai:[2,8,14],plain:3,playback:[3,8,14],playbackchoic:2,pleas:[2,3],plu:[2,3],plugin:0,point:[2,3],polici:2,poll:6,popup:3,port:[3,6,7],posit:[2,10],position_i:2,position_x:2,possibl:[2,3,7,8,14],postgr:7,postgres_db:7,postgres_password:7,postgres_us:7,pre:3,prefetch_rel:0,present:14,primari:[2,3],prioriti:7,privkei:7,probabl:0,procedur:3,process:[2,6],product:0,program:2,project:0,propag:7,proper:[5,7],properli:6,properti:[2,6],proto:7,protocol:[4,5,6],protocol_vers:6,provid:2,proxy_add_x_forwarded_for:7,proxy_http_vers:7,proxy_pass:7,proxy_redirect:7,proxy_set_head:7,pub:7,public_vis:2,publish:0,purpos:0,put:2,python:[2,3,10,12],pythonosc:6,queri:[0,5],quickstart:10,radiophon:10,rais:2,raise_except:2,random:2,rate:3,rather:[2,6,7],raw:[2,6],raw_ssml:2,reachabl:3,react:10,read:8,readi:6,real:[7,10],realtim:7,receiv:[0,3,6,7],recurs:2,redi:[0,7],redirect:7,refer:[2,7],reflect:3,regard:[0,7],reject:6,relat:[2,3],relationship:[2,3],releas:3,reli:7,remot:6,remote_action_handl:6,remote_addr:7,remoteactionmessag:5,remoteactiontyp:6,remov:8,renam:0,render:[2,10],replac:[0,2,14],repositori:7,repres:[2,3,14],represent:2,request:[3,6],request_uri:7,requir:3,respect:[2,3],respons:2,restrict:[0,6],result:[2,6,7],return_valu:[3,6],reusabl:0,revers:[2,3],robot:7,room:[3,6],rtp:3,run:[0,2,3,6,7],runtime_valu:2,sai:2,said:14,same:3,sampl:3,save:[2,3,8],sc:3,sc_name:3,sc_string:3,scacknowledgemessag:[3,5],scbeaconmessag:5,schema:[1,5],scheme:7,sclang:[2,8],score:2,script:[2,12,14],script_cel:2,script_cell_input:0,script_cell_uuid:0,scriptcel:[0,2,3],scriptcelltimeout:2,scsynth:3,search:3,second:2,secur:2,see:[0,2,3,5,6,8],seem:[3,6],select:14,select_rel:0,self:[2,3],send:[3,6],send_stream_instruct:3,send_to_sc:3,send_vari:3,sensit:7,sentry_dsn_caster_back:7,sentry_dsn_caster_editor:7,sentry_dsn_caster_front:7,separ:3,serv:3,server:[0,2,3,5,7,8,12],server_nam:7,servic:[2,3,5,10],session:[2,3,14],set:[1,2,3,5,8],setup:[2,3,7],share:3,should:2,signal:[2,3],simpli:[3,8],singl:3,singular:2,sinosc:8,skip:2,slug:2,slug_nam:2,slugfield:2,so:[0,2,3,6],solut:3,solv:3,some:[2,6,7],someth:[2,8],something_unknown:2,sonic:2,sound:[5,7,9,10,12],sourc:[0,2,3,6],speak:[2,3,6],speak_on_stream:3,speaker:2,specif:[0,2],speech:[2,3,14],spin:7,split:0,sql:2,sqlite:0,ssl:7,ssl_certif:7,ssl_certificate_kei:7,ssl_dhparam:7,ssml:[2,3],ssml_text:3,stack:0,start:[2,3,8,14],start_text:2,state:[2,3],stateless:3,statement:[2,3,14],statu:[6,7],step:[2,4],still:2,stop:0,storag:5,store:[2,3,6,7],stori:[1,5,7,8,10],story_graph:[0,2,3],storytel:14,str:[0,2,3],strawberri:0,strawberryunion:0,stream:[0,1,2,5,6,7,8,9,10],stream_assignment_polici:2,stream_info:0,stream_log:0,stream_point:[0,3],stream_point_uuid:0,stream_to_sc:3,stream_uuid:0,stream_vari:[0,2],streamassignmentpolici:2,streaminstruct:[2,3,6],streamlog:3,streamlogupdatemessag:0,streampoint:[2,3,6],streamsupdatemessag:0,streamvari:[2,3,8],string:[2,3,6],sub:7,subclass:2,subscrib:0,subscript:[0,3],succe:3,success:6,supercollid:[2,3,6,7,10,12],support:7,surround:[2,3],sync:[2,8],synchron:[0,2],syntax:2,synth:6,synth_port:6,t:0,tag:2,take:[3,5],taken:[3,14],talk:2,target:6,tdef:8,templat:[2,12],template_nam:2,term:6,test:5,text:[2,3,8,14],textfield:[2,3],texttospeech:[2,3,8],than:[2,7],thei:[2,3],them:[0,7],therefor:[2,7],thi:[0,2,3,5,6,7,8,14],thing:0,tho:8,through:[2,5,8],thrown:2,time:[0,2,10],timelin:14,timeout:2,titl:[3,8],tool:0,topic:7,trace:3,trade:5,traffic:7,transform:2,translat:2,transmit:3,treat:2,tree:14,trigger:[2,3,6,8,14],tweak:10,two:[2,8,14],txt:7,type:[0,1,5,6,8],typescript:5,u:0,udp:[5,6,7],ufw:10,ui:2,under:[0,3],understand:6,union:2,uniqu:2,univers:8,unlock:3,until:[2,8],up:7,updat:[0,2,3,6],update_audio_fil:0,update_nod:0,update_or_create_audio_cel:0,update_spe:2,upgrad:[6,7],upload:3,upon:[0,14],url:2,us:[0,2,3,4,5,6,7,8,10],use_input:[3,6],user:[0,3,7,8,10],usernam:0,uses:6,utf:7,uuid:[0,2,3,6],uuid_to_group:0,uuidfield:[2,3],v6:7,val:3,valid:[2,3,6],validate_gencaster_token:2,valu:[2,3,6,8],variabl:[2,3,8],varieti:2,version:6,via:[0,2,3,6,7,8,10,14],visibl:2,visit:[0,14],visual:2,voic:3,voice_nam:3,voicenamechoic:[2,3],volum:2,vue:10,wa:[0,2,8],wai:[2,7,8],wait:[2,8],wait_for_stream_vari:[2,8],walk:14,want:2,warn:3,we:[0,2,3,5,6,8],web:10,webrtc:[3,7,10],websocket:0,websocket_disconnect:0,well:[0,2],what:[2,8],when:[0,3,6],where:[2,3],which:[0,2,3,5,6,7,8,9,10,14],whose:3,wip:14,within:[0,2,3,8,14],without:[2,3],word:2,work:[6,14],world:2,would:[0,6],write:[2,5,8],written:[2,5,8,10],wrong:[2,6],x:[2,7],y:2,yet:[0,2],yield:[2,3,8],you:[0,2,8],your:8},titles:["GenCaster Base","API","Story Graph","Stream","GraphQL","Caster Back","OSC Server","Deployment","Caster Editor","Caster Front","Gencaster","Quickstart","Services","Caster Sound","Story Graph"],titleterms:{"var":2,add:4,api:[1,5,6],audio:8,back:5,base:0,caster:[5,8,9,13],cell:[2,8],comment:8,connect:9,content:[1,10,12],deploi:0,deploy:[0,7],dev:0,develop:0,distributor:0,docker:7,door:2,edg:14,editor:8,engin:2,env:7,except:3,flow:9,front:9,frontend:3,gencast:[0,10],global:5,graph:[2,3,5,14],graphql:4,local:0,markdown:[2,8],model:[2,3,5,6],ngingx:7,node:14,osc:6,oscauthmixin:6,parser:2,playback:2,python:8,queri:4,quickstart:11,remoteactionmessag:6,rout:6,runtim:2,scacknowledgemessag:6,scbeaconmessag:6,schema:0,script:8,secret:7,server:6,servic:[7,12],set:0,sound:13,stori:[2,14],stream:3,supercollid:8,templat:9,test:0,todo:[0,2,3,4,6,11,14],type:[2,3],ufw:7}}) \ No newline at end of file +Search.setIndex({docnames:["back/api/gencaster","back/api/index","back/api/story_graph","back/api/stream","back/graphql","back/index","back/osc_server","deployment","editor","front","index","quickstart","services","sound","story_graph"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["back/api/gencaster.rst","back/api/index.rst","back/api/story_graph.rst","back/api/stream.rst","back/graphql.rst","back/index.rst","back/osc_server.rst","deployment.rst","editor.rst","front.rst","index.rst","quickstart.rst","services.rst","sound.rst","story_graph.rst"],objects:{"":[[0,0,0,"-","gencaster"],[6,0,0,"-","osc_server"],[2,0,0,"-","story_graph"],[3,0,0,"-","stream"]],"gencaster.distributor":[[0,1,1,"","GenCasterChannel"],[0,1,1,"","GraphQLWSConsumerInjector"],[0,1,1,"","GraphUpdateMessage"],[0,3,1,"","MissingChannelLayer"],[0,1,1,"","NodeUpdateMessage"],[0,1,1,"","StreamLogUpdateMessage"],[0,1,1,"","StreamsUpdateMessage"],[0,4,1,"","uuid_to_group"]],"gencaster.distributor.GenCasterChannel":[[0,2,1,"","__init__"]],"gencaster.distributor.GraphQLWSConsumerInjector":[[0,2,1,"","__init__"],[0,2,1,"","receive"],[0,2,1,"","websocket_disconnect"]],"gencaster.distributor.GraphUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.distributor.NodeUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.distributor.StreamLogUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.distributor.StreamsUpdateMessage":[[0,2,1,"","__init__"]],"gencaster.schema":[[0,1,1,"","AuthStrawberryDjangoField"],[0,1,1,"","IsAuthenticated"],[0,1,1,"","LoginError"],[0,1,1,"","Mutation"],[0,1,1,"","Query"],[0,1,1,"","Subscription"],[0,1,1,"","User"],[0,4,1,"","graphql_check_authenticated"],[0,4,1,"","update_or_create_audio_cell"]],"gencaster.schema.LoginError":[[0,2,1,"","__init__"]],"gencaster.schema.Mutation":[[0,2,1,"","__init__"],[0,2,1,"","add_edge"],[0,2,1,"","add_node"],[0,2,1,"","create_script_cells"],[0,2,1,"","delete_edge"],[0,2,1,"","delete_node"],[0,2,1,"","delete_node_door"],[0,2,1,"","delete_script_cell"],[0,2,1,"","update_audio_file"],[0,2,1,"","update_node"]],"gencaster.schema.Query":[[0,2,1,"","__init__"]],"gencaster.schema.Subscription":[[0,2,1,"","__init__"],[0,2,1,"","graph"],[0,2,1,"","node"],[0,2,1,"","stream_info"]],"gencaster.schema.User":[[0,2,1,"","__init__"]],"gencaster.settings":[[0,0,0,"-","base"],[0,0,0,"-","deploy_dev"],[0,0,0,"-","dev"],[0,0,0,"-","dev_local"],[0,0,0,"-","test"]],"osc_server.exceptions":[[6,3,1,"","MalformedOscMessage"],[6,3,1,"","OscBackendAuthException"]],"osc_server.server":[[6,1,1,"","OSCServer"]],"osc_server.server.OSCServer":[[6,2,1,"","__init__"],[6,2,1,"","acknowledge_handler"],[6,2,1,"","beacon_handler"],[6,2,1,"","remote_action_handler"]],"story_graph.engine":[[2,1,1,"","Engine"],[2,3,1,"","GraphDeadEnd"],[2,3,1,"","InvalidPythonCode"],[2,3,1,"","ScriptCellTimeout"]],"story_graph.engine.Engine":[[2,2,1,"","__init__"],[2,2,1,"","execute_audio_cell"],[2,2,1,"","execute_markdown_code"],[2,2,1,"","execute_node"],[2,2,1,"","execute_python_cell"],[2,2,1,"","execute_sc_code"],[2,2,1,"","get_engine_global_vars"],[2,2,1,"","get_next_node"],[2,2,1,"","get_stream_variables"],[2,2,1,"","start"],[2,2,1,"","wait_for_stream_variable"]],"story_graph.markdown_parser":[[2,1,1,"","GencasterRenderer"],[2,1,1,"","GencasterToken"],[2,4,1,"","md_to_ssml"]],"story_graph.markdown_parser.GencasterRenderer":[[2,2,1,"","__init__"],[2,2,1,"","add_break"],[2,2,1,"","chars"],[2,2,1,"","eval_python"],[2,2,1,"","exec_python"],[2,2,1,"","female"],[2,2,1,"","male"],[2,2,1,"","moderate"],[2,2,1,"","raw_ssml"],[2,2,1,"","validate_gencaster_tokens"],[2,2,1,"","var"]],"story_graph.markdown_parser.GencasterToken":[[2,2,1,"","__init__"]],"story_graph.models":[[2,1,1,"","AudioCell"],[2,1,1,"","CellType"],[2,1,1,"","Edge"],[2,1,1,"","Graph"],[2,1,1,"","Node"],[2,1,1,"","NodeDoor"],[2,3,1,"","NodeDoorMissing"],[2,1,1,"","ScriptCell"]],"story_graph.models.AudioCell":[[2,1,1,"","PlaybackChoices"]],"story_graph.models.Edge":[[2,2,1,"","save"]],"story_graph.models.Graph":[[2,1,1,"","GraphDetailTemplate"],[2,1,1,"","StreamAssignmentPolicy"],[2,2,1,"","acreate_entry_node"],[2,2,1,"","aget_entry_node"]],"story_graph.models.Node":[[2,2,1,"","save"]],"story_graph.models.NodeDoor":[[2,1,1,"","DoorType"],[2,2,1,"","save"]],"stream.exceptions":[[3,3,1,"","InvalidAudioFileException"],[3,3,1,"","NoStreamAvailableException"]],"stream.frontend_types":[[3,1,1,"","Button"],[3,1,1,"","ButtonType"],[3,1,1,"","CallbackAction"],[3,1,1,"","Checkbox"],[3,1,1,"","Dialog"],[3,1,1,"","Input"],[3,1,1,"","Text"]],"stream.frontend_types.Button":[[3,2,1,"","__init__"],[3,2,1,"","cancel"],[3,2,1,"","ok"]],"stream.frontend_types.Checkbox":[[3,2,1,"","__init__"]],"stream.frontend_types.Dialog":[[3,2,1,"","__init__"]],"stream.frontend_types.Input":[[3,2,1,"","__init__"]],"stream.frontend_types.Text":[[3,2,1,"","__init__"]],"stream.models":[[3,1,1,"","AudioFile"],[3,1,1,"","Stream"],[3,1,1,"","StreamInstruction"],[3,1,1,"","StreamLog"],[3,1,1,"","StreamPoint"],[3,1,1,"","StreamVariable"],[3,1,1,"","TextToSpeech"]],"stream.models.StreamInstruction":[[3,1,1,"","InstructionState"]],"stream.models.StreamInstruction.InstructionState":[[3,2,1,"","from_sc_string"]],"stream.models.StreamLog":[[3,1,1,"","LogLevel"],[3,1,1,"","Origin"]],"stream.models.StreamPoint":[[3,2,1,"","send_stream_instruction"],[3,2,1,"","speak_on_stream"]],"stream.models.StreamVariable":[[3,2,1,"","send_to_sc"]],"stream.models.TextToSpeech":[[3,1,1,"","VoiceNameChoices"],[3,2,1,"","create_from_text"]],gencaster:[[0,0,0,"-","asgi"],[0,0,0,"-","distributor"],[0,0,0,"-","schema"],[0,0,0,"-","settings"]],osc_server:[[6,0,0,"-","exceptions"],[6,0,0,"-","models"],[6,0,0,"-","server"]],story_graph:[[2,0,0,"-","engine"],[2,0,0,"-","markdown_parser"],[2,0,0,"-","models"]],stream:[[3,0,0,"-","exceptions"],[3,0,0,"-","frontend_types"],[3,0,0,"-","models"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:function"},terms:{"0":[2,3,7,8],"1":[2,7,8],"10":8,"100":[2,8],"1000":2,"10000":[2,7],"10200":7,"127":7,"150m":10,"2":[2,8],"20":8,"22":7,"2430":0,"255m":7,"3000":7,"3001":7,"300m":2,"301":7,"4":2,"400":8,"404":7,"443":7,"4g":7,"5":[2,3],"50":14,"50000":7,"5432":7,"57120":7,"57130":7,"60000":7,"8":[7,8],"80":7,"8081":7,"8088":7,"8089":7,"8090":7,"abstract":0,"boolean":[2,3,6],"break":2,"case":[2,3],"char":2,"class":[0,2,3,6],"default":[0,2,3],"do":[2,8],"enum":6,"float":3,"function":[0,2,3,5,10],"import":2,"int":3,"long":6,"new":[0,3,6,7],"public":[2,3,6],"return":[0,2,3,6,7,8],"static":[2,6],"super":0,"switch":[0,2],"true":[0,2,3],"var":[7,8],"while":7,A:[0,2,3,6,7,8,9,14],As:[0,3,6,7],For:[0,7,8],If:[0,2,3,14],In:[0,2,6,7,8,14],Is:2,It:[0,2,3,5,7,8,14],No:3,ONE:7,The:[2,3,5,6,7,8,9,10,14],There:[2,14],These:[2,3],To:[7,8],Will:[2,6],_:[0,3],__init__:[0,2,3,6],abl:6,about:[2,10,14],about_text:2,accept:[3,6],access:[0,2,7,8,9],access_log:7,accord:2,acknowledg:6,acknowledge_handl:6,acreate_entry_nod:2,across:0,act:[2,3,7,14],action:[0,2,6,7,10],activ:[2,3,7],activate_gps_stream:3,ad:2,add:[2,3,5,8],add_break:2,add_edg:0,add_head:7,add_nod:0,addit:[2,3,4],additional_channel:0,address:6,adjust:7,after:[2,10],again:0,aget_entry_nod:2,all:[0,2,3,5,7,8,10],allow:[0,2,3,5,6,7,8,9,10,14],along:14,alreadi:2,also:[0,2,3,5,7,10],although:0,amp:8,an:[0,2,3,5,6,7,8,14],ani:[0,2,3,6,7,10],anoth:14,anymor:2,anyth:2,anywher:7,api:[3,12],app:[0,2,3,6],applic:6,ar:[0,2,3,6,7,8,14],arbitrari:2,arg:[0,2,3],argument:8,asav:2,asgi:0,ask:8,asset:0,assign:[2,3],associ:[0,2,3,6],assum:2,async:[0,2,3,6,8],asyncgener:[0,2],asynchron:2,asyncio:2,attach:[0,3],audio:[0,2,3,10,12,14],audio_cel:[2,3],audio_cell_input:0,audio_fil:[0,2,3],audiobridg:3,audiocel:[0,2,3],audiofil:[0,2,3,8],authent:6,authstrawberrydjangofield:0,auto:3,auto_gener:3,autocomplet:2,automat:3,avail:[0,2,3,6],avoid:2,await:[2,8],back:[0,2,4,6,7,8,9,10,12],backend:[0,2,3,5,6,7,10],backend_osc_password:7,background:[2,8],base:[1,2,5,10],beacon:[3,6,8],beacon_handl:6,becaus:[2,3,7],becom:2,been:[2,8,10],befor:2,behavior:3,behind:14,better:0,between:[2,4,14],bit:2,block:[2,8],blocking_sleep_tim:2,bool:[0,2,3],booleanfield:[2,3],both:2,bracket:3,branch:2,bring:2,browser:10,build:9,bulk:2,button:[3,8],button_typ:3,buttontyp:3,c:2,cach:3,calcul:2,call:[0,2,3,10],callabl:2,callback:[0,3,6],callback_act:3,callbackact:3,can:[0,2,3,6,7,8,9,10,14],cancel:[3,8],canva:[0,2],care:[3,5],caster:[4,7,10,12,14],cell:[0,3,12,14],cell_cod:2,cell_ord:2,cell_typ:2,celltyp:2,central:14,certain:0,certbot:7,challeng:7,chanc:14,chang:[0,2,14],changem:7,channel:0,charact:[2,3],charfield:[2,3],charset:7,check:[2,3,6],checkbox:3,choic:[3,8],choos:2,citizen:2,classic:3,classmethod:3,clean:2,clear:[2,8],click:3,client:[3,6],client_address:6,client_max_body_s:7,close:[0,3],cloud:3,clump:2,cluster:6,cmd:6,cmdperiod:2,code:[2,3,5,6,8],collect:[0,2,3],color:2,com:3,command:8,comment:[2,7,12],commentari:8,commun:[3,4,5,6,7],compon:3,concept:[2,8,14],concern:0,condit:2,conf:7,config:[0,7],configur:0,connect:[0,2,5,7,12,14],consid:[0,2,3,8],consist:[2,10,14],constraint:3,construct:14,constructor:3,contain:[0,2,7,14],content:[0,2,3,8],context:2,continu:[2,8],control:[2,3,7,8],convers:[2,3],convert:[2,3,8],coordin:3,copi:3,core:2,could:[2,7],count:3,counter:3,cover:[2,8,14],cpu:7,creat:[0,2,3,6,7,8,10,14],create_entry_nod:2,create_from_text:3,create_script_cel:0,created_d:3,creator:2,curli:3,current:[2,3,14],cycl:2,dai:8,data:[2,3,9],databas:[0,2,3,5,6,7],date:3,datetim:8,datetimefield:3,de_neural2_c__femal:3,de_standard_a__femal:2,de_standard_b__mal:2,decid:2,decod:0,decor:0,decrement:0,defin:[0,2,3],definit:6,delet:0,delete_edg:0,delete_nod:0,delete_node_door:0,delete_script_cel:0,deploi:[5,7],deploy:[5,10],deriv:[2,3],describ:[2,3,4,14],descript:[2,3],design:6,detail:[0,2],determin:[0,14],determinist:2,dev:[5,7],develop:[2,5,7],dhparam:7,dialect:[2,8],dialog:[2,3,8,14],dict:2,dictionari:[2,8],differ:[0,2],difficult:[0,2],direct:[2,14],directli:[7,8],disable_optim:0,disconnect:0,discov:6,displai:[2,3],display_nam:2,distribut:10,distributor:[1,5],django:[3,5,6,7,10],django_su_pass:7,django_su_us:7,doc:[2,3],docker:[0,10],document:[7,8,9,14],doe:[2,6],domain:8,don:0,door:0,door_typ:2,doortyp:2,down:2,drone:8,due:3,dure:2,dynam:[8,10],e:[0,2,3,8],each:[2,3,6,14],easi:8,easier:7,easili:2,edg:[0,2,10],edge_uuid:0,edit:[2,8,10,14],editor:[0,2,4,5,7,10,12,14],eithor:2,element:[3,14],elementplu:3,email:0,emphasi:2,empti:[2,3],en:3,encount:2,end:[2,14],end_text:2,endpoint:[0,3],engin:[0,3,5],enter:2,entranc:2,entri:2,entrypoint:2,enumer:2,environ:[0,2],equival:2,error:[3,7],error_log:7,error_messag:0,establish:14,etc:7,eval:2,eval_python:2,evalu:2,even:10,everi:[2,3],everyth:2,exact:[3,8],exampl:[2,3],except:[0,1,2,5,6],exec:2,exec_python:2,execut:[2,8,14],execute_audio_cel:2,execute_markdown_cod:2,execute_nod:2,execute_python_cel:2,execute_sc_cod:2,exist:[2,3],exit:2,experi:[10,14],explicit:2,explicitli:2,exprang:8,extend:2,extens:8,extern:3,factori:[0,3],fade:8,fadetime_:8,fail:[2,6],failur:6,fallback:2,fals:[0,2,3],fatal:3,favicon:7,femal:2,fetch:2,field:[2,3],file:[2,3,5,8,14],filefield:3,filter:3,find:[0,3],fine:8,finish:[2,3,6,8],firewal:7,first:[2,3],first_nam:0,fit:2,floatfield:2,flow:[2,12],follow:[2,14],foo:[2,3],foobar:2,forc:2,force_insert:2,force_new:3,force_upd:2,foreignkei:[2,3],form:[3,6],format:[2,3,8],forward:[3,7],found:[2,14],frame:0,framework:[3,10],free:[0,7],from:[0,2,3,6,7,8,9,14],from_sc_str:3,front:[4,7,10,12],frontend:[0,1,2,5,7,8,9,10],frontend_typ:3,fullchain:7,fulli:8,further:14,futur:2,g:[0,2,3,8],gain:5,garbag:3,gc:2,gcp:7,gencast:[1,2,3,5,6,7,14],gencasterchannel:0,gencasterrender:[2,8],gencasterstatusenum:6,gencastertoken:2,gener:[0,2,3,5,10,14],get:[2,3,6,8,9],get_engine_global_var:2,get_next_nod:2,get_stream_vari:2,getter:2,given:[0,2,3,6,10],global:12,go:2,goal:6,googl:3,google_application_credenti:7,gp:[3,10],gql:5,grant:10,graph:[0,1,7,8,10,12],graph_uuid:0,graphdeadend:2,graphdetailtempl:2,graphiql:0,graphql:[0,5,9,12],graphql_check_authent:0,graphqlwsconsumerinjector:0,graphsess:2,graphupdatemessag:0,group:[0,14],gstreamer:3,gunicorn:6,ha:[0,2,3,6,8],halt:2,hand:0,handel:5,handl:[0,2,3,5,6,8,10],happen:[2,3,8],have:[0,2,6,10],headlin:8,hello:[2,8],help:[3,8],helper:0,here:[0,2,3],hex:2,hit:6,hold:2,hope:8,host:[3,6,7],hostnam:3,hour:8,how:[0,2,3],html:3,http:[3,7],http_upgrad:7,human:[2,3],i:8,ico:7,id:3,identifi:3,ignor:[2,8],immedi:2,implement:[2,3],implicit:2,in_edg:2,in_node_door:2,includ:[6,7],incom:14,increment:0,indefinit:[2,14],indic:0,info:[0,2],inform:[2,7],initi:7,inject:[0,2],inlin:2,inptut:3,input:[2,3,6,8,10,14],insert:[2,7,8],insist:2,instanc:[2,3,6,7,8],instead:3,instruct:[2,3],instruction_text:3,instructionreceiv:3,instructionst:3,integ:6,integerfield:[2,3],interact:[3,7,8],intern:3,introduc:[3,7],invalid:[2,3],invalidaudiofileexcept:3,invalidpythoncod:2,io:7,ip:[3,6,7],is_act:0,is_blocking_nod:2,is_default:2,is_entry_nod:2,is_staff:0,isauthent:0,iter:[0,2],its:[0,2,3,6],janu:[3,6,10],janus_in_port:[3,6],janus_in_room:[3,6],janus_out_port:[3,6],janus_out_room:[3,6],janus_public_ip:[3,6],jaun:3,javascript:[3,9],jitlib:8,job:3,json:[2,7],jump:[2,14],just:2,kei:[2,3,8],kind:2,know:3,known:2,kr:8,kwarg:[0,2,3],label:[3,8],lack:7,lai:2,lang:6,lang_port:6,languag:[2,3,8],last:3,last_liv:3,last_nam:0,latenc:10,layer:0,layout:6,least:[2,14],left:2,less:5,letsencrypt:7,level:[0,2,3],lfdnoise1:8,like:[2,3,7],linear:[10,14],list:[0,2],listen:[3,7,10,14],littl:2,live:[3,6,7,10],local:[3,5,6,7],locat:7,log:[0,2,3,7],log_not_found:7,loggin:0,logic:2,loginerror:0,loglevel:3,look:7,loop:[2,14],low:10,machin:7,macro:8,made:[0,2],mai:2,make:[2,3,5,6,8],male:2,malformedoscmessag:6,manag:[2,3,5,6,7,10],manner:[0,2,6,8],manual_finish:3,map:6,markdown:[5,12],markdown_pars:2,match_obj:2,max_step:2,md:2,md_to_ssml:2,me:2,mean:[2,14],measur:2,media:0,memori:7,messag:[0,3,6,7],met:2,metadata:[0,3],method:[2,6],microphon:10,miss:2,missingchannellay:0,mode:[2,7],model:[0,1,12],moder:2,modern:10,modifi:3,modified_d:3,modul:[0,2,3],more:[0,5,7,14],most:3,mount:3,move:0,movement:0,mozilla:7,much:14,multipl:[2,3,10,14],multitud:2,music:[2,10,14],must:2,mutat:0,n:2,naiv:6,name:[0,2,3,6,8,10],namespac:2,nat:7,nativ:[2,6],ndef:[3,8],necessari:[2,3,4,6,7,14],need:[0,2,3,7],network:7,new_edg:0,new_nod:0,next:[2,8],ngingx:10,nginx:7,nice:0,nicer:2,node:[0,2,8,10],node_door:2,node_door_uuid:0,node_upd:0,node_uuid:0,nodedoor:[0,2],nodedoormiss:2,nodeupdatemessag:0,nois:3,non:[0,2,3,10,14],none:[0,2,3,6,8],normal:2,nostreamavailableexcept:3,note:2,notion:2,now:[0,2,8],num_listen:3,num_of_listen:0,number:3,object:[2,3,6],obsolet:0,obtain:[2,9],occur:3,off:[2,7],offlin:8,ok:[3,8],older:6,omit:3,onc:2,one:[2,3,14],ones:0,onetoonefield:2,onli:[0,2,6,7,14],oper:[2,5],option:[0,2,7],order:[2,6,7,8,14],org:[3,7],origin:[3,7],orm:6,os:3,osc:[2,3,5,7,12],osc_arg:6,osc_backend:7,osc_backend_host:6,osc_backend_port:6,osc_serv:6,oscauthmixin:5,oscbackendauthexcept:6,oscserv:6,other:2,otherwis:[0,7],our:[0,2,3,6],ourselv:3,out:[2,3,6,7,8],out_edg:2,out_node_door:2,outgo:14,output:2,over:[0,2],overflow:0,overrid:2,own:[2,6],page:[0,3],pair:3,paramet:[2,3],pars:[2,3],parser:5,part:[0,7],pass:3,password:[6,7],past:3,path:[2,7],pattern:2,paus:8,peer:7,pem:7,per:2,period:2,permiss:10,perspect:2,pick:2,placehold:3,plai:[2,8,14],plain:3,playback:[3,8,14],playbackchoic:2,pleas:[2,3],plu:[2,3],plugin:0,point:[2,3],polici:2,poll:6,popup:3,port:[3,6,7],posit:[2,10],position_i:2,position_x:2,possibl:[2,3,7,8,14],postgr:7,postgres_db:7,postgres_password:7,postgres_us:7,pre:3,prefetch_rel:0,present:14,primari:[2,3],prioriti:7,privkei:7,probabl:0,procedur:3,process:[2,6],product:0,program:2,project:0,propag:7,proper:[5,7],properli:6,properti:[2,6],proto:7,protocol:[4,5,6],protocol_vers:6,provid:2,proxy_add_x_forwarded_for:7,proxy_http_vers:7,proxy_pass:7,proxy_redirect:7,proxy_set_head:7,pub:7,public_vis:2,publish:0,purpos:0,put:2,python:[2,3,10,12],pythonosc:6,queri:[0,5],quickstart:10,radiophon:10,rais:2,raise_except:2,random:2,rate:3,rather:[2,6,7],raw:[2,6],raw_ssml:2,reachabl:3,react:10,read:8,readi:6,real:[7,10],realtim:7,receiv:[0,3,6,7],recurs:2,redi:[0,7],redirect:7,refer:[2,7],reflect:3,regard:[0,7],reject:6,relat:[2,3],relationship:[2,3],releas:3,reli:7,remot:6,remote_action_handl:6,remote_addr:7,remoteactionmessag:5,remoteactiontyp:6,remov:8,renam:0,render:[2,10],replac:[0,2,14],repositori:7,repres:[2,3,14],represent:2,request:[3,6],request_uri:7,requir:3,reset:2,respect:[2,3],respons:2,restrict:[0,6],result:[2,6,7],return_valu:[3,6],reusabl:0,revers:[2,3],robot:7,room:[3,6],rtp:3,run:[0,2,3,6,7],run_cleanup_procedur:2,runtime_valu:2,sai:2,said:14,same:3,sampl:3,save:[2,3,8],sc:3,sc_name:3,sc_string:3,scacknowledgemessag:[3,5],scbeaconmessag:5,schema:[1,5],scheme:7,sclang:[2,8],score:2,script:[2,12,14],script_cel:2,script_cell_input:0,script_cell_uuid:0,scriptcel:[0,2,3],scriptcelltimeout:2,scsynth:3,search:3,second:2,secur:2,see:[0,2,3,5,6,8],seem:[3,6],select:14,select_rel:0,self:[2,3],send:[3,6],send_stream_instruct:3,send_to_sc:3,send_vari:3,sensit:7,sentry_dsn_caster_back:7,sentry_dsn_caster_editor:7,sentry_dsn_caster_front:7,separ:3,serv:3,server:[0,2,3,5,7,8,12],server_nam:7,servic:[2,3,5,10],session:[2,3,14],set:[1,2,3,5,8],setup:[2,3,7],share:3,should:2,signal:[2,3],simpli:[3,8],singl:3,singular:2,sinosc:8,skip:2,slug:2,slug_nam:2,slugfield:2,so:[0,2,3,6],solut:3,solv:3,some:[2,6,7],someth:[2,8],something_unknown:2,sonic:2,sound:[2,5,7,9,10,12],sourc:[0,2,3,6],speak:[2,3,6],speak_on_stream:3,speaker:2,specif:[0,2],speech:[2,3,14],spin:7,split:0,sql:2,sqlite:0,ssl:7,ssl_certif:7,ssl_certificate_kei:7,ssl_dhparam:7,ssml:[2,3],ssml_text:3,stack:0,start:[2,3,8,14],start_text:2,state:[2,3],stateless:3,statement:[2,3,14],statu:[6,7],step:[2,4],still:2,stop:[0,2],storag:5,store:[2,3,6,7],stori:[1,5,7,8,10],story_graph:[0,2,3],storytel:14,str:[0,2,3],strawberri:0,strawberryunion:0,stream:[0,1,2,5,6,7,8,9,10],stream_assignment_polici:2,stream_info:0,stream_log:0,stream_point:[0,3],stream_point_uuid:0,stream_to_sc:3,stream_uuid:0,stream_vari:[0,2],streamassignmentpolici:2,streaminstruct:[2,3,6],streamlog:3,streamlogupdatemessag:0,streampoint:[2,3,6],streamsupdatemessag:0,streamvari:[2,3,8],string:[2,3,6],sub:7,subclass:2,subscrib:0,subscript:[0,3],succe:3,success:6,supercollid:[2,3,6,7,10,12],support:7,surround:[2,3],sync:[2,8],synchron:[0,2],syntax:2,synth:6,synth_port:6,t:0,tag:2,take:[3,5],taken:[3,14],talk:2,target:6,task:2,tdef:8,templat:[2,12],template_nam:2,term:6,test:5,text:[2,3,8,14],textfield:[2,3],texttospeech:[2,3,8],than:[2,7],thei:[2,3],them:[0,7],therefor:[2,7],thi:[0,2,3,5,6,7,8,14],thing:0,tho:8,through:[2,5,8],thrown:2,time:[0,2,10],timelin:14,timeout:2,titl:[3,8],tool:0,topic:7,trace:3,trade:5,traffic:7,transform:2,translat:2,transmit:3,treat:2,tree:14,trigger:[2,3,6,8,14],tweak:10,two:[2,8,14],txt:7,type:[0,1,5,6,8],typescript:5,u:0,udp:[5,6,7],ufw:10,ui:2,under:[0,3],understand:6,union:2,uniqu:2,univers:8,unlock:3,until:[2,8],up:7,updat:[0,2,3,6],update_audio_fil:0,update_nod:0,update_or_create_audio_cel:0,update_spe:2,upgrad:[6,7],upload:3,upon:[0,14],url:2,us:[0,2,3,4,5,6,7,8,10],use_input:[3,6],user:[0,2,3,7,8,10],usernam:0,uses:6,utf:7,uuid:[0,2,3,6],uuid_to_group:0,uuidfield:[2,3],v6:7,val:3,valid:[2,3,6],validate_gencaster_token:2,valu:[2,3,6,8],variabl:[2,3,8],varieti:2,version:6,via:[0,2,3,6,7,8,10,14],visibl:2,visit:[0,14],visual:2,voic:3,voice_nam:3,voicenamechoic:[2,3],volum:2,vue:10,wa:[0,2,8],wai:[2,7,8],wait:[2,8],wait_for_stream_vari:[2,8],walk:14,want:2,warn:3,we:[0,2,3,5,6,8],web:10,webrtc:[3,7,10],websocket:0,websocket_disconnect:0,well:[0,2],what:[2,8],when:[0,3,6],where:[2,3],which:[0,2,3,5,6,7,8,9,10,14],whole:2,whose:3,wip:14,within:[0,2,3,8,14],without:[2,3],word:2,work:[6,14],world:2,would:[0,6],write:[2,5,8],written:[2,5,8,10],wrong:[2,6],x:[2,7],y:2,yet:[0,2],yield:[2,3,8],you:[0,2,8],your:8},titles:["GenCaster Base","API","Story Graph","Stream","GraphQL","Caster Back","OSC Server","Deployment","Caster Editor","Caster Front","Gencaster","Quickstart","Services","Caster Sound","Story Graph"],titleterms:{"var":2,add:4,api:[1,5,6],audio:8,back:5,base:0,caster:[5,8,9,13],cell:[2,8],comment:8,connect:9,content:[1,10,12],deploi:0,deploy:[0,7],dev:0,develop:0,distributor:0,docker:7,door:2,edg:14,editor:8,engin:2,env:7,except:3,flow:9,front:9,frontend:3,gencast:[0,10],global:5,graph:[2,3,5,14],graphql:4,local:0,markdown:[2,8],model:[2,3,5,6],ngingx:7,node:14,osc:6,oscauthmixin:6,parser:2,playback:2,python:8,queri:4,quickstart:11,remoteactionmessag:6,rout:6,runtim:2,scacknowledgemessag:6,scbeaconmessag:6,schema:0,script:8,secret:7,server:6,servic:[7,12],set:0,sound:13,stori:[2,14],stream:3,supercollid:8,templat:9,test:0,todo:[0,2,3,4,6,11,14],type:[2,3],ufw:7}}) \ No newline at end of file