+With the Babeltrace |~| 2 Python bindings, you can write programs to
+do everything you can do, and more, with libbabeltrace2, that is:
+
+* Write custom source, filter, and sink *component classes* which
+ you can package as Python *plugins*.
+
+ Component classes are instantiated as components within a *trace
+ processing graph* and are assembled to accomplish a trace manipulation
+ or conversion job.
+
+* Load plugins (compiled shared object or Python modules), instantiate
+ their component classes within a trace processing graph, connect the
+ components as needed, and run the graph to accomplish a trace
+ manipulation or conversion job.
+
+ This is what the :command:`babeltrace2` CLI tool's ``convert`` and
+ ``run`` commands do, for example.
+
+A trace processing graph contains connected components. The specific
+component topology determines the trace processing task to realize.
+
+.. figure:: images/basic-convert-graph.png
+
+ A *conversion graph*, a specific trace processing graph.
+
+Between the components of a trace processing graph, *messages* flow from
+output ports to input ports following the configured connections through
+*message iterators*. There are many types of messages, chief amongst
+which is the *event message*.
+
+With the Babeltrace |~| 2 Python bindings, you can also query some
+specific object from a component class (for example, the available LTTng
+live sessions of an `LTTng <https://lttng.org/>`_ relay daemon). This is
+what the :command:`babeltrace2` CLI tool's ``query`` command does, for example.
+
+Make sure to read the :bt2man:`babeltrace2-intro(7)`
+manual page to learn even more about the Babeltrace |~| 2 project and
+its core concepts.