# AI : Faceswap : Source : lib
#### `cli/actions.py`
```
```
#### `cli/args.py` ✔
```
FaceSwapArgs
__init__( subparser, command )
script = ScriptExecutor( command )
parser = subparser.add_parser( command )
parser.set_defaults( func = script.execute_script )
```
#### `cli/args_extract_convert.py`
```
ExtractConvertArgs < FaceSwapArgs
ExtractArgs < ExtractConvertArgs
ConvertArgs < ExtractConvertArgs
```
#### `cli/args_train.py`
```
TrainArgs < FaceSwapArgs
```
#### `cli/launcher.py` ✔
```
ScriptExecutor
__init__( command )
_command = command.lower()
execute_script( arguments )
script = _import_script()
process = script( arguments )
process.process()
_import_script()
mod = f"scripts.{ _command.lower() }"
return getattr( import_module( mod ), _command.title() )
```
#### `multithreading.py`
```
FSThread < threading.Thread
__init__( target = None, name = None, args = (), kwargs = None, daemon = None )
super()
run()
_target( *_args, **_kwargs )
MultiThread
__init__( target, *args, thread_count = 1, name = None, **kwargs )
_threads = []
start()
for idx in range( _thread_count ):
thread = FSThread( name = f"{ _name }_{ idx }", ... )
thread.start()
_threads.append( thread )
```
#### `queue_manager.py`
```
EventQueue < queue.Queue
...
_QueueManager
...
queue_manager = _QueueManager()
```
#### `serializer.py`
```
# s = get_serializer( "json" )
# data = s.load( file )
# s.save( file, data )
Serializer # ABC; use get_serializer | get_serializer_from_filename
...
get_serializer( serializer )
npy -> _NPYSerializer()
compressed -> _CompressedSerializer()
json -> _JSONSerializer()
pickle -> _PickleSerializer()
yaml -> _YAMLSerializer()
get_serializer_from_filename( filename )
.json -> _JSONSerializer()
.p, .pickle -> _PickleSerializer()
.npy -> _NPYSerializer()
.fsa -> _CompressedSerializer()
.yaml, .yml -> _YAMLSerializer()
```