File size: 3,673 Bytes
906220b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# D:\AI-Hub\ComicPipeline\spine_agent.py
# CLI entry point — imports SpineAgent from the spine/ package.

import json
import argparse
from spine import SpineAgent


def main():
    parser = argparse.ArgumentParser(description="Spine Agent - Multi-tool AI orchestrator")
    parser.add_argument("prompt", help="Command prompt")
    parser.add_argument("--server", choices=["rig1", "spark", "rig1_network"], default="rig1")
    args = parser.parse_args()

    agent = SpineAgent()
    result = agent.run(args.prompt, args.server)

    if result["status"] == "success":
        op = result.get("operation", "")

        if op == "generate_image":
            print(f"Image generated: {result['filepath']}")
            print(f"Model: {result['model']}, Seed: {result['seed']}")

        elif op == "generate_characters":
            print(f"Characters generated: {result['success_count']}/{result['total_characters']}")
            print(f"Output: {result['characters_dir']}")
            for r in result['results']:
                if r['status'] == 'success':
                    print(f"  {r['character_id']}: {r['filepath']}")

        elif op == "generate_scene":
            print(f"Scene generated: {result['filepath']}")
            print(f"Story: {result['story']}, Page: {result['page_number']}")
            print(f"Characters: {result['characters']}, Seed: {result['seed']}")

        elif op == "create_story":
            print(f"Story created: {result['title']}")
            print(f"Format: {result['format']}, ID: {result['story_id']}")
            print(f"Characters: {result['characters']}, Pages: {result['pages']}")
            print(f"Saved: {result['filepath']}")
            print(f"Duration: {result['duration_seconds']}s")

        elif op == "render_comic":
            print(f"Comic rendered: {result['story']}")
            print(f"Pages: {result['pages']}")
            print(f"Output: {result['filepath']}")

        elif op == "render_coloring_book":
            print(f"Coloring book rendered: {result['story']}")
            print(f"Pages: {result['pages']}")
            print(f"Output: {result['filepath']}")

        elif op == "render_children_book":
            print(f"Children's book rendered: {result['story']}")
            print(f"Output: {result['filepath']}")

        elif op == "render_story":
            print(f"Story rendered: {result['story_id']}")
            print(f"Duration: {result['duration_seconds']}s")

        elif op == "retry_failures":
            print(f"Retry complete: {result['recovered']}/{result['retried']} recovered")
            if result['still_failed'] > 0:
                print(f"Still failing: {result['still_failed']}")

        elif op == "batch_generate":
            print(f"Batch generated: {result['success_count']}/{result['count']} images")
            print(f"Output: {result['output_dir']}")
            if result['seeds']:
                print(f"Seeds: {result['seeds']}")

        elif op == "memory_stats":
            print(f"Memory stats: {json.dumps(result['data'], indent=2)}")

        elif op == "recall":
            print(f"Recall results: {json.dumps(result['data'], indent=2)}")

        elif op == "rag_query":
            print(f"Answer: {result['answer']}")

        elif op == "read_json":
            print(f"Read: {result['filepath']}")
            print(json.dumps(result['data'], indent=2)[:500])

        else:
            print(json.dumps(result, indent=2))

    else:
        print(f"Error: {result.get('error', 'unknown')}")


if __name__ == "__main__":
    main()