Source code for zprp_ffmpeg.view

from .filter_graph import Filter
from .filter_graph import SinkFilter
from .filter_graph import SourceFilter
from .filter_graph import Stream


[docs] def view(graph: Stream, filename=None) -> None: "Creates graph of filters" import networkx as nx # type: ignore from matplotlib import pyplot as plt # type: ignore colors = {"input": "#99cc00", "output": "#99ccff", "filter": "#ffcc00"} G = nx.DiGraph() graph_connection = [] for node in graph._nodes: if isinstance(node, SourceFilter): graph_connection.append((node.in_path.split("/")[-1], colors["input"])) elif isinstance(node, SinkFilter): graph_connection.append((node.out_path.split("/")[-1], colors["output"])) elif isinstance(node, Filter): graph_connection.append((node.command, colors["filter"])) # Adding nodes for nodeG, color in graph_connection: G.add_node(nodeG, color=color) # Adding edges for i in range(len(graph_connection) - 1): G.add_edge(graph_connection[i][0], graph_connection[i + 1][0]) # Set nodes to be horizontal pos = {} for i, nodeG in enumerate(graph_connection): # type: ignore pos[nodeG[0]] = (i, 0) nx.draw( G, pos, with_labels=True, node_shape="s", node_size=3000, node_color=[color for _, color in graph_connection], font_weight="bold" ) if filename: plt.savefig(filename) else: plt.show()